최종 프로젝트: 멀티스레드 웹 서버 만들기
긴 여정이었지만, 이제 책의 마지막에 도달했습니다. 이 장에서는 마지막 프로젝트 하나를 함께 만들면서, 최근 장들에서 다룬 몇 가지 개념을 실제로 써 보고, 앞 장에서 배운 내용도 다시 복습하겠습니다.
최종 프로젝트로는 웹 브라우저에서 그림 21-1처럼 “Hello!” 라고 말하는 웹 서버를 만들겠습니다.
웹 서버를 만드는 계획은 다음과 같습니다.
- TCP와 HTTP 에 대해 조금 배운다.
- 소켓에서 TCP 연결을 기다린다.
- 소수의 HTTP 요청을 파싱한다.
- 올바른 HTTP 응답을 만든다.
- 스레드 풀로 서버 처리량을 높인다.
Figure 21-1: Our final shared project
시작하기 전에 두 가지는 미리 짚고 가야 합니다. 첫째, 우리가 사용할 방식은 러스트로 웹 서버를 만드는 “최선의 방법” 은 아닙니다. 커뮤니티에는 우리가 만들 것보다 더 완전한 웹 서버와 스레드 풀 구현을 제공하는 실전용 크레이트들이 이미 crates.io 에 많이 공개되어 있습니다. 하지만 이 장의 목적은 “쉬운 길”을 택하는 것이 아니라, 개념을 배우는 데 있습니다. 러스트는 시스템 프로그래밍 언어이기 때문에, 다른 언어에서는 어렵거나 비실용적일 만큼 낮은 수준까지도 원하는 추상화 수준을 직접 선택해 내려갈 수 있습니다.
둘째, 여기서는 async 와 await 를 사용하지 않습니다. 스레드 풀 자체만으로도 충분히 큰 주제이기 때문입니다. 다만 이 장에서 다룰 문제들 중 일부에 async/await 가 어떻게 적용될 수 있는지는 짚고 넘어갈 것입니다. 실제로 17장에서 이야기했듯, 많은 async 런타임도 내부적으로는 스레드 풀을 사용해 작업을 관리합니다.
따라서 우리는 기본적인 HTTP 서버와 스레드 풀을 손으로 직접 구현하면서, 앞으로 여러분이 사용할 수도 있는 각종 크레이트가 어떤 일반적인 아이디어와 기법 위에 만들어졌는지 배우게 될 것입니다.