이 책은 소켓을 기반으로 네트워크 프로그래밍을 공부하는 분들을 위해서 쓰여진 책이다. 따라서 많은 기초지식을 요구하지는 않는다. 다만 책의 예제가 C언어로 작성되었기 때문에, 이에 대한 이해는 반드시 지니고 있어야 한다. 즉, 필자는 여러분이 C언어를 이해하고 있다고 가정하였다.
네트워크에 대한 개론적인 지식이 있다면, 이 책을 공부하는데 많은 도움이 된다. 그러나 반드시 선행되어야 하는 것은 아니다. 그리고 처음 네트워크 프로그래밍을 시작하는 분들에게 초점을 맞추었기 때문에 여기서 제시하는 모든 예제 프로그램은 가독성을 가장 중시하였다. 코드구현에 있어서 생각해 볼 수 있는 최적화는 그 다음으로 고려된 문제였다.
이 책은 리눅스 그리고 윈도우를 기반으로 네트워크 프로그래밍을 공부하려는 모든 분들께 적합하게 구성되었다. 따라서 어떠한 운영체제를 기반으로 네트워크 프로그래밍을 공부하더라도 문제가 되지 않는다. 그러나 네트워크 프로그래밍의 특성상 동시에 두 운영체제를 기반으로 공부하는 것이 보다 효율적이고 바른 학습 방법임을 말씀 드리고 싶다. 하나의 운영체제를 기반으로 네트워크 프로그래밍을 공부하기 위해 드는 노력이 100이라고 한다면, 동시에 두 운영체제를 기반으로 공부하기 위해 드는 노력은 120에 지나지 않는다. 조금만 더 투자하면 보다 많은 것을 얻을 수 있다.
이 책의 학습을 위해서 리눅스나 윈도우를 아주 잘 다룰 필요는 없다. 컴파일만 할 줄 알면 되는데, 리눅스의 경우 컴파일 방법까지 이 책에서 설명하고 있다. 또한 거의 대부분의 예제는 두 운영체제(리눅스, 윈도우)를 기반으로 제공되기 때문에, 네트워크 프로그래밍에 있어서의 운영체제 별 차이를 쉽게 획인할 수 있다.
윤성우
벤처회사에서 개발자로 일하다가 IT분야의 집필과 강의로 처음 이름이 알려진 그는 2000년대 초반까지는 소프트웨어 아키텍트(Architect)로 일을 하다가, 2004년부터 지금까지 OpenGL-ES 그래픽스 라이브러리의 구현과 3D 가속 칩의 개발 및 크로노스 그룹(모바일 국제 표준화 컨소시엄)의 표준안에 관련된 일에 참여하였다.
또한 핸드폰용 DMB 칩의 개발에도 참여하였으며, 현재는 ㈜액시스소프트의 CTO로 있으면서 웹 기반 솔루션 개발에 관심을 갖고 있다. 시간이 날 때마다 조깅을 하며 다양한 구상을 하는 저자는, 방법론에 근거한 소프트웨어 설계 전문가가 모든 분야에서 활발히 활동하여 소프트웨어 발전에 기여해야 한다는 생각을 갖고 있다.
Part 01. 네트워크 프로그래밍의 시작
Chapter 01. 네트워크 프로그래밍과 소켓의 이해
Chapter 02. 소켓의 타입과 프로토콜의 설정
Chapter 03. 주소체계와 데이터 정렬
Chapter 04. TCP 기반 서버/클라이언트 1
Chapter 05. TCP 기반 서버/클라이언트 2
Chapter 06. UDP 기반 서버/클라이언트
Chapter 07. 소켓의 우아한 연결 종료
Chapter 08. 도메인 이름과 인터넷 주소
Chapter 09. 소켓의 다양한 옵션
Chapter 10. 멀티프로세스 기반의 서버구현
Chapter 11. 프로세스간 통신(Inner Process Communication)
Chapter 12. IO 멀티플렉싱(Multiplexing)
Chapter 13. 다양한 입출력 함수들
Chapter 14. 멀티캐스트 & 브로드캐스트
Part 02. 리눅스 기반 프로그래밍
Chapter 15. 소켓과 표준 입출력
Chapter 16. 입출력 스트림의 분리에 대한 나머지 이야기
Chapter 17. select보다 나은 epoll
Chapter 18. 멀티쓰레드 기반의 서버구현
Part 03. 윈도우 기반 프로그래밍
Chapter 19. Windows에서의 쓰레드 사용
Chapter 20. Windows에서의 쓰레드 동기화
Chapter 21. Asynchronous Notification IO 모델
Chapter 22. Overlapped IO 모델
Chapter 23. IOCP(Input Output Completion Port)
Part 04. 네트워크 프로그래밍 마무리하기
Chapter 24. HTTP 서버 제작하기
Chapter 25. 앞으로 해야 할 것들
전편보다 더 자세하고 보강된 내용!
문장 하나하나가 다시 쓰여진 책!
독자를 2배 더 생각해서 집필한 책!
12개월간 온라인 무료강의 제공!
본 도서는 2003년도에 출간된 윤성우 저자의 「열혈강의 TCP/IP 소켓 프로그래밍」의 개정판이다. 초판과 마찬가지로 리눅스와 윈도우 기반에서의 소켓 프로그래밍을 함께 설명하며, 초보자에게 적절한 설명과 예제를 통해서 소켓 프로그래밍에 대한 재미를 더하고 있다. 우선 초판과 달라진 점은 설명의 포인트와 분량이다. 간단히 설명해도 되는 내용은 보다 간단하고 명료하게 설명하였으며, 자세한 설명이 요구되는 경우에는 설명의 분량을 늘려가면서까지 확실한 이해를 돕고 있다. 또한 시대의 흐름에 맞게 epoll에 대한 내용이 하나의 Chapter로 추가되었다. 특히 윈도우 영역의 Overlapped IO와 IOCP에 대한 설명방식에는 큰 변화가 있었다.
이전 윤성우 저자의 「열혈강의 TCP/IP 소켓 프로그래밍」에서는 초보집필자의 풋풋함이 묻어있었다면, 이번에 출간된 책에서는 그간 다듬어진 숙련된 집필능력을 바탕으로 세련미가 더하여졌다. 따라서 이전 명성 그대로, 많은 분들에게 소켓 프로그래밍에 대한 진입장벽을 낮춰주는 역할을 계속하리라 믿는다.
윤성우 저자의 TCP/IP 소켓 프로그래밍은 운영체제와 시스템 프로그래밍 그리고 TCP/IP 프로토콜에 대한 전반적인 내용을 담고 있기 때문에 많은 독자들로부터 오랜 시간 사랑을 받아왔다. 그러나 시대의 흐름에 맞는 개정이 요구되는 상황이었고, 내용도 일부 보강할 필요가 있던 시점이었다. 개정의 내용은 매우 만족스럽다고 생각한다. 이전에 집필한 내용을 Copy & Paste하지 않고 한자씩 다시 써 내려가는 과정에서 내용의 연결이 훨씬 자연스러워졌으며, 다소 두리뭉실하게 설명했던 내용들도 그 명확함이 한층 더해졌다고 생각한다. 특히 epoll과 IOCP에 대한 설명을 살펴보면, select 방식과의 차이점을 통해서 어떠한 장점이 있는지를 매우 명확히 설명한다. 이전 책에서는 서버의 구현방법 별 장점과 사용방법 위주로 설명이 진행되었다면, 이번 개정판에서는 각 모델 별 차이점을 코드 수준에서까지 설명한다. 그리고 엣지 트리거와 레벨 트리거에 대한 설명까지 포함하고 있어서 실무 개발에도 큰 도움을 주고 있다.
이미 소켓 프로그래밍을 공부한 경험이 있더라도 select 방식이 엣지 트리거인지 레벨 트리거인지 알지 못한다면, IOCP에서의 쓰레드 할당이 어떠한 의미를 갖는지 잘 모른다면 이 책은 여러분에게 많은 도움이 될 것이다. 특히 대학에서 컴퓨터공학을 전공하고 있다면, 이 책은 학업에도 많은 도움이 될 것이다.