FastAPI에서 Pydantic을 활용한 응답 모델 및 데이터 검증
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
웹 개발
대상자
- 대상: FastAPI와 Pydantic을 사용하는 웹 개발자
- 난이도: 중급 (Python 및 FastAPI 기초 지식 필요)
핵심 요약
response_model
사용으로 민감한 필드 필터링:UserResponse
와PublicUser
모델을 통해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
모델로 공개 정보만 제공- 자동 필터링:
UserInDB
의password
필드는UserResponse
에서 자동 제거
4. 실제 사용 시나리오
- 은행 앱: 사용자에게 비밀번호, PAN 등 민감 정보는 숨기고 이름, 잔액만 표시
- 의료 시스템: 외부 포털에서는 내부 노트, 진단 기록 등은 숨기고 기본 정보만 제공
- 소셜 미디어: 프로필에서는 이메일, 차단 목록 등은 숨기고
username
,bio
만 표시
결론
- 실무 팁:
response_model
을 사용해 민감 정보를 자동 필터링하고, 클라이언트에게 구조화된 응답 제공 - 테스트 방법:
http://localhost:9002/docs
에서 Swagger UI를 통해/users/1
,/public/users
등 엔드포인트 테스트 - 핵심:
response_model
은 보안, 데이터 일관성, 프론트엔드 개발자 협업에 유리한 도구로 활용해야 함