최종 프로젝트: 멀티스레드 웹 서버 만들기
최종 프로젝트: 멀티스레드 웹 서버 만들기 (Final Project: Building a Multithreaded Web Server)
긴 여정이었지만, 드디어 책의 끝에 도달했어요. 이번 장에서 한 가지 프로젝트를 더 만들어, 마지막 장들에서 다룬 개념 몇 가지를 직접 보여드리고 앞선 강의들도 정리해 볼게요.
이번 최종 프로젝트에서는 웹 브라우저에서 Figure 21-1처럼 보이는 "Hello!"라고 말하는 웹 서버를 만들 거예요.

Figure 21-1: 우리의 최종 공동 프로젝트
웹 서버를 만드는 계획은 이러해요.
- TCP와 HTTP에 대해 조금 배우기
- 소켓에서 TCP 연결 수신하기
- 소수의 HTTP 요청 파싱하기
- 올바른 HTTP 응답 만들기
- 스레드 풀로 서버의 처리량(throughput) 개선하기
시작하기 전에 세부사항 두 가지를 언급할게요. 첫째, 우리가 쓸 방법은 Rust로 웹 서버를 만드는 최고의 방법이 아니에요. 커뮤니티 멤버들은 우리가 만들 것보다 더 완전한 웹 서버와 스레드 풀 구현을 제공하는, 프로덕션 준비가 된 크레이트 여러 개를 crates.io에 게시해 두었어요. 하지만 이번 장의 의도는 쉬운 길을 택하는 것이 아니라 여러분이 배우도록 돕는 거예요. Rust는 시스템 프로그래밍 언어이므로, 우리가 함께 작업할 추상화의 수준을 선택할 수 있고, 다른 언어에서는 가능하지 않거나 실용적이지 않은 더 낮은 수준으로 내려갈 수 있어요.
둘째, 여기서 async와 await를 쓰지 않을 거예요. async 런타임을 만드는 것을 추가하지 않아도, 스레드 풀을 만드는 것 자체가 충분히 큰 도전이니까요! 하지만 이번 장에서 보게 될 문제 중 일부에 async와 await가 어떻게 적용될 수 있는지는 짚고 넘어갈게요. 결국 17장에서 언급했듯이, 많은 async 런타임이 작업을 관리하기 위해 스레드 풀을 사용해요.
그래서 우리는 기본 HTTP 서버와 스레드 풀을 직접 작성할 거예요. 그러면 미래에 쓸지도 모를 크레이트 뒤에 숨은 일반적인 아이디어와 기법을 배울 수 있거든요.
출처: The Rust Book
더 알아보기 (Learn more)
- 스레드 풀과 관련된 crates.io의 프로덕션 준비 크레이트
- 이번 장의 후속 절들: 싱글 스레드 웹 서버, 멀티스레드 웹 서버, 우아한 종료와 정리