이롭게 현명하게

[R-LOG] 서평단 / 기획에서 출시까지 FastAPI 개발 백서 / 길벗 본문

T-LOG/R-LOG

[R-LOG] 서평단 / 기획에서 출시까지 FastAPI 개발 백서 / 길벗

dev_y.h 2026. 1. 5. 18:03
728x90
반응형

본 서평은 출판사의 서평단으로 선정되어 제공받은도서를 읽고 작성하였습니다.

 

 


[목차]

들어가며

이 책은 어떤 책인가?

책 후기

추천 대상

마무리



[들어가며]

최근 금융 데이터로 데이터 분석을 공부하고 있다.

데이터를 수집하고 가공하는 과정은 흥미로웠지만 문득 '이렇게 분석한 결과는 어떻게 활용할 수 있을까?'라는 생각이 들었다.

이를 서비스나 제품의 형태로 풀어보면 재밌겠다는 생각이 들었다.

하지만 막상 웹 서비스로 확장하려 하니 백엔드 구조 설계, 데이터베이스, 배포와 운영까지 고려해야 할 요소들이 많아 쉽게 도전하지 못하고 있었다.

이런 고민을 하던 중 '기획에서 출시까지 FastAPI 개발 백서' 31차 개발자 리뷰어 모집 글을 보게 되었고 '기획부터 운영까지'라는 문구가 눈에 들어왔다.

하나의 서비스를 처음부터 끝까지 만들어보고 운영까지 경험할 수 있도록 구성되어 있다는 점이 인상적이었다.

서비스로 연결하는 관점을 배우고 싶어 서평단에 신청했고 리뷰어에 선정되어 이 책을 읽게 되었다.

 


[이 책은 어떤 책인가?]

기획에서 출시까지 FastAPI 개발 백서

  • 제목 : 기획에서 출시까지 FastAPI 개발 백서
  • 저자 : 차경묵
  • 출판사 : 길벗
  • 출판일 : 2025년 11월 7일

 

더보기

1장 우리가 만들 프로젝트와 도구 이해
1.1 프로젝트를 만들고 운영해야 하는 이유 
__1.1.1 포트폴리오 목적으로 프로젝트 만들기 
__1.1.2 학습 목적으로 프로젝트 만들기 
__1.1.3 프로젝트 목표를 출시 후 운영하는 것에 두자! 
1.2 FastAPI를 사용하는 이유
__1.2.1 FastAPI란 
__1.2.2 FastAPI 특징
1.3 우리가 만들 프로젝트의 목표와 계획 
__1.3.1 목표 
__1.3.2 프로젝트 계획 
1.4 약속 잡기 프로젝트에 사용하는 도구 
__1.4.1 개발 도구 
__1.4.2 운영 도구

2장 셸 기본 기능 익히기
2.1 셸이란 
__2.1.1 셸 인터페이스의 종류
2.2 경로와 디렉터리 
__2.2.1 경로
__2.2.2 디렉터리  
2.3 파일 다루기

3장 실습 환경 준비
3.1 비주얼 스튜디오 코드 설치 
__3.1.1 비주얼 스튜디오 코드 내려받기 
__3.1.2 맥OS에 설치하기 
__3.1.3 윈도우에 설치하기 
3.2 비주얼 스튜디오 코드 화면 구성 
3.3 비주얼 스튜디오 코드 기본 사용법 
__3.3.1 작업 디렉터리 지정하기 
__3.3.2 명령어 팔레트 
__3.3.3 파일 탐색과 상태 표시 
3.4 비주얼 스튜디오 코드 확장 기능 
__3.4.1 확장 기능이란 
__3.4.2 외양 바꾸기 
__3.4.3 파이썬 확장 기능 설치하기 
__3.4.4 셸 사용해 보기
3.5 파이썬 가상 환경 
__3.5.1 파이썬 가상 환경이란 
__3.5.2 가상 환경 다루기 
3.6 FastAPI 설치하고 맛보기
__3.6.1 FastAPI 설치하기 
__3.6.2 패키지 관리자, Poetry 사용하기 
__3.6.3 웹 애플리케이션 서버: Starlette, Uvicorn 
__3.6.4 Hello World

