본문 바로가기
프레임워크/FastAPI

FastAPI로 배우는 백엔드 프로그래밍 - FastAPI 소개

by 데브조이 2025. 7. 22.
반응형
이 글은 '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/). 

 

반응형