FastAPI에서 Pydantic 모델 재사용 패턴

문제 상황

회원 정보 CRUD API를 만들면서 모델 정의가 중복되는 문제가 있었다. 생성/수정/조회 각각에 대해 비슷한 필드를 가진 모델을 반복해서 작성하고 있었다.

해결 방법

Pydantic 모델 상속을 활용해 Base 모델을 만들고, 용도별로 확장하는 구조로 변경했다.

from pydantic import BaseModel, EmailStr
from typing import Optional
from datetime import datetime

class UserBase(BaseModel):
    email: EmailStr
    name: str
    is_active: bool = True

class UserCreate(UserBase):
    password: str

class UserUpdate(BaseModel):
    email: Optional[EmailStr] = None
    name: Optional[str] = None
    is_active: Optional[bool] = None

class UserInDB(UserBase):
    id: int
    created_at: datetime
    
    class Config:
        orm_mode = True

적용 결과

  • 공통 필드는 UserBase에서 한 번만 정의
  • 생성 시에만 필요한 passwordUserCreate에 추가
  • 수정 시에는 모든 필드를 Optional로 처리
  • DB 조회 결과는 orm_mode=True로 SQLAlchemy 모델과 연동

이 패턴을 적용한 후 모델 수정이 필요할 때 Base 모델만 변경하면 되어 유지보수가 편해졌다. FastAPI 공식 문서에서도 권장하는 방식이라 팀 내에서도 쉽게 받아들여졌다.

FastAPI에서 Pydantic 모델 재사용 패턴