4장 약속 잡기 서비스 기획
4.1 약속 잡기 서비스 기능 기획 
__4.1.1 서비스 개요 
4.2 주요 기능 
__4.2.1 캘린더 구현: 원하는 일자 선택하기 
__4.2.2 부킹 생성: 일정 등록하기
__4.2.3 사용자별 캘린더 구분해서 보기 
__4.2.4 구글 캘린더 연동하기 
__4.2.5  소셜 로그인 구현하기 
4.3 사용자 인터페이스 요소 기획 
__4.3.1 기본 화면 
__4.3.2 타임슬롯 영역 
__4.3.3 약속 잡을 정보를 입력하는 화면 
__4.3.4 약속 신청 완료 화면 
__4.3.5 약속 신청할 일자가 없는 경우 
4.4 데이터 설계 
__4.4.1 몇 가지 개념 알고 가기 
__4.4.2 사용자 개체 
__4.4.3 사용자 소셜 계정 개체 
__4.4.4 사용자 캘린더 개체 
__4.4.5 타임슬롯 개체 
__4.4.6 부킹 개체 
__4.4.7 약속 잡기 서비스의 개체 관계 다이어그램으로 그려 보기

5장 데이터 모델링
5.1 파이썬에서 데이터베이스를 사용하는 방법: SQLModel 
__5.1.1 SQL과 ORM 
__5.1.2 SQLAlchemy 
__5.1.3 Pydantic 
__5.1.4 SQLModel 
5.2 모델링 
__5.2.1 사용자 개체: User 모델 
__5.2.2 사용자 소셜 계정 개체: OAuthAccount 모델  
__5.2.3 사용자 캘린더 개체: Calendar 모델  
__5.2.4 타임슬롯 개체: TimeSlot 모델 
__5.2.5 부킹 개체: Booking 모델  
5.3 데이터베이스 연결 설정 
__5.3.1 SQLite란 
__5.3.2 SQLAlchemy로 데이터베이스에 연결하는 방법 
__5.3.3 SQLAlchemy로 세션을 생성하는 방법 
__5.3.4 데이터베이스 연결 설정하기 
5.4 Alembic을 사용하여 데이터베이스 마이그레이션 
__5.4.1 Alembic 주요 개념 
__5.4.2 Alembic 설치하고 초기화하기 
__5.4.3 Alembic 설정하기 
__5.4.4 마이그레이션 스크립트 생성하기 
__5.4.5 자동 마이그레이션(autogenerate) 설정해 보기 
__5.4.6 마이그레이션 스크립트 템플릿 사용하기 
__5.4.7 마이그레이션 스크립트 작동 확인하기: 적용 및 되돌리기

6장 코드 테스트
6.1 테스팅 개요 
__6.1.1 테스팅이란 
__6.1.2 테스팅 종류 
__6.1.3 테스트 더블 
__6.1.4 pytest를 사용하여 테스팅하기 
6.2 단위 테스트 실습 
__6.2.1 단위 테스트 실습 
__6.2.2 문서화 테스트 알아보기 
6.3 통합 테스트 실습 
__6.3.1 사용자 정보를 내려받는 API 구현하기 
__6.3.2 테스트 클라이언트로 API 테스트하기 
__6.3.3 데이터베이스에 사용자 생성하고 테스트하기 
6.4 pytest의 픽스처 기능을 사용한 테스팅 
__6.4.1 테스트 코드에 픽스처 사용하기 
__6.4.2 구현 코드에도 세션 의존성 주입하기 
__6.4.3 테스트 클라이언트도 픽스처로 일원화하기

