러스트 웹 개발 : Tokio, Warp, Reqwest를 활용한 웹 애플리케이션 개발!
저자

바스티안그루버

저자:바스티안그루버
Centrifuge의런타임엔지니어로러스트를사용하고있다.RustAsyncWorkingGroup의일원이며,RustandTellBerlinMeetupGroup을설립했고세계에서가장큰암호화폐거래소중한곳에서러스트를사용해핵심백엔드에서일한경력이있다.또한,경력12년이상의작가로LogRocket을위해정기적으로러스트에대한글을쓰고있으며,이책의웹사이트에서수집한내용으로인터뷰와강연도한다.본인의경험으로복잡한개념을이해하기쉬우면서도심도있는내용으로쉽게가르치며,많은사랑을받고있다.

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

목차



1부러스트소개
1장왜러스트인가?
1.1배터리포함:러스트의도구
1.2러스트컴파일러
1.3웹서비스를위한러스트
1.4러스트애플리케이션의유지보수성
1.5요약

2장기초쌓기
2.1러스트플레이북따라하기
__2.1.1구조체로리소스모델링하기
__2.1.2Option이해하기
__2.1.3에러를해결하기위해문서사용하기
__2.1.4러스트에서문자열다루기
__2.1.5이동,대여,소유권에대해훑어보기
__2.1.6트레이트를사용하고구현하기
__2.1.7Result다루기
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.1Warp에있는기능
__3.1.2Warp의필터체계
3.2첫JSON응답을GET요청으로받기
__3.2.1프레임워크가생각하는대로따르기
__3.2.2성공경로처리하기
__3.2.3Serde의도움받기
__3.2.4우아하게에러처리하기
3.3CORS헤더다루기
__3.3.1애플리케이션레벨에서CORS헤더를반환하기
__3.3.2CORS응답검사
3.4요약

4장RestfulAPI구현하기
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.3url-form-encoded로answersPOST요청하기
__4.3.1url-form-encoded와JSON의차이점
__4.3.2url-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.2Rustfmt로코드서식화하기
5.4요약

6장로그,추적,디버깅
6.1러스트애플리케이션로깅하기
__6.1.1웹서비스에로깅구현하기
__6.1.2들어오는HTTP요청을로깅하기
__6.1.3구조화된로그만들기
6.2비동기애플리케이션추적하기
__6.2.1Tracing크레이트소개
__6.2.2애플리케이션에tracing통합하기
6.3러스트애플리케이션디버깅하기
__6.3.1명령줄에서GDB사용하기
__6.3.2LLDB로웹서비스디버깅하기
__6.3.3비주얼스튜디오코드와LLDB사용하기
6.4요약

7장애플리케이션에데이터베이스추가하기
7.1예제데이터베이스설정하기
7.2첫번째테이블만들기
7.3데이터베이스크레이트로작업하기
__7.3.1프로젝트에SQLx추가하기
__7.3.2Store에데이터베이스연결하기
7.4경로핸들러다시구현하기
__7.4.1get_questions에데이터베이스추가하기
__7.4.2add_question경로핸들러재구현하기
__7.4.3질문을수정,삭제하는핸들러수정하기
__7.4.4add_answer경로수정하기
7.5에러처리와데이터베이스상호작용추적하기
7.6SQL마이그레이션통합하기
7.7사례연구:DBMS바꾸기
7.8요약

8장서드파티라이브러리와통합하기
8.1코드준비하기
__8.1.1API고르기
__8.1.2HTTP크레이트이해하기
__8.1.3Reqwest로예제HTTP호출추가하기
__8.1.4외부API요청에대한에러처리하기
8.2JSON응답을구조체로역직렬화하기
__8.2.1API응답정보를수집하기
__8.2.2API응답에대한타입만들기
8.3API에질문과답변보내기
__8.3.1add_question경로핸들러리팩터링
__8.3.2질문수정시금칙어적용하기
__8.3.3add_answer경로핸들러수정하기
8.4타임아웃과다수요청을한번에처리하기
__8.4.1외부HTTP호출의재시도구현하기
__8.4.2퓨처를동시에또는병렬로실행하기
8.5요약

