FastAPI로 배우는 백엔드 프로그래밍 with 클린 아키텍처
Description
현대적이며 빠르고 쉬운 FastAPI 사용법
파이썬 기반의 FastAPI는 플라스크보다 API 생성이 쉽고, 장고보다 가볍다. 이 책은 FastAPI를 활용해 백엔드 소프트웨어를 클린 아키텍처로 작성하는 법을 안내한다. 클린 아키텍처는 계층이 많아짐에 따라 코드의 양 또한 늘어나지만, 계층을 나누기 편한 FastAPI는 클린 아키텍처를 적용하기에 적합한 웹 프레임워크다. TIL 앱을 만들기 위해 먼저 FastAPI와 클린 아키텍처의 개념과 기능을 알아본 후 회원 가입, DI 도입, CRUD 기능, JWT, 환경변수 설정, 클린 아키텍처 계층 구현, 테스트 작성 등 한 단계씩 나아간다. 클린 아키텍처를 적용하는 과정을 통해 FastAPI라는 강력한 무기를 얻게 될 것이다.

저자

한용재

저자:한용재
LG전자MC사업부에서휴대폰에탑재되는소프트웨어를오랜기간만들었고,토스인컴과모두싸인에서백엔드엔지니어로활동하다가현재는비긴트의대표를맡고있다.모토는일신우일신(日新又日新)이고,영화와교양과학서적을좋아한다.《NestJS로배우는백엔드프로그래밍》(2022,제이펍)을집필했고,《처음시작하는FastAPI》(한빛미디어,2024),《이펙티브소프트웨어테스팅》(2023,제이펍)을번역했다.

목차


베타리더후기ix
시작하며xii
이책에대하여xiv

CHAPTER1FastAPI개발환경구축1
1.1FastAPI소개1
1.2포어트리를이용한가상환경과의존성관리5
1.3Hello,FastAPI10
1.4API문서화14
1.5데이터베이스설정19
1.6책에서만들애플리케이션:TIL22
1.7마무리23

CHAPTER2클린아키텍처25
2.1아키텍처가필요한이유25
2.2분할정복29
2.3클린아키텍처의주요4계층30
__2.3.1도메인(엔티티)계층32
__2.3.2애플리케이션(유스케이스)계층33
__2.3.3인터페이스(인터페이스어댑터)계층34
__2.3.4인프라스트럭처(프레임워크및드라이버)계층35
2.4의존관계역전원칙36
2.5마무리37

CHAPTER3회원가입39
3.1User도메인39
3.2회원가입유스케이스41
__3.2.1ULID41
__3.2.2유저저장42
__3.2.3중복유저검사44
__3.2.4패스워드암호화45
3.3회원가입인터페이스47
__3.3.1API라우터47
__3.3.2파이단틱을이용한유효성검사48
__3.3.3유효성검사오류의상태코드를400BadRequest로변경하기50
__3.3.4유저생성유스케이스호출52
__3.3.5클래스기반라우터53
3.4회원정보영속화54
__3.4.1SQLAlchemyORM적용54
__3.4.2Alembic으로테이블생성및리비전관리56
__3.4.3UserRepository구현62
3.5마무리65

CHAPTER4의존성주입67
4.1Depends68
4.2dependency-injector69
4.3마무리74

CHAPTER5회원리소스의CRUD기능완성75
5.1유저메모속성추가75
5.2유저정보업데이트78
5.3유저목록조회82
__5.3.1테스트용유저데이터생성82
__5.3.2유저목록조회82
__5.3.3페이징84
5.4회원탈퇴(유저삭제)88
5.5파이단틱유효성검사91
__5.5.1요청파라미터/본문검사91
__5.5.2파이단틱응답모델95
5.6마무리97

CHAPTER6비동기프로그래밍99
6.1파이썬에서동시성을처리하는방법99
6.2FastAPI의비동기처리101
6.3비동기적용기준104
6.4마무리105

CHAPTER7로그인107
7.1JWT107
__7.1.1헤더109
__7.1.2페이로드110
__7.1.3시그니처111
7.2로그인112
7.3JWT인증/인가116
__7.3.1토큰에역할추가116
__7.3.2일반유저용API인증/인가118
__7.3.3어드민용API인증/인가121
7.4마무리124

CHAPTER8환경변수125
8.1dotenv126
8.2config.py:환경변수관리모듈127
8.3환경변수적용128
8.4마무리130

