길벗·이지톡

도서 IT전문서/IT입문서 프로그래밍/오픈소스

러스트로 뼈대부터 웹 서비스, 테스트, 배포까지!

더 빠르고 안전한 웹 애플리케이션을 만드는 최상의 방법!

 

러스트는 시스템 프로그래밍을 위한 안전하고 빠르며 생산적인 언어다. 또한, 개발자들이 가장 배우고 싶은 언어 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 맺음말

 

찾아보기

 

더보기접기

저자&기여자

ㆍ지은이 바스티안 그루버

소개
Centrifuge의 런타임 엔지니어로 러스트를 사용하고 있다. Rust Async Working Group의 일원이며, Rust and Tell Berlin Meetup Group을 설립했고 세계에서 가장 큰 암호화폐 거래소 중 한 곳에서 러스트를 사용해 핵심 백엔드에서 일한 경력이 있다. 또한, 경력 12년 이상의 작가로 LogRocket을 위해 정기적으로 러스트에 대한 글을 쓰고 있으며, 이 책의 웹사이트(https://rustwebdevelopment.com)에서 수집한 내용으로 인터뷰와 강연도 한다. 본인의 경험으로 복잡한 개념을 이해하기 쉬우면서도 심도 있는 내용으로 쉽게 가르치며, 많은 사랑을 받고 있다. 트위터(@recvonline)로 만날 수 있으며 이메일 주소는 foreach@me.com이다.

ㆍ옮긴이 장연호

소개
20여 년간 웹 프로그래머로 활동했으며 의료, 교육, 메타버스 등 다양한 분야에서 일했다. 취미로 OCaml, Common Lisp를 이용해 게임을 제작하고 있으며, 신화와 역사, SF와 판타지 콘텐츠를 즐겨 본다.

연관 프로그램

아래 프로그램은 길벗출판사가 제공하는 것이 아닙니다.
무료로 사용할 수 있는 정보를 안내해 드리니, 지원이 필요하면 해당 프로그렘 제작사로 문의해 주세요.