파이썬 웹 프레임워크 FastAPI

송범·2025년 3월 14일

파이썬 기반 웹 프레임워크 중 가장 많이 사용하는 장고(Django), 플라스크(Flask), FastAPI 가 있으며 특징을 한 번 비교해보면

📝 파이썬 웹 프레임워크 비교: 장고, 플라스크, FastAPI

프레임워크특징
장고 (Django)- 기능이 풍부한 풀 프레임워크로, 웹 개발에 필요한 다양한 기능이 포함됨.
- 관계형 데이터베이스와 쉽게 연동 가능하지만, 초기 학습이 어렵고 동작이 무거운 편.
- MVC(Model-View-Controller) 또는 MVT(Model-View-Template) 패턴을 기본으로 사용.
- 공식 문서가 상세하고 참고 자료가 많지만, 학습 시간이 비교적 필요함.
플라스크 (Flask)- 가볍고 최소한의 기능만 포함하여 빠르게 웹 애플리케이션을 만들 수 있음.
- 요청, 템플릿, 데이터베이스 연동 등의 기본 기능만 제공.
- 필요한 기능을 확장할 수 있으며, 플러그인을 직접 추가하여 개발자가 커스텀 가능.
- 빠른 프로토타이핑 및 소규모 프로젝트에 적합.
FastAPI- 비동기(Async) 기능을 지원하며 속도가 빠름.
- 자동 문서화(OpenAPI, Swagger)를 제공하여 API 개발에 적합.
- 데이터 검증이 편리하며, 타입 힌트를 적극 활용할 수 있음.
- 비교적 새로운 프레임워크라 커뮤니티와 참고 자료가 상대적으로 부족함.
  • 장고: 대형 프로젝트, 강력한 기능이 필요한 경우

  • 플라스크: 경량, 빠른 개발, 소규모 프로젝트

  • FastAPI: 고성능, API 개발에 적합 🚀

FastAPI는 3.7 이상의 파이썬 버전이 필요합니다.

의존성 해결을 하기위해 가상 환경을 분리해야 합니다. 파이썬 생태계에는 파이썬에 내장돼 있는 venv나 따로 설치해서 사용할 수 있는 virtualenv,pyenv,pyenv-virtualenv,pipenv 등 여러 라이브러리가 있지만, 따로 라이브러리는 설치하지 않고 파이썬에서 기본으로 제공되는 venv를 사용합니다.

Python 가상환경을 분리하는 이유

  • 가상환경 (venv)을 사용하는 가장 큰 이유는 프로젝트별로 독립적인 Python 환경을 유지하기 위함입니다.

FastAPI에서 venv 가상환경을 사용하는 장점과 단점

FastAPI는 Python의 가상환경(venv)을 활용하여 독립적인 환경을 유지하며 개발할 수 있습니다.
아래는 FastAPI에서 venv 가상환경을 사용할 때의 장점과 단점을 정리한 표입니다.

✅ 장점 (Advantages)

  1. 패키지 충돌 방지 : 프로젝트별로 독립적인 라이브러리 관리가 가능하여 패키지 버전 충돌을 방지할
    수 있음

  2. 시스템 환경 보호 : 글로벌 Python 환경을 변경하지 않으므로, 시스템에 불필요한 패키지가 설치
    되지 않음
    -> 가상환경을 사용하면 시스템 환경을 깨끗하게 유지 가능합니다!

  3. 배포 환경 유지 : requirements.txt를 통해 배포 환경에서도 동일한 설정을 재현할 수 있음

pip freeze > requirements.txt  # 현재 가상환경 패키지 목록 저장
pip install -r requirements.txt  # 다른 환경에서 동일한 패키지 설치

-> 배포할 때도 동일한 패키지를 설치 가능합니다.!

  1. Python 버전 관리 : 프로젝트마다 다른 Python 버전을 사용할 수 있음 (Python 3.9, Python 3.10 등)

  2. 협업 및 유지보수 용이 : 팀원 간 동일한 환경을 쉽게 설정할 수 있어 "내 로컬에서는 잘 되는데?" 문제 방지