CHAPTER9TILNote131
9.1도메인계층구현132
9.2애플리케이션계층구현134
9.3인터페이스계층구현139
__9.3.1노트생성140
__9.3.2노트목록조회/노트상세조회141
__9.3.3노트업데이트143
__9.3.4노트삭제144
__9.3.5태그이름으로노트검색144
9.4인프라계층구현145
__9.4.1Note,Tag테이블모델링145
__9.4.2테이블마이그레이션147
__9.4.3노트저장소:노트조회150
__9.4.4노트저장소:노트생성152
__9.4.5노트저장소:노트업데이트153
__9.4.6노트저장소:노트삭제154
__9.4.7노트저장소:태그명으로노트조회155
9.5마무리156

CHAPTER10백그라운드작업:환영이메일발송157
10.1BackgroundTasks158
__10.1.1BackgroundTasks란?158
__10.1.2BackgroundTasks로이메일전송160
10.2셀러리166
__10.2.1셀러리란?166
__10.2.2셀러리환경설정169
__10.2.3셀러리태스크수행예시171
__10.2.4셀러리로이메일전송176
10.3마무리178

CHAPTER11미들웨어179
11.1미들웨어예시181
11.2콘텍스트변수183
11.3유저활동을추적하는로깅186
__11.3.1유저정보를콘텍스트변수로저장하는미들웨어186
__11.3.2커스텀로거188
__11.3.3유저ID가포함된로그출력190
11.4마무리191

CHAPTER12테스팅193
12.1도메인계층테스트194
12.2애플리케이션계층테스트196
__12.2.1테스트더블197
__12.2.2유저생성유스케이스테스트198
12.3인터페이스계층테스트204
12.4인프라계층테스트206
12.5마무리209

찾아보기212

출판사 서평

FastAPI와클린아키텍처로스파게티코드없애기

2024년스택오버플로에서실시한'웹프레임워크및기술'항목에서FastAPI가14위에올랐다.파이썬웹프레임워크중에서는플라스크,장고의뒤를이어3위를기록하며,2018년첫등장이후플라스크와장고의뒤를빠르게추격하고있다.또한아직버전1이정식출시되지않았음에도뛰어난성능과직관적인사용법등수많은장점을가지고있어넷플릭스,우버,시스코시스템즈등많은기업에서채택하고있다.

FastAPI는공식문서가이미매우잘정리되어있어,이책은FastAPI를활용한소프트웨어구조설계와이를통해유지보수성과확장성을극대화하는클린아키텍처에중점을둔다.오늘날백엔드개발에서가장중요한요소중하나는효율적이고확장가능한아키텍처다.‘제대로된’아키텍처가없는시스템은스파게티코드와큰진흙덩어리와다를바없다.12장으로구성된이책은FastAPI의강력한기능을바탕으로클린아키텍처를적용해유지보수가용이하고안정적인시스템을만드는방법을제시한다.

1장에서는FastAPI의특징과포어트리를통한개발환경의구축방법,책에서만들TIL앱구조를간단히살펴본다.2장에서는도메인,애플리케이션,인터페이스,인프라계층으로나누어클린아키텍처를알아본다.3장에서는TIL앱서비스의핵심기능중하나인회원가입을FastAPI로구현하면서클린아키텍처를적용한다.

4장에서는3장에서구현한회원가입기능에의존성주입을도입하고,5장에서는파이단틱을활용해유저정보를조회,수정삭제하는API를완성한다.6장에서는FastAPI에서동시성을처리하기위한방법의하나인비동기처리를수행하는예를살펴본다.7장에서는TIL서비스에가입한유저가로그인하는기능을만들어보면서,인증/인가에가장많이사용되는JWT에대해알아보고적용한다.

8장에서는코드내에하드코딩돼있는값들을환경변수로관리하는작업을,9장에서는TIL서비스의기능을확장해유저가작성한게시물(노트)리소스를다루는예를알아본다.10장에서는FastAPI로서버를개발할때적용할수있는백그라운드작업방식을,11장에서는미들웨어활용방법을다룬다.마지막으로12장에서는반복적인테스트를쉽게할수있고,안전한시스템을구축할수있도록작성한코드에대해테스트코드를작성한다.

이책은FastAPI와클린아키텍처를통해단순한기능구현을넘어,더나은소프트웨어설계방법을고민하는개발자들에게유용한가이드다.특히빠르게변화하는웹개발환경에서안정적이고확장가능한백엔드시스템을구축하고자하는개발자들에게실질적인도움을줄것이다.

주요내용
FastAPI와클린아키텍처의개념과기능
파이단틱을이용한유효성검사
DI방식과적용방법
인증/인가를위한JWT활용
셀러리를이용한비동기처리
HTTP요청과응답이쉬워지는미들웨어사용법
계층별로단위테스트적용하는법