FastAPI와 Pydantic으로 응답 모델 및 데이터 검증 활용

FastAPI에서 Pydantic을 활용한 응답 모델 및 데이터 검증

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

- 대상: FastAPI와 Pydantic을 사용하는 웹 개발자

- 난이도: 중급 (Python 및 FastAPI 기초 지식 필요)

핵심 요약

  • response_model 사용으로 민감한 필드 필터링: UserResponsePublicUser 모델을 통해 password, email 등 민감 정보를 자동 제거
  • ORM과의 호환성: orm_mode = True로 SQLAlchemy 같은 ORM 객체와의 간편한 연동
  • 구조화된 응답 제공: 클라이언트에게 일관된 형식의 데이터 전달 (예: List[UserResponse], List[PublicUser])

섹션별 세부 요약

1. 응답 모델의 목적

  • FastAPI에서 response_model필요 없는 데이터 필터링, 데이터 검증, 응답 형식 통일을 달성
  • 예: 사용자 정보에서 password 필드를 제외한 응답
  • response_model기본 모델과 별도의 응답 모델 분리를 통해 안전성과 가독성 향상

2. Pydantic 모델 정의 예시

  • UserInDB 모델: 데이터베이스 내부에서 사용 (예: password, is_admin 포함)
  • UserResponse 모델: 클라이언트에게 전달할 응답 모델 (예: password 제외)
  • PublicUser 모델: 공개용 최소 정보 제공 (예: id, username만 포함)
  • orm_mode = True: SQLAlchemy와 같은 ORM 객체를 Pydantic 모델과 연동 가능

3. 응답 모델의 실제 사용

  • @app.get("/users/{user_id}", response_model=UserResponse): UserResponse 모델로 응답 필터링
  • @app.get("/public/users", response_model=List[PublicUser]): PublicUser 모델로 공개 정보만 제공
  • 자동 필터링: UserInDBpassword 필드는 UserResponse에서 자동 제거

4. 실제 사용 시나리오

  • 은행 앱: 사용자에게 비밀번호, PAN 등 민감 정보는 숨기고 이름, 잔액만 표시
  • 의료 시스템: 외부 포털에서는 내부 노트, 진단 기록 등은 숨기고 기본 정보만 제공
  • 소셜 미디어: 프로필에서는 이메일, 차단 목록 등은 숨기고 username, bio만 표시

결론

  • 실무 팁: response_model을 사용해 민감 정보를 자동 필터링하고, 클라이언트에게 구조화된 응답 제공
  • 테스트 방법: http://localhost:9002/docs에서 Swagger UI를 통해 /users/1, /public/users 등 엔드포인트 테스트
  • 핵심: response_model보안, 데이터 일관성, 프론트엔드 개발자 협업에 유리한 도구로 활용해야 함