🏗️

FastAPI 아키텍처 — Starlette + Pydantic + Uvicorn의 조합

FastAPI가 "빠르다"고 말하는 이유의 실체

FastAPI가 빠른 이유를 물으면 대부분 "async 지원"이라고 한다. 맞지만, 그건 절반이다.

3계층 구조

Uvicorn — ASGI 서버. uvloop(libuv 기반) + httptools(C 파서)로 HTTP를 파싱한다. Python 순수 구현 대비 2~3배 빠르다. 이게 "빠르다"의 상당 부분.

Starlette — ASGI 프레임워크. 라우팅, 미들웨어, WebSocket, 정적 파일. FastAPI는 Starlette를 상속받은 클래스다. FastAPI()Starlette()의 서브클래스.

Pydantic — 데이터 검증. v2부터 코어가 Rust(pydantic-core)로 작성. JSON 파싱 + 검증이 C/Rust 속도로 돌아간다.

FastAPI 자체의 코드는 이 세 계층을 타입 힌트로 연결하는 접착제다. @app.get decorator가 Starlette 라우트를 등록하면서, 함수 시그니처의 타입 힌트를 읽어서 Pydantic 모델로 요청 검증을 자동 생성.

개발 속도도 "빠르다"의 일부

타입 힌트만 쓰면 자동으로: 요청 파싱, 검증, OpenAPI 문서, JSON 직렬화가 된다. 이걸 직접 구현하면 코드량이 3~5배 늘어난다. "코드를 빠르게 짠다"도 Fast의 의미.

핵심 포인트

1

Uvicorn(ASGI 서버)이 HTTP를 C 레벨로 파싱

2

Starlette가 라우팅/미들웨어 처리

3

FastAPI가 타입 힌트를 읽어 Pydantic 검증을 자동 생성

4

응답도 Pydantic model → JSON 자동 직렬화

사용 사례

REST API — 타입 힌트만으로 자동 문서화 + 검증 ML 모델 서빙 — async로 추론 요청을 동시 처리