7장 회원가입 및 사용자 인증 구현
7.1 회원가입 테스트 코드 작성 
__7.1.1 (1) 모든 입력 항목을 유효한 값으로 입력하면 계정이 생성된다 
__7.1.2 (2) 사용자명이 유효하지 않으면 유효하지 않다는 메시지를 담은 오류를 일으킨다 
__7.1.3 (3) 계정 ID(username)가 중복되면 중복 계정 ID 오류를 일으킨다 
__7.1.4 (4) 이메일 주소가 중복되면 중복 메시지를 담은 오류를 일으킨다 
__7.1.5 (5) 표시명을 입력하지 않으면 무작위 문자열 8글자로 대신한다
7.2 회원가입 API 구현 
__7.2.1 (1) Pydantic으로 Formdata 유효성 검증하기
__7.2.2 (2) signup API에 SignupPayload 스키마 적용하기 
__7.2.3 (3) 응답 결과에는 username, display_name, is_host만 출력하기 
7.3 로그인 구현 
__7.3.1 로그인 구현에 필요한 기술 
__7.3.2 로그인 API 구현하기 
7.4 자기 자신의 정보를 가져오는 API 구현 
__7.4.1 FastAPI의 의존성 주입이란 
__7.4.2 자신의 정보를 가져오는 API 시나리오 
__7.4.3 쿠키에서 인증 토큰을 가져와 인증 검사하기 
__7.4.4 실패하는 테스트 코드로 구현 검증하기 
7.5 FastAPI 캘린더, 계정 설정 페이지 구현 
__7.5.1 계정 정보 변경하기 
__7.5.2 로그아웃 구현하기 
__7.5.3 회원 탈퇴 구현하기

8장 사용자별 캘린더 및 예약 관리 구현
8.1 호스트별 캘린더 가져오기 
__8.1.1 사용자 시나리오 
__8.1.2 호스트인 사용자의 username으로 캘린더 정보 가져오기 
__8.1.3 존재하지 않는 사용자의 username으로 캘린더 정보를 가져오려고 하면 404 응답 반환하기 
__8.1.4 호스트가 아닌 사용자의 username으로 캘린더 정보를 가져오려고 하면 404 응답 반환하기 
__8.1.5 host_calendar_detail( )을 API로 테스트하기
8.2 호스트의 캘린더를 생성하고 변경 
__8.2.1  호스트 사용자는 유효한 캘린더 정보를 제출하여 캘린더를 생성할 수 있다 
__8.2.2 캘린더가 있는 상황에서 추가 생성하려고 하면 422 응답 반환하기 
__8.2.3 게스트 사용자가 캘린더를 생성하려고 하면 403 응답 반환하기
__8.2.4 사용자가 변경하는 항목만 변경되고 나머지는 기존 값 유지하기 
8.3 타임슬롯 관리 
__8.3.1 호스트 사용자는 유효한 타임슬롯 정보를 제출하여 타임슬롯을 생성할 수 있다 
__8.3.2 유효하지 않은 타임슬롯 정보로 생성하려고 하면 HTTP 422 응답하기 
__8.3.3 겹치는 시간대가 있다면 HTTP 422 응답하기 
8.4 예약 
__8.4.1 유효한 예약 신청 내용으로 예약 생성을 요청하면 예약 내용을 담아 HTTP 201 응답하기 
__8.4.2 호스트가 아닌 사용자에게 예약을 생성하면 HTTP 404 응답하기 
__8.4.3 없는 시간대에 예약을 생성하면 HTTP 404 응답하기 
8.5 캘린더 예약 가져오기 
__8.5.1 호스트가 자신이 예약받은 내역을 받아 보는 API 구현하기 
__8.5.2 게스트는 호스트의 캘린더 예약 내역을 월 단위로 받는다 
__8.5.3 게스트는 자신의 캘린더 예약 내역을 페이지 단위로 받는다 
__8.5.4 사용자는 특정 예약 내역 데이터를 받는다 
8.6 FastAPI 캘린더, 예약 관리 
__8.6.1 호스트는 자신에게 신청한 부킹에 대해 일자, 타임슬롯을 변경할 수 있다 
__8.6.2 게스트와 호스트는 다른 호스트의 타임슬롯으로 변경할 수 없다 
__8.6.3 게스트는 자신의 부킹에 대해 주제, 설명, 일자, 타임슬롯을 변경할 수 있다 
__8.6.4 여러분을 위한 작은 제안 
8.7 부킹에 참석 상태 정보 다루기 
__8.7.1 부킹 모델에 참석 상태 필드 추가, Enum 자료형 
__8.7.2 데이터베이스 마이그레이션 
__8.7.3 호스트는 자신에게 신청한 부킹의 참석 상태를 변경할 수 있다
8.8 파일 업로드 
__8.8.1 HTTP 파일 업로드하기 
__8.8.2 FastAPI에서 파일 업로드를 처리하는 방식 
__8.8.3 게스트는 자신이 신청한 부킹에 파일을 업로드할 수 있다: 연습하기 
__8.8.4 fastapi-storages 사용하기 
__8.8.5 게스트는 자신이 신청한 부킹에 파일을 업로드할 수 있다: 실제 해 보기 
__8.8.6 업로드 관련 마이그레이션 스크립트 생성하기 
__8.8.7 SQLAlchemy의 Result 객체를 다룰 때 unique( ) 메서드 사용하기

