🚀 FastAPI 튜토리얼: 개념부터 코드까지 한눈에 정리
1. 🚀 패스트API의 특징과 장점
FastAPI는 다음과 같은 철학적 기반을 가지고 설계되었습니다:
- 비동기 프로그래밍 내장: Python의 async/await 문법을 활용해 높은 처리량과 짧은 응답 시간을 제공합니다. 이를 통해 고성능 API 서버 구축이 가능합니다.
- 타입 힌트 적극 활용: Python의 최신 문법인 Type Hints를 적극 활용하여, API 문서 자동 생성, 타입 검증 및 추론이 자동화됩니다.
- 개발자 친화적 문서화: API를 작성하기만 해도 자동으로 Swagger 기반의 /docs 문서가 생성되어, 프론트엔드 개발자와의 협업이 매우 쉬워집니다.
- 가벼운 구조: Flask처럼 가볍고 빠른 경량 프레임워크로, 불필요한 설정이나 복잡한 구조 없이도 빠르게 개발이 가능합니다.
2. 📚 다양한 웹 프레임워크 학습의 필요성
- 프로젝트별 요구사항이 달라 다양한 웹 프레임워크의 장단점을 알고 있어야 합니다.
- 실제 기업에서는 대부분 Django 또는 FastAPI 중 하나에 집중하며, 현실적으로는 하나를 깊게 파는 것이 중요합니다.
- 다양한 프레임워크를 경험하면 아이디어 융합 및 비교 분석이 가능해져, 더 나은 설계와 유지보수가 쉬워집니다.
- 최근에는 FastAPI가 GitHub 스타 수 기준으로 Django를 앞지르며 인기를 끌고 있습니다.
- 문법이 간단하여 학습이 쉬운 편이지만, 비동기 흐름 등 내부 동작까지 이해하면 더욱 강력하게 활용할 수 있습니다.
3. ⚙️ Django와 FastAPI의 차이점
항목 Django FastAPI
철학 | 배터리 포함 (batteries-included) | 표준만 제공하는 경량 구조 |
구조 | 많은 내장 기능 제공 (Admin, ORM 등) | 필요한 기능만 최소 제공 |
성능 | 처리 속도 상대적으로 느림 | 비동기 기반으로 빠름 (짧은 레이턴시) |
유연성 | 구조 고정적 (MTV) | 구조 자유도 높음 (함수 기반) |
문서화 | 직접 작성 or drf-yasg 사용 | 자동 Swagger 문서 생성 (/docs) |
예시: 인스타그램도 Django 기반이며, Django는 여전히 대규모 트래픽을 충분히 소화할 수 있습니다.
4. 🚀 FastAPI vs Django 실전 비교 및 설정
4.1 성능과 사용자 처리량
- 장고는 MAU 700만 수준의 프로젝트에서도 무리 없이 사용됨
- FastAPI는 더 짧은 응답 시간과 높은 처리량을 제공함
4.2 비동기 지원 및 기능 범위
- Django: 비동기 일부 지원 (제한적, 명확하지 않음)
- FastAPI: 처음부터 비동기를 전제로 만들어져 자연스럽게 지원
- FastAPI는 대규모 Robust App도 가능하며, Flask보다 확장성이 좋음
4.3 인지도 및 학습 난이도
- FastAPI는 최근 만들어졌지만, 높은 인지도로 성장 중
- 학습 난이도는 Flask < FastAPI < Django 순으로 평가됨
4.4 프로젝트 구조 차이
- Django: 프로젝트/앱 구조 + 명령어 자동 생성
- FastAPI: CLI 없이 직접 파일 구조 설계해야 함 (더 유연함)
5. 💻 FastAPI 프로젝트 시작하기
가상환경 생성 및 설정
python3.13 -m venv .fastapi
source .fastapi/bin/activate
pip install "fastapi[standard]"
- standard 옵션은 uvicorn, httpx, jinja2, pydantic 등 필수 패키지를 함께 설치함
디렉토리 구성
- source 폴더를 만들고, 그 안에 main.py 파일 생성
- PyCharm 또는 VSCode에서 소스 루트 설정
6. ✍️ main.py 코드 구현 및 실행 흐름
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# 1. Path Parameter
@app.get("/items/{item_id}")
def get_item_handler(item_id: int):
return {"message": item_id}
# 2. Query Parameter
@app.get("/items")
def get_items_handler(max_price: int = 0, category: str = ""):
if category:
return {"message": {"category": category, "max_price": max_price}}
return {"message": {"max_price": max_price}}
# 3. Request Body + Pydantic
class ItemCreateRequest(BaseModel):
name: str
price: float
@app.post("/items")
def create_item_handler(body: ItemCreateRequest):
return {"name": body.name, "price": body.price}
7. 🌐 실행 및 테스트 방법
FastAPI 실행
uvicorn main:app --reload
Swagger UI 접근
- http://localhost:8000/docs → Swagger 자동 문서
- http://localhost:8000/redoc → ReDoc 스타일 문서
- 별도 Postman 없이도 실행 및 테스트 가능
✅ 마무리 요약
- FastAPI는 비동기 처리, 타입 힌트 기반 자동 검증, 문서 자동화, 경량 설계가 강점
- Django는 내장 기능 풍부, 일관된 구조, 성숙한 생태계가 강점
- 웹 개발자는 하나의 프레임워크를 깊이 있게 다루되, 여러 프레임워크를 비교할 줄 아는 시야도 필요
이 튜토리얼을 통해 FastAPI의 구조와 장점을 익히고, 빠르게 백엔드 개발에 적용할 수 있습니다 🚀