본문 바로가기
카테고리 없음

[FastAPI] FastAPI이용한 백엔드 구축 가이드라인 (3) SQLAlchemy 모델(models.py) VS Pydantic 모델(schemas.py)

by 대장고양이샤샤 2025. 3. 11.

 

 

일반적인 데이터 흐름

클라이언트 요청 → Pydantic 모델(검증) → 비즈니스 로직 → SQLAlchemy 모델(저장) → 데이터베이스
데이터베이스 → SQLAlchemy 모델(조회) → 비즈니스 로직 → Pydantic 모델(API응답 형식으로 직렬화) → 클라이언트 응답

 

 

파일 분리 목적

: 데이터베이스 스키마가 변경(SQLAlchemy에서 처리)되더라도 API는 안정적으로 유지(Pydantic에서 처리)될 수 있고,

API 요구사항이 변경되더라도 데이터베이스 구조는 보존

 

🔵 SQLAlchemy 모델(models.py)과 Pydantic 모델(schemas.py)의 차이점

  1. 목적의 차이
    • SQLAlchemy 모델(models.py)
      • 데이터베이스 테이블 구조 정의와 ORM 매핑이 주 목적
      • 데이터베이스와 직접 상호작용
    • Pydantic 모델(schemas.py)
      • API 요청/응답 데이터의 검증 및 직렬화/역직렬화가 주 목적
      • 주로 HTTP 요청과 응답 사이에서 데이터를 처리
  2. 역할의 차이
    • SQLAlchemy: 데이터베이스 읽기/쓰기 작업 수행, 스키마 마이그레이션, 관계 정의 등 데이터베이스 관련 작업을 처리
    • Pydantic: 입력 데이터 검증, 출력 데이터 포맷팅, 문서화(OpenAPI/Swagger) 등 API 관련 작업을 처리
  3. 사용 시점
    • SQLAlchemy: 데이터베이스와 상호작용할 때 사용
    • Pydantic: API 요청을 받거나 응답을 보낼 때 사용

 

왜 두 가지 모델이 모두 필요한가?

FastAPI와 같은 현대적인 웹 프레임워크에서는 이 두 가지 모델을 분리하는 것이 일반적인 패턴이다.

  1. 관심사 분리: 데이터베이스 로직과 API 로직을 분리
  2. 보안: Pydantic 모델을 통해 API에 노출할 필드와 데이터베이스에 저장할 필드를 분리
  3. 유연성: 데이터베이스 스키마와 API 스키마를 독립적으로 진화시킬 수 있음
  4. 성능: 각 계층에 최적화된 라이브러리 사용 가능