9장 운영자 페이지에서 데이터 관리
9.1 운영자 페이지와 SQLAdmin 
__9.1.1 운영자 페이지 
__9.1.2 SQLAdmin이란 
__9.1.3 SQLAdmin 설치와 설정 
9.2 SQLAdmin 기본 활용법 
__9.2.1 메타데이터 
__9.2.2 목록 페이지
__9.2.3 상세 페이지 
__9.2.4 페이지네이션 옵션 
__9.2.5 일반 옵션 
__9.2.6 양식(form) 옵션 
__9.2.7 내보내기 옵션 
__9.2.8 모델 개별 개체 표시 조정하기 
__9.2.9 모델들에 대응하는 어드민 페이지 정의하기 
9.3 메서드 오버라이딩을 활용하여 기능 확장 및 변경 
__9.3.1  on_model_change(self, data: dict, model: Any, is_created: bool, request: Request) 
__9.3.2 insert_model(self, request: Request, data: dict)
__9.3.3 update_model(self, request: Request, pk: str, data: dict) 
__9.3.4  after_model_change(self, data: dict, model: Any, is_created: bool, request: Request) 
__9.3.5 User 모델에 status 모델 필드 추가하기 
__9.3.6 on_model_delete(self, model: Any, request: Request)
__9.3.7  after_model_delete(self, model: Any, request: Request) 
__9.3.8 delete_model(self, request: Request, pk: Any) 
__9.3.9 scaffold_form( ) 
__9.3.10 list_query(self, request: Request)
__9.3.11 hybrid_property와 expression
__9.3.12 search_query(self, stmt: Select, term: str) 
9.4 SQLAdmin 사용자 인증 체계 
__9.4.1 인증 백엔드 구현하기 
__9.4.2 인증 백엔드 적용하기

10장 약속 잡기 프로젝트에 프런트엔드 연동
10.1 정적 파일 
__10.1.1 웹 서버와 웹 애플리케이션 서버 
__10.1.2 FastAPI에서 정적 파일 처리 
10.2 구현된 결과물을 파이썬 웹 서버로 구동 
10.3 CORS 처리 
10.4 호스트 목록 API 
10.5 인증 토큰이 없는 경우에 대한 명확한 응답
__10.5.1 인증 토큰이 없는 경우 대응하기 
__10.5.2 SQLAdmin에도 명확한 인증 예외 오류 처리하기
10.6 캘린더 흐름 
__10.6.1 호스트 목록 
__10.6.2 캘린더 표시 
__10.6.3 부킹 생성 
__10.6.4 게스트의 부킹 내역 
__10.6.5 부킹 상세 보기 
10.7 웹 프런트엔드 개발 명세 
__10.7.1 사용하는 기술 스택 
__10.7.2 디렉터리 구조 
__10.7.3 개발 환경 구성

