소개
FastAPI는 파이썬 3.6+ 버전에서 사용할 수 있는 현대적인 웹 프레임워크입니다. Django나 Flask와 비교했을 때 놀라운 성능과 직관적인 문법, 자동 API 문서화 등의 장점을 가지고 있습니다. 이번 글에서는 FastAPI의 기본 설정부터 첫 API를 만드는 과정까지 상세히 알아보겠습니다.
FastAPI의 주요 특징
# FastAPI의 핵심 장점
1. 빠른 성능 (NodeJS, Go와 대등한 수준)
2. 자동 API 문서 생성 (Swagger UI, ReDoc)
3. 파이썬 타입 힌트 기반의 데이터 검증
4. 비동기 프로그래밍 지원
5. 쉽고 직관적인 문법
개발 환경 설정
가상환경 생성과 패키지 설치
# 가상환경 생성
python -m venv fastapi-env
# 가상환경 활성화
# Windows
fastapi-env\Scripts\activate
# Mac/Linux
source fastapi-env/bin/activate
# 필요한 패키지 설치
pip install fastapi uvicorn
# requirements.txt 생성
pip freeze > requirements.txt
프로젝트 구조
fastapi-project/
│
├── app/
│ ├── __init__.py
│ ├── main.py # FastAPI 애플리케이션
│ ├── models.py # 데이터 모델
│ └── routers/ # 라우터 모듈
│ └── __init__.py
│
├── tests/ # 테스트 코드
│ └── __init__.py
│
├── requirements.txt # 프로젝트 의존성
└── README.md # 프로젝트 문서
첫 FastAPI 애플리케이션 만들기
기본 애플리케이션 생성
# app/main.py
from fastapi import FastAPI
from typing import Optional
# FastAPI 인스턴스 생성
app = FastAPI(
title="My First FastAPI App",
description="This is a first FastAPI tutorial",
version="1.0.0"
)
# 기본 라우트
@app.get("/")
async def root():
return {"message": "Hello FastAPI!"}
# 경로 매개변수 사용
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: Optional[str] = None):
if q:
return {"item_id": item_id, "q": q}
return {"item_id": item_id}
애플리케이션 실행
# 개발 서버 실행
uvicorn app.main:app --reload --port 8000
# --reload: 코드 변경 시 자동 재시작
# --port: 실행할 포트 번호 지정
API 엔드포인트 만들기
GET 요청 처리
from typing import Optional
from fastapi import FastAPI
app = FastAPI()
# 쿼리 파라미터 처리
@app.get("/users/")
async def read_users(
skip: int = 0, # 기본값 설정
limit: int = 10, # 기본값 설정
search: Optional[str] = None # 선택적 파라미터
):
# 더미 데이터
users = [
{"id": 1, "name": "John Doe"},
{"id": 2, "name": "Jane Doe"},
{"id": 3, "name": "James Smith"}
]
# 검색 처리
if search:
users = [user for user in users if search.lower() in user["name"].lower()]
# 페이지네이션
return users[skip : skip + limit]
POST 요청 처리
from fastapi import FastAPI
from pydantic import BaseModel
# 요청 데이터 모델 정의
class User(BaseModel):
name: str
email: str
age: Optional[int] = None
app = FastAPI()
@app.post("/users/")
async def create_user(user: User):
# 데이터 유효성은 Pydantic이 자동으로 검사
return {
"message": "User created successfully",
"user": user
}
응답 모델과 상태 코드
from fastapi import FastAPI, status
from pydantic import BaseModel
from typing import List
# 응답 모델 정의
class UserResponse(BaseModel):
id: int
name: str
email: str
is_active: bool = True
app = FastAPI()
@app.post(
"/users/",
response_model=UserResponse, # 응답 모델 지정
status_code=status.HTTP_201_CREATED # 상태 코드 지정
)
async def create_user(user: User):
# 새 사용자 생성 로직
new_user = {
"id": 1,
"name": user.name,
"email": user.email,
"is_active": True
}
return new_user # FastAPI가 자동으로 UserResponse 모델로 변환
자동 API 문서 확인
FastAPI는 자동으로 두 가지 API 문서를 생성합니다:
- Swagger UI (
/docs
접속)
-
대화형 API 문서 API 직접 테스트 가능 요청/응답 예시 자동 생성
- ReDoc (
/redoc
접속)
깔끔한 문서 형태 읽기 편한 형식 인쇄 친화적
마치며
이번 글에서는 FastAPI의 기본 설정과 간단한 API 엔드포인트 생성 방법을 알아보았습니다. FastAPI의 강력한 기능 중 일부만 살펴보았지만, 이것만으로도 얼마나 직관적이고 강력한 프레임워크인지 알 수 있습니다.
'파이썬 > Fast API' 카테고리의 다른 글
FastAPI의 데이터베이스 연동 쉽게 이해하기 (1) | 2024.11.23 |
---|