iBetter Books
수정

이 책이 다루는 세계

이 책은 소켓 프로그래밍, 그중에서도 TCP와 UDP 위에서 직접 데이터를 주고받는 법을 다룹니다. 네트워크 이론서가 아니라, 코드를 짜는 책입니다. 패킷이 라우터를 어떻게 넘어가는지가 아니라, 내 프로그램이 어떻게 다른 프로그램과 연결되고 데이터를 흘려보내는지를 배웁니다.

누구를 위한 책인가

다음 중 하나에 해당한다면 이 책이 잘 맞습니다.

대학에서 네트워크나 시스템 프로그래밍 과목을 듣고 있고, 이론은 들었는데 막상 서버를 짜라고 하면 막막한 학생. 웹 프레임워크는 써 봤지만 그 아래에서 무슨 일이 벌어지는지 궁금한 개발자. 채팅 서버나 게임 서버처럼 실시간으로 여러 명이 연결되는 프로그램을 만들어 보고 싶은 사람. 면접에서 "select와 epoll의 차이"를 묻는데 자신 있게 답하고 싶은 사람.

선수 지식

두 가지를 안다고 가정합니다. 첫째, Python의 기본 문법입니다. 함수, 반복문, 리스트와 딕셔너리 정도면 충분합니다. 둘째, C의 기초입니다. 포인터와 구조체를 다뤄 본 경험이 있으면 좋습니다. 다만 C가 약해도 괜찮습니다. 모든 예제는 Python으로 먼저 보여 주기 때문에, 개념은 Python에서 잡고 C는 천천히 따라와도 됩니다.

네트워크 이론을 깊이 알 필요는 없습니다. TCP가 "신뢰성 있는 연결"이고 UDP가 "그렇지 않다" 정도만 들어 봤으면 시작할 수 있습니다. 필요한 이론은 그때그때 짚어 줍니다.

학습 경로

이 책의 가장 큰 특징은 같은 프로그램을 두 번 만든다는 점입니다.

먼저 Python으로 만듭니다. Python의 socket 모듈은 운영체제의 소켓 기능을 거의 그대로 노출하면서도 문법이 간결합니다. 그래서 개념에만 집중할 수 있습니다. 개념이 손에 익으면, 같은 프로그램을 C로 다시 짭니다. C에서는 바이트 단위로 버퍼를 직접 다루고, 주소 구조체를 손으로 채우고, 반환값을 일일이 확인해야 합니다. 이 과정에서 Python이 뒤에서 대신 해 주던 일들이 비로소 보입니다.

이 Python에서 C로 가는 길이 이 책 전체를 관통하는 리듬입니다. 어렵게 느껴진다면 Python 부분만 따라가도 한 권을 완주할 수 있도록 구성했습니다.