11장 SQLAlchemy 지연 로딩 전략
11.1 지연 로딩이란
11.2 지연 로딩의 종류 
__11.2.1 즉시 로딩 
__11.2.2 지연 로딩 
__11.2.3 지연 로딩 안 함(no load)
__11.2.4 차이점 
__11.2.5 유의점 
11.3 SQLAlchemy 지연 로딩 적용 
__11.3.1 (1) User 모델에 지연 로딩 적용하기 
__11.3.2 (2) OAuthAccount 모델에 지연 로딩 적용하기
__11.3.3 (3) Calendar 모델에 지연 로딩 적용하기 
__11.3.4 (4) TimeSlot 모델에 지연 로딩 적용하기  
__11.3.5 (5) Booking 모델에 지연 로딩 적용하기 
__11.3.6 (6) BookingFile 모델에 지연 로딩 적용하기

12장 구글 캘린더 연동
12.1 구글 클라우드 API 
__12.1.1 구글 클라우드 API란 
__12.1.2 구글 클라우드 API의 주요 요소와 개념 
__12.1.3 구글 클라우드 콘솔 준비
__12.1.4 캘린더 공유 및 권한 부여하기 
12.2 구글 캘린더에 이벤트 생성 
__12.2.1 구글 클라우드 API 파이썬 클라이언트 설치하기 
__12.2.2 구글 캘린더 서비스 정의 
__12.2.3 일정(이벤트) 생성하기 
__12.2.4 테스트 구현하기
__12.2.5 스키마 정의하기 
12.3 구글 캘린더의 이벤트 관리 
__12.3.1 테스트 픽스처 정의하기 
__12.3.2 일정 삭제하기 
__12.3.3 특정 일정 가져오기 
__12.3.4 일정 수정하기 
__12.3.5 일정 목록 가져오기 
12.4 약속 잡기 구현체에 구글 캘린더 연동 적용 
__12.4.1 구글 캘린더 서비스 의존성 정의하기
__12.4.2 부킹을 생성할 때 구글 캘린더에 등록하기 
__12.4.3 부킹을 변경할 때 구글 캘린더에 반영하기
__12.4.4 호스트 부킹 목록에서 구글 캘린더 일정 반영하기 
12.5 FastAPI 백그라운드 작업 
__12.5.1 BackgroundTasks 
__12.5.2 StreamResponse

13장 오류 기록과 관찰, 관리
13.1 오류 로그 체계 
13.2 Sentry란 
13.3 계정과 프로젝트 생성 
13.4 약속 잡기 프로젝트에 Sentry 반영 
__13.4.1 초기화 인자 
__13.4.2 통합(integration) 도구 인자
13.5 오류 로그 테스트 
13.6 수동으로 로그 남기기

14장 아마존 웹 서비스에 배포하기
14.1 의존 패키지 관리 
__14.1.1 패키지 관리자 
__14.1.2 의존 패키지 동결 
__14.1.3 uv로 더 빠르게 설치하기 
14.2 AWS Lightsail(라이트세일)로 서버 구성 
__14.2.1 AWS Lightsail이란 
__14.2.2 Lightsail 서비스 
__14.2.3 Lightsail에 서버 구성하기
14.3 인스턴스 서버에 환경 구성 
__14.3.1 SSH와 SSH 인증키 
__14.3.2 apt 패키지 관리자 
__14.3.3 빌드 도구 설치하기 
__14.3.4 Nginx 
__14.3.5 파이썬 가상 환경 구성하기 
__14.3.6 Hello World용 FastAPI 앱 작성하기 
__14.3.7 웹 애플리케이션 구동 스크립트 작성하기 
__14.3.8 Systemd로 서비스 관리하기 
__14.3.9 Nginx에 프록시로 연결하기 
__14.3.10 Nginx로 정적 파일 서빙하기
14.4 깃허브 액션을 사용하여 배포 자동화 
__14.4.1 깃허브 액션이란
__14.4.2 기본 개념 이해하기
__14.4.3 깃허브 워크플로 작성하기

 

 

 

 

 

