파이썬 기반 웹 프레임워크 중 가장 많이 사용하는 장고(Django), 플라스크(Flask), 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 가상환경을 분리하는 이유
FastAPI는 Python의 가상환경(venv)을 활용하여 독립적인 환경을 유지하며 개발할 수 있습니다.
아래는 FastAPI에서 venv 가상환경을 사용할 때의 장점과 단점을 정리한 표입니다.
✅ 장점 (Advantages)
패키지 충돌 방지 : 프로젝트별로 독립적인 라이브러리 관리가 가능하여 패키지 버전 충돌을 방지할
수 있음
시스템 환경 보호 : 글로벌 Python 환경을 변경하지 않으므로, 시스템에 불필요한 패키지가 설치
되지 않음
-> 가상환경을 사용하면 시스템 환경을 깨끗하게 유지 가능합니다!
배포 환경 유지 : requirements.txt를 통해 배포 환경에서도 동일한 설정을 재현할 수 있음
pip freeze > requirements.txt # 현재 가상환경 패키지 목록 저장
pip install -r requirements.txt # 다른 환경에서 동일한 패키지 설치
-> 배포할 때도 동일한 패키지를 설치 가능합니다.!
Python 버전 관리 : 프로젝트마다 다른 Python 버전을 사용할 수 있음 (Python 3.9, Python 3.10 등)
협업 및 유지보수 용이 : 팀원 간 동일한 환경을 쉽게 설정할 수 있어 "내 로컬에서는 잘 되는데?" 문제 방지
❌ 단점 (Disadvantages)
| 단점 | 설명 |
|---|---|
| 설치 및 관리 필요 | 프로젝트마다 가상환경을 생성하고 활성화해야 하는 과정이 번거로울 수 있음 |
| 디스크 공간 차지 | 각 프로젝트마다 가상환경을 생성하므로, 동일한 패키지가 여러 번 설치될 수 있음 |
| 가상환경 활성화 필요 | 프로젝트를 실행할 때마다 source venv/bin/activate (Mac/Linux) 또는 venv\Scripts\activate (Windows) 명령을 실행해야 함 |
| 별도 설정 필요 | IDE(PyCharm, VS Code)에서 가상환경을 자동으로 인식하지 못할 수도 있어 별도 설정이 필요함 |
FastAPI에서 venv를 사용하면 패키지 관리, 보안, 협업, 배포 환경 유지 등의 큰 장점이 있지만,
가상환경을 생성, 활성화하는 번거로움과 디스크 공간 사용 증가 등의 단점도 존재합니다.
하지만, 프로젝트 유지보수 및 확장성을 고려하면 venv 사용이 필수적입니다.
따라서 FastAPI 개발 시 반드시 가상환경을 설정하는 것이 권장하고 있습니다.
FastAPI는 비동기(Asynchronous) 웹 프레임워크로, ASGI(Asynchronous Server Gateway Interface)를 기반으로 작동합니다.
FastAPI를 실행할 때 사용하는 대표적인 ASGI 서버가 Uvicorn입니다.
ASGI는 기존의 WSGI(Web Server Gateway Interface)를 확장하여 비동기 프로그래밍을 지원하는 웹 서버 인터페이스입니다.
| 구분 | 설명 |
|---|---|
| WSGI | 동기(Synchronous) 방식, 요청이 완료될 때까지 블로킹 |
| ASGI | 비동기(Asynchronous) 방식, 여러 요청을 동시에 처리 가능 |
FastAPI는 ASGI 기반이므로, 비동기 요청을 처리하는 데 최적화되어 있습니다.
Uvicorn은 Python에서 가장 빠른 ASGI 서버 중 하나이며, FastAPI 애플리케이션을 실행하는 데 필수적인 역할을 합니다.
주요 특징
--reload 옵션 사용 시, 코드 변경 시 자동 재시작workers 옵션을 통해 멀티 프로세스 실행 가능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
3) 운영 환경 (멀티 프로세스 실행)
uvicorn main:app --host 0.0.0.0 --port 8000 --workers 4