러스트로 뼈대부터 웹 서비스, 테스트, 배포까지!
더 빠르고 안전한 웹 애플리케이션을 만드는 최상의 방법!
러스트는 시스템 프로그래밍을 위한 안전하고 빠르며 생산적인 언어다. 또한, 개발자들이 가장 배우고 싶은 언어 1위이기도 하다. 이 책은 러스트로 웹 애플리케이션을 처음부터 끝까지 따라 하며 만들 수 있도록 도와준다. 먼저 애플리케이션의 뼈대인 기본적인 사항부터 구현한 다음, 러스트의 기능과 장점을 활용해 코드를 점진적으로 개선해 나간다. API를 외부에 공개하고, 데이터베이스를 연결하여 데이터를 저장하고, 애플리케이션을 테스트하고 배포하는 데 필요한 모든 과정을 다루며, 라우팅, 미들웨어, 데이터베이스, 비동기 작업 등 필요한 내용으로 가득차 있다. 또한, 따라 하는 실습에 그치지 않고 애플리케이션을 개발하는 동안 만나는 다양한 상황과 시행착오를 겪는 과정을 보여주면서 러스트의 장점을 살린 솔루션을 제공하기 때문에 여러분도 이 솔루션을 이해하여 자신의 프로젝트에 적용하고, 러스트를 더 깊이 있게 이해할 수 있을 것이다.
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 맺음말
찾아보기
ㆍ지은이 바스티안 그루버
ㆍ옮긴이 장연호
독자의견 남기기