★심화 선택 — 고성능 동시성
여기서부터는 심화 선택입니다. 본문인 PART 01부터 05까지를 충분히 익혔다면, 이제 한 단계 더 깊은 고성능의 세계로 들어갈 차례입니다. 본문이 아직 손에 익지 않았다면 먼저 그쪽을 다진 뒤 돌아와도 좋습니다.
PART 04에서 우리는 여러 클라이언트를 동시에 다루는 법을 배웠습니다. 하지만 그 방법들은 수백 명 수준에서 잘 동작할 뿐, 수만 명 앞에서는 한계를 보였습니다. 이 PART는 바로 그 한계를 넘습니다.
먼저 1만 개의 동시 연결이라는 전설적인 도전, C10K 문제를 만납니다. 그다음 그 문제를 푸는 리눅스의 핵심 무기 epoll을 깊이 파고들고, macOS와 BSD의 형제인 kqueue를 짧게 봅니다. 이어서 요즘 Python 비동기 서버에 널리 쓰이는 asyncio가 사실은 이 모든 것 위에 세워진 이벤트 루프라는 정체를 밝힙니다. 빠른 서버에 꼭 필요한 백프레셔와 버퍼 관리를 다루고, 리눅스 비동기 I/O의 최신 흐름인 io_uring을 소개합니다. 마지막으로 Go, Rust, Node.js가 이 문제를 각자 어떻게 풀었는지 비동기 런타임의 지형도를 그려 봅니다.
한 가지 미리 알려 둘 점이 있습니다. 이 PART의 epoll과 io_uring은 리눅스 고유의 기술입니다. 그래서 코드 예제는 리눅스 환경을 전제로 합니다. macOS 사용자는 kqueue 부분을 직접 실행해 보고, epoll 부분은 개념과 코드를 읽되 실행은 리눅스나 WSL에서 하기를 권합니다. 다행히 Python의 고수준 도구들은 운영체제 차이를 감춰 주므로, 그 길도 함께 보여 드리겠습니다.