이 책은 FastAPI가 무엇인지에 대한 개념서라기보다 FastAPI가 무엇인지 어떻게 사용하는지에 대한 가이드 북에 가까웠다.

파이썬을 입문하고 웹에 적용하고 싶은 분들께 추천한다.

 

1장에서는 FastAPI가 무엇인지 설명하고 있다.

1장 FastAPI란

프로젝트를 진행하기 위해 기획부터 시작하고 있다.

프로젝트를 왜 출시해서 운영해야 하는지, 프로젝트를 어떤 도구를 사용해서 만들고, 왜 이 도구를 사용해야 하는지 설명하고 있다.

1장 프로젝트 기획

 

개발하다 보면 의외로 셸을 다루어야 하는 순간이 자주 찾아온다.

그런 셸이 무엇인지부터 차근차근 설명해 주고 있다.

처음에는 '이런 기본적인 내용까지 굳이 설명해야 할까?'라는 생각이 들었다.

하지만 책의 독자가 어떤 지식을 가지고 있는지를 생각하면 충분히 이해가 갔다.

실제로 셸에 익숙하지 않아 간단한 문제조차 해결하지 못하고 헤매던 경험이 있었기 때문이다.

그런 점에서 이 책이 셸이라는 기초 개념을 놓치지 않고 짚어주는 부분은 입문자나 실무 초반의 개발자에게 도움이 될 수 있다고 느꼈다.

2장 셸이란

 

3장에서는 개발 실습 환경에 대한 내용을 다루고 있다.

3장 개발 실습 환경

 

클론 코딩 콘텐츠를 보면 대부분 결과물을 만드는 과정에만 집중한다.

왜 이런 기능이 필요한지, 어떤 흐름으로 프로젝트가 구성되었는지에 대한 설명은 부족한 경우가 많았다.

하지만 이 책은 다르다.

단순히 코드를 따라 치고 프로젝트를 완성하는 것이 아닌 기능 하나하나에 대한 셜명화 함께 서비스 기획과 프로젝트 설계 과정을 먼저 보여주고 있다.

이 과정에서 독자가 프로젝트를 단순한 예제가 아닌 하나의 서비스로 이해할 수 있도록 돕고 있는 게 마음에 들었다.

4장 기능 설명

 

파이썬에서 데이터베이스를 사용하는 방법에 관해 설명하고 있다.

FastAPI에서 관계형 데이터베이스를 다루는 도구와 구조 설계에 관해 설명하고 있다.

5장 데이터베이스

 

테스팅에 대해 설명하고 있다.

6장 테스팅

 

7장에서는 본격적으로 구현을 시작한다.

나는 프로젝트를 진행하면서 주로 DB를 먼저 설계하고 그 구조에 맞춰 화면을 만들고 기능을 구현했다.

하지만 이 책에서는 테스트 코드를 작성하며 서비스를 개발하고 있다.

사용자 스토리와 시나리오 형식으로 유스케이스를 정의하고 이들을 테스트 코드 주도로 구현하고 있다.

JWT에 대한 부분도 다루고 있다.

개인적인 생각으로는 회원가입과 사용자 인증구현이 초기에 잘 잡혀 있어야 프로젝트를 진행할 때 수월하게 진행할 수 있다고 생각한다.

설명이 꼼꼼하게 되어있어서 마음에 들었다.

7장 회원가입 및 사용자 인증구현

 

8장에서는 7장에 비해 깊은 내용을 담고 있다.

