FastAPI는 웹 애플리케이션 개발을 위한 Python 기반의 백엔드 프레임워크다.
Pytorch, TensorFlow, Keras 같은 프레임워크나 라이브러리를 사용하여 딥러닝 모델 개발을 하면, 그 모델을 웹 API로 외부에서 호출 가능하게 만드는 용도로 FastAPI가 쓰인다!
⇒ 즉, “Serving”을 위한 프레임워크 라고 보면 된다.
⇒ Java에서는 Spring Boot가 있다면, Python에는 FastAPI가 있는 것!
PyTorch 모델을 FastAPI로 서빙하는 간단한 예시를 살펴보자.
from fastapi import FastAPI # FastAPI 불러오기
import torch
from model import MyModel # 사전 학습된 모델(딥러닝 모델 정의)
app = FastAPI() # FastAPI 인스턴스 생성
model = MyModel() # 딥러닝 모델 인스턴스 생성
model.load_state_dict(torch.load("model.pth"))#학습된 모델 가중치 로드
model.eval()
@app.post("/predict") # FastAPI 라우팅 (API 경로 설정)
def predict(data: dict): # 클라이언트가 JSON으로 보낸 데이터받기
input_tensor = preprocess(data) # 데이터 전처리 (딥러닝용)
output = model(input_tensor) # 딥러닝 모델 추론
return {"result": output.tolist()} # 예측 결과 JSON으로 반환
클라이언트가 /predict에 JSON 데이터로 요청을 보내면, 모델이 예측하고 결과를 반환해준다.
※ 핵심요약※
FastAPI는 마이크로 프레임워크의 한 종류다.
즉, 마이크로 프레임워크는 개념이고, FastAPI는 그 개념에 해당하는 구체적인 구현체(Framework) 라고 보면 된다.
마이크로 프레임워크(Micro Framework)는 최소한의 핵심 기능만 제공하는 경량 웹 프레임워크로, Web API 개발에 특화되어 있으며 SPA 백엔드에 주로 사용된다.
FastAPI는 단순히 가벼운 웹 프레임워크 이상으로, 마이크로 프레임워크에 속하면서도 비동기 처리와 타입 안전성을 강조한 Python 웹 프레임 워크다.
📌 FastAPI 핵심 특징
| 기능 | 설명 |
|---|---|
| 자동 문서화 | Pydantic 스키마 기반으로 Swagger UI, ReDoc 자동 생성 (자동 문서화로 테스트 및 유지 보수 편리) |
| 타입 안전성 | Python의 타입 힌트 기반 → 개발 시점에 타입 검증 가능 |
| 비동기 지원 | async def 기반, ASGI 기반 서버와 연동 가능 (ML예측, 실시간 처리에 빠른 비동기 처리 필요) |
| 빠른 성능 | Starlette 기반으로 Flask보다 빠른 처리 속도 (Flask보다 2~5배 빠르다고 평가) |
| Schema-Driven Development | API 요청/응답 구조를 명확히 정의하여 프론트-백엔드 병렬 개발 가능 |
예시로, 회원 정보를 저장하는 경우 shcema를 아래와 같이 작성할 수 있다.Schema(스키마)는 데이터의 구조와 형식을 정의한 설계도다.
즉, 데이터가 어떤 모양이어야 하는지 미리 정해놓은 규칙이라 생각하면 된다.
{
"username": "apple123",
"email": "apple@example.com",
"age": 25
} 이런 JSON 데이터를 API로 받을 때, 다음과 같이 정의할 수 있다.
| 필드명 | 자료형 | 필수 여부 |
|---|---|---|
| username | 문자열(str) | ✔️ 필수 |
| 문자열(str) | ✔️ 필수 | |
| age | 정수형(int) | ❌ 선택 |
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
# 1. 데이터 스키마 정의
class User(BaseModel):
username: str
email: str
age: int
# 2. POST 요청으로 사용자 생성
@app.post("/users")
def create_user(user: User):
return {
"message": "User created successfully",
"user": user
}user:User → FastAPI가 request body에서 데이터를 읽고 User로 만들어준다.| 기능 | 예시 |
|---|---|
| 자료형 검사 | age: int, email: str 등 |
| 기본값 지정 | age: int = 18 |
| 선택값 허용 | age: Optional[int] |
| 유효성 검사 추가 | EmailStr, conint(gt=0) 등 |
| 중첩 구조 | class Address(BaseModel):, address: Address |
ASGI(Asynchronous Server Gateway Interface)는 Python 비동기 웹 애플리케이션을 위한 비동기 표준 인터페이스이다.
Uvicorn, Hypercorn 같은 비동기 서버와 잘 호환됨async/await 키워드를 기반으로 동시성 처리가 가능하므로 I/O 병목 최소화에 유리