시스템 프로그래밍의 기본적인 내용을 담고 있습니다..
시스템 프로그래밍을 시작해 보려는 분들에게 권해드리고 싶네요..
이 책과 스티븐슨의 Advaned Programming in the Unix Eviroment를 같이 보신다면 많은 도움이 될 겁니다...
혹시 네트워킹에 관심이 있다면 스티븐슨의 Unix Network Programming vol 1,2를 같이 보셔야 할 겁니다..
전반적인 것을 다루고 있기 때문에 시스템 프로그래밍을 시작하시려는 분에겐 좋은 지침서가 될수 있을 겁니다...
더 깊이 알고 싶으시다면 "리눅스 커널의 이해", "리눅스 디바이스 드라이버" 등과 위의 스티븐스가 쓴 책들을 곁들여야 할 겁니다..
회사에서 프로젝트를 진행하다가 FreeBSD 쪽으로 프로그래밍을 할 일이 있어서 서적을 두세권 구입하면서 이 책도 함께 구입을 했다.
이책은 C를 이용해서 System V release 4 버전의 Unix 프로그래밍에 관한 주제를 다루고 있으며, 평이한 문장과 쉬운 설명, 내용이 SVR4 에 국한된 것이 아니라 대부분의 UNIX 계열에도 적용될 수 있게 되어 있으며, 이식성을 위해서 고려해야 할 점까지도 언급을 하고 있다.
SVR4 의 소개부터 시작해서, 파일 사용법, 표준 라이브러리의 소개, 사용자와 그룹, 시그널,프로세스, 터미널, IPC, 소켓 프로그래밍, 그리고 TLI까지 전체적인 유닉스 프로그래밍의 내용을 담고 있다.
찾아보면 알겠지만 초보 유닉스 개발자가 볼만한 유닉스 프로그래밍 서적중에서 이만한 책이 별로 없다. Stevens 의 서적이 훌륭하지만 네트워킹에 대한 한정된 주제를 다루고 있다는 점을 고려해 본다면 입문서 또는 개괄서로서 부족함이 없는 서적이다.
다만 유닉스 자체가 생소한 이들에게 이 책은 적합하지 않다. 유닉스 뿐만 아니라 윈도우도 마찬가지일 것이다. 시스템 프로그래밍을 하려면 어느정도는 해당 OS를 사용할 수 있어야 하지 않을까?
간단하게 말하자면..
초보분들은 안 보시는게..
제가 초보라서 그런지..몇장 보고..
"헉 공부하고 봐야지"라고..정한책..
컴퓨터 책사이에 잘 모셔둔 책..
어렵네요..-_-;(물런 제생각이지만..)
대상 독자층
『유닉스 시스템 프로그래밍 SVR4』는 유닉스(특히 SVR4) 환경에서 C나 C++ 프로그래밍 언어를 사용하여 응용 프로그램을 작성하는 개발자를 대상으로 한 책이다. 일반 사무용 프로그램보다는 네트워킹이나 시스템 프로그램을 작성하는 개발자에게 초점이 맞추어져 있다는 사실에 주목해야 할 것이다. 유닉스에 처음 입문하는 개발자는 이 책을 바로 읽기가 힘들지도 모르겠다.
구체적으로 도움이 될만한 독자층은 다음과 같다.
* 데몬 프로그램, 클라이언트/서버 구조 프로그램을 작성하려는 개발자
* 운영체제에 밀접한 저수준(low-level) 응용 프로그램을 작성하려는 개발자
* 여러 유닉스 시스템에서 동시에 동작하는 이식성 높은 프로그램을 작성하려는 개발자
* 네트워크에서 동작하거나 프로세스간 통신이 필요한 프로그램을 작성하려는 개발자
* 유닉스 사용자를 관리하는 프로그램을 작성하려는 개발자
* 유닉스에서 제공하는 함수 API에 대해서 체계적으로 정리한 문서가 필요한 개발자
주요 내용
『유닉스 시스템 프로그래밍 SVR4』는 여기저기 흩어져 있는 유닉스 개발 API를 장별로 체계적으로 묶은 다음 함수별 구문, 인수, 특성, 예제와 이식시 주의점을 소개하고 있다. 소개 성격이 짙은 1장과 부록을 제외한 나머지 모든 장에서 일관적인 방식으로 설명하고 있다. 책의 전반적인 내용을 간략하게 소개하면 다음과 같다.
1장. SVR4 소개
2장. 유틸리티 루틴
3장. 저수준 입출력 루틴
4장. 표준 입출력 라이브러리
5장. 파일과 디렉토리
6장. 특수 목적 파일 연산
7장. 시간과 날짜 연산
8장. 사용자와 그룹
9장. 시스템 환경 설정과 자원 제한
10장. 신호
11장. 프로세스
12장. 터미널
13장. 프로세스간 통신
14장. 소켓을 사용한 네트워킹
15장. TLI를 사용한 네트워킹
16장. 기타 루틴
부록 A. ANSI C의 중요한 변화
부록 B. 파일시스템 데이터 구조체 접근
부록 C. /proc 파일 시스템
부록 D. 의사 터미널
부록 E. 링크 레벨에서 네트워크 접근하기
목차를 보면 알겠지만, 유닉스를 사용해서 할 수 있는 일(함수나 시스템 호출을 사용하여)을 전반적으로 다룬다. PC와는 달리 유닉스에서는 이렇게 체계적으로 함수를 모아둔 책을 찾기 어렵다는 점에서 시작부터 높은 점수를 줄 수 있다.
내용 평가
PC를 처음 사용하다가 유닉스에 접한 사람들은 세 번 놀란다. 처음에는 편집기가 vi라는 사실에, 다음으로 통합환경(IDE) 없이 모두 xterm 몇 개 띄워놓고 vi/gcc/make/gdb 그룹을 사용하여 프로그램을 개발한다는(또는 개발해야 한다는) 사실에, 마지막으로 man 페이지를 사용해야만 한다는 사실에…
그 중에서 man 페이지는 예나 지금이나 악평이 자자하다. 사용하기가 얼마나 불편했으면 “RTFM(Read The F*cking Manual)”이라는 용어까지 나왔겠는가? 물론 어떤 사람은 중간 F를 “Fine”이라고 언급하기도 하는데, “Fine”은 API를 직접 만든 사람에게나 쓸 수 있는 단어 같다. :) FSF/GNU는 info라는 새로운 man 페이지 양식을 개발하여 보급하려고 필사적으로 노력하고 있지만, 역부족으로 보인다. 결국 21세기가 도래한 현재에도 man 페이지가 유닉스 개발 문서를 지탱하고 있는 셈이다. 유닉스 태동기부터 나온 man 페이지인지라 생명력도 그만큼 끈질긴 모양이다(초장기에 유닉스를 문서 조판기를 목표로 개발하였고, man 페이지는 이 문서 조판기 프로그램인 troff/nroff으로 처리한다).
MSDN와는 달리 man 페이지는 검색 기능도 교차 참조도 한눈에 들어오는 쓸만한 예제도 제공하고 있지 않다. 제한적인 키워드 검색과 HTML로 변환한 다음 See Also 항목을 링크하는 방법도 주변에서 찾아볼 수 있지만, 상이한 운영체제에서 프로그램을 작성할 경우 각 운영체제 별 man 페이지를 찾아보는 수고를 덜지는 못한다. 터미널 세 개를 띄워놓고 하나는 HP 10.x man 페이지, 다른 하나는 Solaris 2.x man 페이지, 마지막 하나는 Digital UNIX 4.x man 페이지를 참조하면서 프로그램을 작성해본 사람이라면 무슨 의미인지 바로 이해를 할 것이다.
지금까지 현재 얼마나 우리가 불편한 개발 환경을 감수하고 있는지에 대해 제법 장황하게 이야기했다. 이런 상황에도 불구하고 “저는 유닉스 환경이 하나도 불편하지 않습니다!”라고 자신만만하게 이야기할 수 있다면 교차 플랫폼을 넘나드는 당대의 유닉스 전문가임에 틀림이 없으며, 이 책을 읽을 필요가 없는 독자임에 분명하다. 그렇다면 보통 개발자에게 도움을 줄 수 있는 길은 없을까? 해답은 바로 『유닉스 시스템 프로그래밍 SVR4』이다. 이 책은 이상에서 언급한 man 페이지의 불편함(검색, 분류, 교차 참조, 예제, 호환성)을 극복하는 동시에 각 API 마다 간결하면서도 명쾌한 해석을 내리고 있다.
“간결하고 명쾌한 해석”이라는 문구와 관련하여 생각해보자. 유닉스 환경에서 프로그램을 작성하다 man 페이지를 읽으면 이 함수가 무엇을 어떻게 처리하는지는 알겠는데 실제 프로그램 코드로 옮기기에는 역부족인 상황을 많이 만난다. 폐쇄적인 성격을 대표하는 윈도우 개발환경에서 제공하는 MSDN이라면 원래 API에 접근할 수 있는 방법이 원천적으로 차단되어있기에 이를 극복하기 위해 충분한 프로그램 예제와 주의 사항 등을 제공하지만, 유닉스는 필요한 거의 대부분 원시코드를 볼 수 있으므로(BSD/리눅스와는 달리 SVR4는 예외라고 말할지도 모르겠다. 하지만 극히 최근까지(6월 말) SVR4의 대표격인 솔라리스 8 원시코드를 학술적인 목적에 쓸 수 있도록 배포했었다) man 페이지는 지극히 짧고 투박스럽다. 심지어 함수 호출 결과 넘어오는 인자를 언제 free시켜야 하는지에 대해서도 원시코드를 보지 않는 이상 감으로 때려잡아야 할 경우도 있으니 초보 프로그래머가 몸살을 앓지 않는 상황이 오히려 신기할 지경이다. 프로그램 작성하면서 필요한 man 페이지 보다 API 내부 코드를 매번 찾을 수는 없는 노릇이 아닌가?
『유닉스 시스템 프로그래밍 SVR4』는 man 페이지와는 달리 함수에 대한 정확하고 명쾌한 설명을 내리고 있다. 함수 인자를 넘길 경우 어떤 점에 주의해야 하고, 결과를 받아서 어떻게 사용해야 하며, 실제 예제를 동원하여 어떻게 API 뭉치를 응용 프로그램에 적용할 수 있는지 속이 다 후련해지도록 파헤친다. 더 좋은 소식은 SVR4 C API를 위한 튜토리얼 형식으로 사용할 수도 있도록 각 장이 순서에 맞추어 서로 연계되어있다는 점이다. 이렇게 『유닉스 시스템 프로그래밍 SVR4』는 솔라리스 man 페이지를 처음부터 끝까지 인쇄해서 묶어놓은 책과는 본질적으로 차이가 있으므로 고급 개발자가 아닌 이상 이 책을 첫 장부터 마지막 장까지 순서대로 읽어 전반적인 흐름을 잡은 다음 필요할 때마다 후반부 찾아보기에 위치한 색인을 참조하여 요리책(cookbook)처럼 사용하면 깜짝 놀랄만한 효과를 올릴 수 있을 것이다.
마지막으로 언급하고 넘어가야 할 점이 있다. SVR4 용이라고 BSD나 리눅스 사용자들이 읽지마라는 법은 그 어디에도 없다는 사실이다. 오히려 BSD와 리눅스 C API를 이해하기 위해서 적극적으로 이 책을 읽기를 권장한다. 심지어 윈도우 NT 사용자라도 유닉스와 연동하기 위해 많은 도움을 받을 수 있다. 자신이 전통적인 SVR4 운영체제를 사용하던, 전통적인 BSD 계열 운영체제를 사용하던, 리눅스를 사용하던 결국에는 유닉스라는 큰 테두리에서 응용 프로그램을 작성한다는 균형 잡힌 시각이 필요할 때이다(이 말이 제발 호사가들 사이에서 Flame War를 일으키지 않기를 바랄 뿐이다. 리눅스는 리눅스일 따름이고 BSD는 BSD일 따름이라고 주장하면 우물 안 개구리처럼 해당 플랫폼에 묶일 수 밖에 없다).
번역 상태
번역은 미국식 문체가 조금 남아있다는 사실을 제외하고는 크게 눈에 거슬리는 부분이 없이 처음부터 끝까지 초지일관 같은 능률(performance)을 보인다. 대부분 번역을 하다 보면 초반부보다 후반부에 오류가 집중되기 마련이지만 이 책은 이러한 골치 아픈 문제를 극복한 것 같아서 흐뭇하다. API를 다루는 서적이라서 내부에 번역하기가 어려운 용어가 많음에도 불구하고 부드럽게 잘 넘어가는 것으로 보아 상당히 신경을 쓴 흔적이 돋보인다.
한글 번역판을 못 믿는 개발자 분들도 굳이 비싼 돈을 들여가며 영문판 『UNIX Systems Programming for SVR4』(오라일리, 1996.7)를 구입할 이유가 없으리라 본다. 이 정도면 충분하다!
기술적 정확성, 가독성, 편집 상태
『유닉스 시스템 프로그래밍 SVR4』는 주로 SVR4 계열 유닉스를 다루고 있지만, 약간 오래 전 버전(원서가 나온 시점이 1996년 7월이라는 사실에 주목하기 바란다)이라서 최신 버전에서 프로그램을 다루는 사람들은 한바탕 난리를 칠 가능성도 있다. 특히 HP-UX에서 문제를 일으킬 소지가 높은데 필자의 경험으로 10.x와 11.x는 양자가 다른 운영체제가 아닌지 의심할 정도로 시스템 구조, API에서 많은 차이를 보인다. 이는 기술적인 정확성이 떨어진다는 단점이기 보다는 두 번째 판으로 개선작업이 이루어지지 않았기 때문에 벌어지는 일이므로 새로운 운영체제를 사용하다 의심 나는 구석이 있다면 한번씩 man 페이지를 참조하여 “돌다리도 두들겨보고 건너는” 편이 좋을 것이다. 이러한 점에만 유의하면 이 책을 통해 SVR4에서 유닉스 프로그래밍을 즐기는 작업을 가로막는 기술적인 장애물은 없다고 봐도 과언이 아닐 것이다.
원시코드가 많고 함수, 구조체 설명과 상수 설명이 마구 섞여 있어 상당히 혼란스러울 것이라고 생각했다면 오산이다. API가 장별로 나뉘어져 있고 각 장도 절 몇 개로 깔끔하게 나뉘어져 있으므로, 조금만 익숙해지면 원하는 내용을 쉽게 찾을 수 있다. 본문에 있는 원시코드 일부 주석에서 정렬이 어긋나 있다는 점이 눈에 거슬리는 점을 빼고는 가독성과 편집 상태역시 양호하다고 볼 수 있겠다.
최종 검토 의견
『유닉스 시스템 프로그래밍 SVR4』는 SVR4 환경에서 C/C++로 응용 프로그램을 작성하는 데 있어 필수적인 책이다. 일단 이 책을 읽고 나면 초보자는 물론이고 어느 정도 유닉스 시스템에 익숙하다고 자부하는 중급자도 유닉스 프로그래밍에 대해 새로운 시각을 확보할 수 있을 것이다.