3부프로덕션으로투입시키기
9장인증과권한추가
9.1웹서비스에인증추가하기
__9.1.1사용자개념만들기
__9.1.2데이터베이스마이그레이션하기
__9.1.3registration엔드포인트추가하기
__9.1.4비밀번호해시하기
__9.1.5중복계정에러처리하기
__9.1.6상태저장인증과상태비저장인증
__9.1.7login엔드포인트추가하기
__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.2Warp필터테스트하기
11.3통합테스트설정만들기
__11.3.1lib.rs와바이너리로코드분할하기
__11.3.2통합테스트크레이트와원샷서버구현하기
__11.3.3등록테스트추가하기
__11.3.4에러가발생하는경우되돌리기
__113.5로그인과질문올리기테스트하기
11.4요약

부록보안고려하기
A.1종속성의보안이슈검증하기
A.2자신의코드확인하기
A.3맺음말

찾아보기

출판사 서평

러스트로빠르고견고하며현대적인웹애플리케이션을개발한다!

느리고불안정한웹개발에질렸다면러스트로해결하자!
러스트는시스템프로그래밍을위한안전하고빠르며생산적인언어이다.안전한메모리관리,효율적인컴파일러,강력한타입시스템등으로코드를안전하고효율적으로작성할수있다.이책은이러한러스트와함께비동기런타임용Tokio,웹서버및API용Warp,외부HTTP요청실행을위한Reqwest등최신웹개발기술과도구를사용하여현대적인웹애플리케이션을개발한다.이를통해최신트렌드에맞는웹개발을경험하고익힐수있다.느리고리소스가부족하며불안정한웹개발에질렸다면러스트가해결책이될것이다.

실용적이고실무적인가이드를제시한다!
손으로직접해보는것이배우는데있어가장좋은방법이다.무언가를직접해본다면다음에좀더개선되고자동화된방식으로작업할때그장단점을알수있기때문이다.이런저자의철학이이책에녹아있다.기본적인사항부터구현한다음,러스트의기능과장점을활용해다른솔루션을뒤이어구현하면서코드를점진적으로개선해나간다.코드는점차군더더기가없어지고,좀더자동화된방식으로만들어진다.이때비로소러스트의아름다움을알게된다.또한,러스트로웹애플리케이션을개발할때발생할수있는일반적인문제에대한실용적인해결방법과팁을제공하여웹애플리케이션을효과적으로구축할수있도록도와준다.

[베타평]

다른기술서적과비슷하게,따라하기방식으로구성되어있어책을따라실습하다보면애플리케이션하나가완성됩니다.다만,다른책과달리일단에러를발생시키고왜이런에러가발생했는지에대한이유를설명하며올바른방법을제시해줍니다.그냥따라하다보면이해되지않은부분을무심결에넘어가게되는데,이책처럼에러를확인하면서다시한번생각하게해주는방식은실무에서프로그래밍을할때시행착오를겪는과정과동일하다고느꼈습니다.이는마치러스트의컴파일러가동작하는방식과유사한데,저자가러스트를깊이이해하고있음을생각하면당연한전개방식이라고생각합니다.
주제하나를가지고처음부터끝까지블록쌓기처럼완성해가는과정또한마음에들었습니다(마음의든정도가아니라정말훌륭했습니다).목표가선명했으며,왜이렇게바꿔나가야하는지를설명하면서그간어렴풋하게만알고있던개념들이명확해지고러스트뿐아니라프로그래밍전반에대한이해도를높일수있는시간이었습니다.
역자가원문에있는예제를직접실행해보면서발견한문제점까지꼼꼼하게보완한덕분에오히려원서보다완성도가높아져학습자로서감사말씀을드리고싶습니다.
실습환경macOS13.0,RustPlayground,VSCode
유서호_해피테크놀로지CTO

러스트에대한기초를쌓고무엇을해야할지막막할때이책이웹백엔드개발에대한훌륭한길잡이가되어줍니다.이책에서는백엔드의비동기처리를위해Warp,Tokio,Reqwest를사용하는방법그리고개발에서머무는것이아니라실제프로덕션으로완성시키기위해배포와테스트를하는방법까지러스트개발에대해상세하게안내해줍니다.개인적으로log4rs,tracing소개와GDB,LLDB등상세한디버깅을설명하는6장이가장마음에들었습니다.러스트의기초를넘어러스트를웹백엔드개발실무에적용해보고자하는분들에게이책을추천하고싶습니다.
실습환경WindowsWSL2,Ubuntu20.04.6LTS
전봉규_LGCNS

러스트문법을공부한적이있어이책의베타테스터로참여하게되었습니다.러스트의문법만배웠지웹으로는처음알게되었습니다.웹프레임워크를이용해프로젝트하나를만드는책의구성이좋았습니다.또한,함수형기법으로웹프레임워크를반영하는데,함수형기법까지알게되어좋았습니다.