FastAPI, SQLAlchemy, Pydantic, 파일 업로드에 대해 설명하고 있다.

8장 SQLAlchemy, 파일 업로드

 

약속 잡기 프로젝트라고 해서 기능구현에서 끝나지 않고 운영 관점에서의 서비스 관리까지 다루고 있다.

단순히 화면을 만드는 방법을 설명하는 것이 아니라, 운영자 페이지가 왜 필요하고 어떤 역할을 하는지부터 짚어주는 점이 인상적이었다.

지금까지 프로젝트를 진행하면서 운영자 페이지를 만들어야겠다는 생각은 하지 못했다.

하지만 이 장을 보면서 운영자 페이지의 중요성을 알게 되었다.

메서드 오버라이딩을 활용해 기능을 확장하고 변경하는 방법을 소개하고 있다.

SQLAdmin 사용자 인증 체계를 통해 운영자 권한 관리와 보안의 중요성까지 함께 다루고 있어, 실 서비스에 가까운 구조를 경험할 수 있었다.

9장 운영자 페이지

 

10장에서는 리액트로 구현된 프런트엔드를 웹 애플리케이션 서버와 연동하는 과정을 다룬다.

단순히 연결 방법만 설명하는 것이 아니라, 이 과정에서 반드시 고려해야 할 보안 이슈와 웹 애플리케이션 서버의 API 응답 구조에 대한 고민까지 함께 짚어준다.

또한 웹 서버와 웹 애플리케이션 서버의 차이, 정적 파일 서빙이 무엇인지 등 당연하게 알고 있다고 생각했지만, 막상 설명하려면 헷갈릴 수 있는 기본 개념들을 다시 한번 정리해 준다.

결과물을 파이선 웹 서버로 직접 실행해 보고, CORS 이슈까지 짚어주는 구성 덕분에 단순히 화면을 만드는 데서 그치지 않고 '웹 애플리케이션을 실제로 동작시키는 과정'을 이해할 수 있다.

10장 프런트엔드 연동

 

SQLAlchemy의 주요 기능 중 하나인 지연 로딩 개념을 다루고 있다.

온라인 서비스의 성능과 응답 속도는 데이터베이스 접근 방식에 큰 영향을 받는데 지연 로딩을 이해하려면 이러한 문제를 더욱 명확하게 바라볼 수 있다.

11장에서는 지연 로딩이 무엇인지부터 시작해 지연 로딩의 종류와 SQLAlchemy에서 이를 어떻게 적용하는지까지 차근차근 설명한다.

11장 지연 로딩

 

개발이 끝난 후 실제 서비스 운영 단계에서 필요해지는 오류 모니터링에 대해 다루는 장이다.

외부 서버에 배포된 환경에서는 로컬 개발 환경과 달리 오류를 즉시 확인하기 어렵다.

그래서 오류 로그를 효율적으로 관리하는 체계가 필요하다.

운영 환경에서의 문제를 해결하기 위해 오류 수집과 모니터링에 유용한 도구인 Sentry를 연동하는 방법을 다룬다.

단순히 도구 사용법을 나열하는 것이 아니라, 왜 오류 로그를 체계적으로 관리해야 하는지에 대한 이유부터 설명한다는 점이 인상적이었다.

13장 오류 로그

 

마지막 14장에서는 클라우드 서비스인 AWS를 활용해 개발한 프로젝트를 실제로 배포하는 과정을 다룬다.

도메인 설정, 서버 인프라 구성, 배포 자동화까지 실제 서비스를 운영하기 위해 필요한 과정을 한 단계씩 직접 따라 해 볼 수 있도록 안내한다.

또한 GitHub에서 제공하는 기능을 활용해 배포 과정을 자동화하고, 의존 패키지 관리에 대해서도 함께 설명한다.

특히 AWS Lightsail이 무엇인지부터, Lightsail을 이용해 서버를 구성하는 방법까지 차근차근 다루고 있어 클라우드 환경에 익숙하지 않은 독자도 부담 없이 따라갈 수 있도록 구성되어 있다.

