1부 러스트 소개 1장 왜 러스트인가? 1.1 배터리 포함: 러스트의 도구 1.2 러스트 컴파일러 1.3 웹 서비스를 위한 러스트 1.4 러스트 애플리케이션의 유지보수성 1.5 요약 2장 기초 쌓기 2.1 러스트 플레이북 따라 하기 __2.1.1 구조체로 리소스 모델링하기 __2.1.2 Option 이해하기 __2.1.3 에러를 해결하기 위해 문서 사용하기 __2.1.4 러스트에서 문자열 다루기 __2.1.5 이동, 대여, 소유권에 대해 훑어보기 __2.1.6 트레이트를 사용하고 구현하기 __2.1.7 Result 다루기 2.2 웹 서버 만들기 __2.2.1 동시에 다수 요청을 다루기 __2.2.2 러스트의 비동기 환경 __2.2.3 러스트에서 async/await 다루기 __2.2.4 러스트의 퓨처 타입 사용하기 __2.2.5 런타임 고르기 __2.2.6 웹 프레임워크 고르기 2.3 요약 2부 시작하기 3장 첫 경로 핸들러 만들기 3.1 웹 프레임워크에 대해 알아보기: Warp __3.1.1 Warp에 있는 기능 __3.1.2 Warp의 필터 체계 3.2 첫 JSON 응답을 GET 요청으로 받기 __3.2.1 프레임워크가 생각하는 대로 따르기 __3.2.2 성공 경로 처리하기 __3.2.3 Serde의 도움 받기 __3.2.4 우아하게 에러 처리하기 3.3 CORS 헤더 다루기 __3.3.1 애플리케이션 레벨에서 CORS 헤더를 반환하기 __3.3.2 CORS 응답 검사 3.4 요약 4장 Restful API 구현하기 4.1 인메모리 스토리지에서 질문 가져오기 __4.1.1 모의 데이터베이스 설정하기 __4.1.2 테스트 데이터를 준비하기 __4.1.3 가짜 데이터베이스에서 읽어 들이기 __4.1.4 쿼리 매개변수 파싱하기 __4.1.5 전용 에러 반환하기 4.2 질문을 POST, PUT, DELETE하기 __4.2.1 스레드에 안전한 방식으로 데이터를 수정하기 __4.2.2 질문 추가하기 __4.2.3 질문 업데이트하기 __4.2.4 잘못된 요청 처리하기 __4.2.5 저장소에서 질문 삭제하기4.3 url-form-encoded로 answers POST 요청하기 __4.3.1 url-form-encoded와 JSON의 차이점 __4.3.2 url-form-encoded로 answers 추가하기 4.4 요약 5장 코드 정리하기 5.1 코드 모듈화 __5.1.1 러스트의 내장 mod 시스템 사용하기 __5.1.2 다양한 경우를 위한 실용적인 폴더 구조 __5.1.3 라이브러리와 하위 크레이트 만들기 5.2 코드 문서화하기 __5.2.1 문서 주석과 비공개 주석 사용하기 __5.2.2 주석에 코드 추가하기 5.3 코드베이스를 린팅하고 서식화하기 __5.3.1 클리피 설치하기 __5.3.2 Rustfmt로 코드 서식화하기 5.4 요약 6장 로그, 추적, 디버깅 6.1 러스트 애플리케이션 로깅하기 __6.1.1 웹 서비스에 로깅 구현하기 __6.1.2 들어오는 HTTP 요청을 로깅하기 __6.1.3 구조화된 로그 만들기 6.2 비동기 애플리케이션 추적하기 __6.2.1 Tracing 크레이트 소개 __6.2.2 애플리케이션에 tracing 통합하기 6.3 러스트 애플리케이션 디버깅하기 __6.3.1 명령줄에서 GDB 사용하기 __6.3.2 LLDB로 웹 서비스 디버깅하기 __6.3.3 비주얼 스튜디오 코드와 LLDB 사용하기 6.4 요약7장 애플리케이션에 데이터베이스 추가하기 7.1 예제 데이터베이스 설정하기 7.2 첫 번째 테이블 만들기 7.3 데이터베이스 크레이트로 작업하기 __7.3.1 프로젝트에 SQLx 추가하기 __7.3.2 Store에 데이터베이스 연결하기 7.4 경로 핸들러 다시 구현하기 __7.4.1 get_questions에 데이터베이스 추가하기 __7.4.2 add_question 경로 핸들러 재구현하기 __7.4.3 질문을 수정, 삭제하는 핸들러 수정하기 __7.4.4 add_answer 경로 수정하기 7.5 에러 처리와 데이터베이스 상호 작용 추적하기 7.6 SQL 마이그레이션 통합하기 7.7 사례 연구: DBMS 바꾸기 7.8 요약 8장 서드파티 라이브러리와 통합하기 8.1 코드 준비하기 __8.1.1 API 고르기 __8.1.2 HTTP 크레이트 이해하기 __8.1.3 Reqwest로 예제 HTTP 호출 추가하기 __8.1.4 외부 API 요청에 대한 에러 처리하기 8.2 JSON 응답을 구조체로 역직렬화하기 __8.2.1 API 응답 정보를 수집하기 __8.2.2 API 응답에 대한 타입 만들기 8.3 API에 질문과 답변 보내기 __8.3.1 add_question 경로 핸들러 리팩터링 __8.3.2 질문 수정 시 금칙어 적용하기 __8.3.3 add_answer 경로 핸들러 수정하기8.4 타임 아웃과 다수 요청을 한 번에 처리하기 __8.4.1 외부 HTTP 호출의 재시도 구현하기 __8.4.2 퓨처를 동시에 또는 병렬로 실행하기 8.5 요약 3부 프로덕션으로 투입시키기 9장 인증과 권한 추가 9.1 웹 서비스에 인증 추가하기 __9.1.1 사용자 개념 만들기 __9.1.2 데이터베이스 마이그레이션하기 __9.1.3 registration 엔드포인트 추가하기 __9.1.4 비밀번호 해시하기 __9.1.5 중복 계정 에러 처리하기 __9.1.6 상태 저장 인증과 상태 비저장 인증 __9.1.7 login 엔드포인트 추가하기 __9.1.8 토큰에 만료 날짜 추가하기 9.2 인증 미들웨어 추가하기 __9.2.1 데이터베이스 테이블 마이그레이션하기 __9.2.2 토큰 검증 미들웨어 만들기 __9.2.3 계정 ID를 처리하도록 기존 경로를 확장하기 9.3 다루지 않는 내용 9.4 요약 10장 애플리케이션 배포하기 10.1 환경 변수로 애플리케이션 설정하기 __10.1.1 구성 파일 설정하기 __10.1.2 애플리케이션에 명령줄 입력을 허용하기 __10.1.3 웹 서비스로 환경 변수 읽고 파싱하기 10.2 서로 다른 환경에 맞춰 웹 서비스 컴파일하기 __10.2.1 바이너리를 빌드할 때 개발 플래그와 릴리스 플래그 사용하기 __10.2.2 다른 환경을 위해 크로스 컴파일하기 10.3 빌드 프로세스에서 build.rs 사용하기 10.4 웹 서비스에 맞는 도커 이미지 생성하기 __10.4.1 정적으로 연결된 도커 이미지 생성하기 __10.4.2 도커 컴포즈로 로컬 도커 환경 설정하기 __10.4.3 웹 서버의 구성을 추출하여 새로운 모듈에 넣기 10.5 요약 11장 러스트 애플리케이션 테스트하기 11.1 비즈니스 로직의 단위 테스트 __11.1.1 페이지 로직을 테스트하고 자체 에러로 처리하기 __11.1.2 환경 변수로 Config 모듈 테스트하기 __11.1.3 새로 생성된 모의 서버로 profanity 모듈 테스트하기 11.2 Warp 필터 테스트하기 11.3 통합 테스트 설정 만들기 __11.3.1 lib.rs와 바이너리로 코드 분할하기 __11.3.2 통합 테스트 크레이트와 원샷 서버 구현하기 __11.3.3 등록 테스트 추가하기 __11.3.4 에러가 발생하는 경우 되돌리기 __11 3.5 로그인과 질문 올리기 테스트하기 11.4 요약 부록 보안 고려하기 A.1 종속성의 보안 이슈 검증하기 A.2 자신의 코드 확인하기 A.3 맺음말 찾아보기