이 글은 'FastAPI로 배우는 백엔드 프로그래밍 with 클린 아키텍처' 책을 읽고 공부하며 작성한 글입니다.
책 정보: https://product.kyobobook.co.kr/detail/S000214428277
개요
취업 준비생 시절, 나는 Java 와 Spring 으로 백엔드 개발을 해왔다. 하지만 입사한 회사는 Python과 FastAPI 를 사용하고 있었기에, FastAPI를 이용해 백엔드 개발을 하게 되었다. FastAPI 를 약 1년간 사용하면서, 이제는 단순히 FastAPI를 사용하는 것을 넘어 아키텍처에 대한 고민이 필요하다는 생각이 들어 회사에 이 책을 신청해 읽게 되었다.
FastAPI 소개
FastAPI는 파이썬 기반 오픈소스 웹 프레임워크이며, 파이썬 버전 3.7 이상을 필요로 한다.
공식 문서에서 설명하는 주요 특징은 아래와 같다.
1. 실행 속도가 빠르다: 스탈렛, ASGI, 파이단틱 적용으로 빠른 속도. 파이썬 프레임 워크 중 가장 빠름.
2. 코드 생산성이 높다.
3. 버그가 줄어든다: 타입 힌트와 파이단틱을 활용한 아키텍처 제안
4. 직관적이다.
5. 쉽다: 사용하고 배우기 쉽게 설계
6. 간결하다: 코드 중복을 최소화
7. 강건하다.
8. 표준을 준수한다: API 표준인 OpenAPI JSON 스키마를 기반함
가상환경과 의존성 관리
여러 프로젝트를 개발하고 운영하다보면, 의존성 문제가 발생할 수 있다. 이 문제를 해결하기 위해 가상환경을 사용할 수 있다.
포어트리(Poetry)를 알아보자.
포어트리는 패키징 생태계를 예측 가능하고 편하게 다룰 수 있는 환경을 제공하는 오픈소스 프로젝트이다.
포어트리의 특징은 아래와 같다.
- 신규 파이썬 프로젝트와 가상환경을 함께 생성 가능
- 기존 프로젝트에 가상 환경 초기화 가능
- 프로젝트 의존성 관리
- 라이브러리 패키징
가상환경 설정을 마치면 pyproject.toml 파일이 생성되며, 아래 명령어를 실행하면 .toml 파일에 선언된 패키지를 설치할 수 있다.
poetry install
ASGI 서버
FastAPI를 구동시키려면 ASGI(Asynchronous server gateway interfase) 서버가 필요하다.
공식 문서에서는 유비콘(Uvicorn) 또는 하이퍼콘(Hypercorn)을 추천한다.
1. 유비콘(Uvicorn) → 작은 규모 프로젝트 or FastAPI만 사용하는 경우
- 사이썬 기반 ASGI 서버
- 비동기 코드 지원
- 빠르고 대규모 응용 프로그램에 적합
- 주로 FastAPI와 함께 사용되도록 설계
2. 하이퍼콘(Hypercorn) → 상대적으로 복잡한 환경
- 비동기 코드 지원
- 유비콘보다 느림
- 높은 처리량, 낮은 지연시간 필요 시 적합
- 여러 프레임워크와 호환되는 플러그인 시스템을 지원
유비콘(Uvicorn)
uvicorn: 순수 파이썬 의존성만 가지는 버전
uvicorn[standard]: 사이썬 기반(Cython-based) 의존성과 기타 선택적 기능 함께 설치
1. Cython-based 특징
- 가능하다면 uvloop(이벤트 루프) 설치해 사용
- 가능하다면 httptools 을 이용해 HTTP 프로토콜 처리
2. 선택적 기능
- 가능하면 웹소켓 프로토콜을 websockets 를 통해 처리
- --reload 옵션은 watchfiles 사용
- --env-file 옵션 사용을 위해 python-dotenv 설치
- --log-config에 .yaml 파일을 제공할 수 있게 PyYAML 설치
--reload 옵션 추가 시 파일 내용이 변경될 때 애플리케이션이 재시작되니, 개발 단계에서만 사용 권장.
API 문서화
응답은 API 사용자가 필요로 하는 것만 전달해야 한다.
FastAPI는 자동으로 API 문서를 생성해준다.
이 문서는 OpenAPI 명세(OAS)를 준수한다.
OpenAPI 명세의 역할은 아래와 같다.
- HTTP API 에 대한 표준을 정의하고, 프로그래밍 언어에 중립적인 인터페이스 설명
- OpenAPI를 제대로 정의하면, API 사용자는 최소한의 구현으로 서비스를 이해하고 상호작용할 수 있다.
- 서비스 호출에 대한 추측을 없애준다.
OpenAPI 명세는 JSON으로 기술된다.
자세한 내용은 공식 페이지에서 확인해볼 수 있다(https://spec.openapis.org/).
'프레임워크 > FastAPI' 카테고리의 다른 글
FastAPI - Auditing Base Model 로 중복 코드 제거하기 (2) | 2025.08.16 |
---|---|
FastAPI로 배우는 백엔드 프로그래밍 - 클린 아키텍처 (4) | 2025.08.07 |