

요즘 네트워크 프로젝트를 진행하며 Unix Network Programming을 읽고 있다.
기존에 다뤄봤던 파싱은 이미 형태가 정해진 문자열 데이터를 대상으로 한 것이었다.
하지만 TCP는 애초에 메시지 단위가 아니라 그저 이어진 바이트 스트림(byte stream)을 제공할 뿐이라는 걸 이 책을 통해 알게 됐다.
즉, 클라이언트와 서버가 주고받는 데이터에는 원래 경계라는 게 없고, \r\n처럼 약속된 구분자를 두어 그 경계를 직접 정의해야 하나의 완전한 메시지를 알아볼 수 있는 것이다.
또한 단일 스레드로 여러 클라이언트를 처리하기 위해 이벤트 루프(poll/epoll)방식을 공부하고 있다.
(책이 오래되다 보니 Poll까지만 있음)
이런 구조가 이론에서 끝나는 게 아니라, nginx, Redis, Node.js와 같은 실제 시스템에도 쓰이고 있어서 더 흥미로웠다.

epoll은 다루지 않지만, C 기반으로 함수를 하나하나 짚어가며 설명해서 탐색하기 편했다.
뿐만 아니라 책 곳곳에 등장하는 그림들이 지금 봐도 직관적이어서, 개념의 흐름을 이해하는 데 많은 도움이 됐다.
client와 server 사이에서 3-way handshake, 데이터 전송, 4-way termination이 실제 함수 호출과 어떻게 맞물리는지 보여주는 시퀀스 다이어그램
그렇게 읽어나가다가, pipe와 shell 관련 내용을 공부하며 봤던 advanced programming in the unix environment(APUE)와 저자가 같다는 걸 알게 됐다.
그 순간 궁금해졌다.
이 사람은 대체 어떤 사람이길래 이렇게 큰 줄기를 아우르는 책들을 썼을까?
윌리엄 리처드 스티븐스(William Richard Stevens, 1951년 2월 5일 – 1999년 9월 1일)는 북로디지아(현재의 잠비아) 출신의 미국 컴퓨터 과학 저술가다. 특히 Unix와 TCP/IP를 다룬 책들로 잘 알려져 있다.
책 저술 외에도 IETF(Internet Engineering Task Force)에 여러 RFC(Request for Comments) 문서를 공동 저자로 참여했다. 그가 참여한 RFC는 크게 두 갈래로 나뉜다. 하나는 IPv6를 위한 Berkeley 소켓 API 확장이고, 다른 하나는 TCP 세션의 혼잡 제어(congestion control) 표준 방식이다.
2026년 지금 시점에서 읽다 보니 불편했던 포인트들도 있었다.
번역 과정에서 나온 단어들인데, echo server를 메아리 서버라고 한다든가, 커널을 "알맹이"라고 부르는 식(..)이다.
제공되는 코드 스타일도 상당히 올드하다.
(물론 C언어 자체에서 오는 느낌도 있지만, 30년의 세월이 더해졌다.)
한국 내에서 번역서들은 2판을 기준으로 한 것이기 때문에,
책을 제대로 읽고 싶다면 advanced programming in the unix environment(APUE), unix network programming(UNP) 둘 다 3판 원서로 보는 걸 추천한다.
인터넷을 뒤져보면 pdf가 있...
교보문고 댓글 중에 기똥찬 리뷰가 있어서 가져왔다.
비극 1)
// 번역서 책 용어를 사용한 대화
A : 파수꾼이 죽었어요...
B : core 파일을 분석해 보세요
A : core 파일요..?
B : 네.. 알맹이가 파수꾼이 왜 죽었는지 정보를 남겨 놨을 겁니다
A : 어느 파일명부에 저장되나요...?
B : 해당 파수꾼의 파일명부를 보면 됩니다..
=====================================
실제 대화
A : 데몬이 죽었어요...
B : core 파일을 분석해 보세요
A : core 파일요..?
B : 네.. 커널이 데몬이 왜 죽었는지 정보를 남겨 놨을 겁니다
A : 어느 디렉토리에 저장되나요...?
B : 해당 데몬의 디렉토리를 보면 됩니다..
비극 2)
// 번역서 책 용어를 사용한 대화
A : 환경 변수 문제인것 같습니다... 로그부분 때문에 뻑났네요..
B : 음.. 껍데기는 뭘쓰시나요..?
A : 배시 껍데기를 씁니다..
B : .bshrc 파일을 수정해야 합니다.. 어쩌구저쩌구...
A : 네.. 다 됐습니다..
B : 파수꾼을 다시 시작하세요..
A : 다시 시작했어요...
B : 고객으로 접속해서 잘 도는지 확인해 보세요..
A : 네...
=====================================
실제 대화
A : 환경 변수 문제인것 같습니다... 로그부분 때문에 뻑났네요..
B : 음.. 쉘은 뭘쓰시나요..?
A : 배시 쉘을 씁니다..
B : .bshrc 파일을 수정해야 합니다.. 어쩌구저쩌구...
A : 네.. 다 됐습니다..
B : 데몬을 다시 시작하세요..
A : 다시 시작했어요...
B : 클라이언트로 접속해서 잘 도는지 확인해 보세요..
A : 네...
이 사람 책이 좋은 이유
POSIX / Single UNIX Specification 같은 표준 인터페이스를 다룬다. 그래서 Linux, BSD, macOS 등 UNIX 계열 전반에 두루 적용되고, 배포판이 바뀌어도 지식이 낡지 않는다.
앞부분은 튜토리얼, 뒷부분은 레퍼런스로 쓰이는 구성이다. (이건 이 사람의 스타일인 것 같다.)
재미있게 술술 읽히지는 않지만, 사전처럼 책꽂이 한 편에 두고 필요할 때마다 꺼내볼 만한 책이다.
이 책이 더 좋아요.
of the Manual, by the Manual, for the Manual
The Linux Programming Interface


검색하다 들어와서 댓글 남깁니다. 아래 링크에 있는 사진이 아마도 스티븐스의 사진이 아닐까 싶습니다.
https://www.computerhope.com/people/william_stevens.htm