소켓과 그 위의 세계
소켓은 외딴섬이 아닙니다. 우리가 매일 쓰는 도구들이 모두 소켓 위에 올라타 있습니다. 이 절에서는 소켓이 전체 그림에서 어디쯤 있는지, 그리고 이 책이 다른 책들과 어떻게 다른지를 짚고 넘어가겠습니다. 지도를 먼저 보고 출발하면 길을 잃지 않습니다.
소켓 위에 세워진 것들
우리가 아는 거의 모든 통신 도구는 소켓을 감싼 것입니다.
웹 프레임워크인 FastAPI나 Express는 내부적으로 소켓을 열어 두고 클라이언트의 연결을 받습니다. 우리가 작성하는 것은 "이 경로로 요청이 오면 이 함수를 실행하라"는 규칙뿐이고, 소켓을 직접 다루는 일은 프레임워크가 대신합니다. WebSocket 라이브러리는 한 발 더 나아가 양방향 실시간 통신을 손쉽게 만들어 주지만, 그 바닥에는 역시 TCP 소켓이 있습니다. MQTT 같은 IoT 프로토콜, 데이터베이스 클라이언트, gRPC, 심지어 SSH까지도 결국은 소켓으로 바이트를 주고받습니다.
이 책을 마치면 이 도구들이 안에서 무슨 일을 하는지 짐작할 수 있게 됩니다. 그것이 추상화를 두려움 없이 쓰는 힘입니다.
이 책과 네트워크 이론서의 차이
서점이나 다른 강의에서 만나는 네트워크 책은 대부분 이론서입니다. OSI 7계층, IP 라우팅, TCP의 혼잡 제어 알고리즘처럼 데이터가 네트워크를 통과하는 원리를 설명합니다. 이런 책은 "왜 그렇게 동작하는가"를 알려 줍니다.
이 책은 다른 곳에 서 있습니다. 이 책은 "그래서 코드로 어떻게 짜는가"를 다룹니다. 3-way 핸드셰이크의 원리를 길게 설명하기보다, connect()를 호출하면 그 핸드셰이크가 어떻게 일어나고 코드에서 무엇이 보이는지를 봅니다. 이론을 완전히 무시하지는 않습니다. 코드를 이해하는 데 꼭 필요한 만큼은 그때그때 짚습니다. 다만 무게중심이 분명히 구현 쪽에 있습니다.
만약 네트워크의 큰 그림, 계층 구조와 프로토콜의 원리를 탄탄히 다지고 싶다면 "소설처럼 읽는 데이터통신과 컴퓨터 네트워크"를 함께 읽기를 권합니다. 그 책이 지도라면, 이 책은 그 땅 위를 직접 걸어 보는 책입니다. 둘은 경쟁하지 않고 서로를 채웁니다.
이 책이 다루지 않는 것
범위를 분명히 해 두겠습니다. 이 책은 특정 웹 프레임워크 사용법을 가르치지 않습니다. HTTP 명세 전체를 파헤치지도 않습니다. 라우터나 스위치 같은 네트워크 장비 설정도 다루지 않습니다. 우리의 관심사는 오직 하나, 내 프로그램과 상대 프로그램 사이에 통로를 열고 데이터를 안전하고 효율적으로 흘려보내는 일입니다.