❌ 단점 (Disadvantages)

단점설명
설치 및 관리 필요프로젝트마다 가상환경을 생성하고 활성화해야 하는 과정이 번거로울 수 있음
디스크 공간 차지각 프로젝트마다 가상환경을 생성하므로, 동일한 패키지가 여러 번 설치될 수 있음
가상환경 활성화 필요프로젝트를 실행할 때마다 source venv/bin/activate (Mac/Linux) 또는 venv\Scripts\activate (Windows) 명령을 실행해야 함
별도 설정 필요IDE(PyCharm, VS Code)에서 가상환경을 자동으로 인식하지 못할 수도 있어 별도 설정이 필요함

FastAPI에서 venv를 사용하면 패키지 관리, 보안, 협업, 배포 환경 유지 등의 큰 장점이 있지만,
가상환경을 생성, 활성화하는 번거로움디스크 공간 사용 증가 등의 단점도 존재합니다.

하지만, 프로젝트 유지보수 및 확장성을 고려하면 venv 사용이 필수적입니다.
따라서 FastAPI 개발 시 반드시 가상환경을 설정하는 것이 권장하고 있습니다.

FastAPI 구동 방식: ASGI 서버 & Uvicorn

FastAPI는 비동기(Asynchronous) 웹 프레임워크로, ASGI(Asynchronous Server Gateway Interface)를 기반으로 작동합니다.
FastAPI를 실행할 때 사용하는 대표적인 ASGI 서버가 Uvicorn입니다.

  1. ASGI 서버란? ASGI (Asynchronous Server Gateway Interface)

ASGI는 기존의 WSGI(Web Server Gateway Interface)를 확장하여 비동기 프로그래밍을 지원하는 웹 서버 인터페이스입니다.

구분설명
WSGI동기(Synchronous) 방식, 요청이 완료될 때까지 블로킹
ASGI비동기(Asynchronous) 방식, 여러 요청을 동시에 처리 가능

FastAPI는 ASGI 기반이므로, 비동기 요청을 처리하는 데 최적화되어 있습니다.

  1. Uvicorn이란?
    Uvicorn: FastAPI를 실행하는 고성능 ASGI 서버

Uvicorn은 Python에서 가장 빠른 ASGI 서버 중 하나이며, FastAPI 애플리케이션을 실행하는 데 필수적인 역할을 합니다.

주요 특징

  • 비동기(Async) 지원 → FastAPI의 비동기 기능과 완벽하게 호환됨
  • 고성능 → Starlette 기반으로 최적화되어 높은 처리량 제공
  • 자동 리로드--reload 옵션 사용 시, 코드 변경 시 자동 재시작
  • WebSocket 및 HTTP/2 지원 → 실시간 통신을 위한 WebSocket을 기본 지원
  • 멀티코어 사용 가능workers 옵션을 통해 멀티 프로세스 실행 가능
  1. FastAPI + Uvicorn 실행 방법
    FastAPI 애플리케이션을 실행할 때, Uvicorn을 실행하여 서버를 구동합니다.

1) 기본 실행

uvicorn main:app --host 0.0.0.0 --port 8000
  • main:app → main.py 파일 내 app 객체를 실행

  • --host 0.0.0.0 → 외부에서도 접근 가능하도록 설정 (로컬 실행 시 생략 가능)

  • --port 8000 → 8000번 포트에서 서버 실행

2) 개발 모드 (코드 변경 시 자동 반영)

uvicorn main:app --reload
  • --reload → 코드 변경 시 서버가 자동으로 재시작됩니다

3) 운영 환경 (멀티 프로세스 실행)

uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4
  • --workers 4 → 4개의 프로세스를 사용하여 성능 최적화
profile
BackEnd&Data Scientist가 되고 싶은 개발 기록 노트

0개의 댓글