최종 프로젝트: 멀티스레드 웹 서버 구축하기

기나긴 여정이었습니다만, 이 책의 끝에 도달했습니다. 이 장에서는 함께 프로젝트를 하나 더 작성하여 앞서 다룬 내용들을 다시 요약하는 것은 물론, 마지막 장에서 다룬 개념들을 보여드리고자 합니다.

최종 프로젝트로는 ‘hello’라고 말하는 웹 서버를 만들 것이며 웹 브라우저에서는 그림 20-1과 같이 보일 것입니다.

hello from rust

그림 20-1: 최종 프로젝트

이 웹 서버를 만들기 위한 계획은 다음과 같습니다:

  1. TCP와 HTTP에 대해 조금 알아봅니다.
  2. 소켓에서 TCP 연결을 수신 대기합니다.
  3. 소수의 HTTP 요청을 파싱합니다.
  4. 적절한 HTTP 응답을 생성합니다.
  5. 스레드 풀로 서버의 처리량을 개선합니다.

시작하기 전에 한 가지 세부 사항을 언급해야 합니다: 여기서 사용할 방법이 러스트로 웹 서버를 구축하는 최선의 방법은 아닙니다. 커뮤니티 회원들은 여기서 구축하는 것보다 더 완벽한 웹 서버와 스레드 풀 구현을 제공하는, 프로덕션에 바로 사용할 수 있는 여러 개의 크레이트를 crates.io에 배포했습니다. 하지만 이 장의 의도는 쉬운 길을 안내하는 것이 아니라 학습을 돕는 것입니다. 러스트는 시스템 프로그래밍 언어이므로, 작업하고자 하는 추상화 수준을 선택할 수 있으며 다른 언어에서 가능한 수준 혹은 실용적인 수준보다 더 낮은 수준까지 갈 수 있습니다. 그러므로 기본 HTTP 서버와 스레드 풀을 수동으로 작성하여 향후 사용할 수 있는 크레이트의 일반적인 아이디어와 기술을 배울 수 있도록 하겠습니다.