개발, 운영, 모니터링을 거쳐 실제 서비스 배포로 마무리된다는 점에서 이 책의 전체 흐름을 완성하는 장이라고 느꼈다.

14장 AWS 배포

 

 


[책 후기]

새로운 기술을 배울 때는 단순히 문서를 읽기보다는, 프로젝트를 진행하며 익히는 방식이 가장 효과적이라고 생각한다.

실제로 프로젝트를 통해 기술을 적용해 보면 이해도가 훨씬 높아지고, 초기에 기초를 제대로 다져두면 이후 다른 프로젝트에서도 수월하게 활용할 수 있기 때문이다.

그런 점에서 이 책은 나의 학습 방식과 잘 맞는 책이었다.

FastAPI라는 것을 설명하는 데 그치지 않고 하나의 웹 서비스를 기획하고 설계한 뒤 구현, 테스트, 운영, 베포까지 실제 서비스 개발의 사이클을 따라가도록 구성이 되어 있다.

특히 인상 깊었던 점은 단순히 코드를 따라 치는 클론 코딩이 아니라 왜 이런 기능이 필요한지, 어떤 구조로 프로젝트를 설계해야 하는지를 먼저 고민하게 만든다는 점이다.

4장에서 서비스 기획과 프로젝트 설계를 통해 전체 청사진을 그린 뒤 7장에서는 사용자 스토리와 유스케이스를 기반으로 테스트 코드를 작성하며 기능을 구현해 나가는 흐름이 자연스럽게 이어진다.

또한 이 책은 구현 단계에서 끝나지 않는다.

운영자 페이지의 필요성관 권한 관리, 프런트엔드와 백엔드 연동 과정에서의 보안과 CORS 이슈, 오류 모니터링을 위한 Sentry 연동, 그리고 AWS Lightsail을 활용한 실제 배포까지 다루며 현업에서 마주하게 되는 현실적인 고민을 함께 짚어준다.

<장점>

  • 전체적으로 실무에 가까운 가이드 북이다.
  • 설명이 자세해서 좋다.

 

<단점>

  • 그림 설명이 적다고 생각된다.

 


[추천 대상]

  • FastAPI를 실무적으로 학습하고 싶으신 분
  • 웹 서비스 개발과 출시의 전 과정을 경험해 보고 싶으신 분
  • 파이썬을 사용하여 서버 개발 및 배포를 해보고 싶으신 분
  • 테스트 주도 개발에 대해 학습해 보고 싶으신 분

[마무리]

전체적으로 설명이 자세하고 실무에 가깝게 설명이 되어있다.

일반적인 클론 코딩 같은 경우 기능을 구현하면서도 왜 이 기능이 필요한지에 대한 설명이 부족해 프로젝트에 대한 이해도가 낮았다.

하지만 이 책은 기획 단계에서부터 그 배경과 목적을 함께 설명해주어 각 기능을 이해한 상태로 개발을 진행할 수 있었다.

그 덕분에 단순히 결과물을 만드는 경험을 넘어, 실제 서비스 개발에 필요한 사고방식을 함께 익힐 수 있었다.

조금 아쉬운 점이라면 SQLite를 사용한다는 것이다.

실무에서는 MySQL이나 PostgreSQL과 같은 RDB를 사용하는 경우가 많아 조금 마음에 들지 않았다.

하지만 이 책에서 전달하고자 하는 설계 방식과 개발 흐름은 다른 데이터베이스 환경에서도 충분히 적용할 수 있다고 생각이 된다.

웹 애플리케이션 서버를 처음부터 끝까지 만들어보고 싶은 개발자라면 이 책은 좋은 길잡이가 되어줄 것이다.

 

 


 


잘못된 정보는 댓글에 남겨주시면 감사하겠습니다!☺️

댓글과 좋아요는 큰 힘이 됩니다!

728x90
반응형
Comments