인공지능 개발자 수다(유튜브 바로가기) 자세히보기

Fastapi

[FastAPI] 디자인 패턴-스키마 패턴(11-7)

Suda_777 2025. 2. 2. 21:59
반응형

 

 

1. 스키마 패턴(Schema Pattern)이란?

FastAPI에서 Pydantic을 사용하여 API 요청과 응답 데이터를 구조화하는 방법을 의미

데이터 유효성을 보장하면서, API 응답 구조를 일관되게 유지

  • 데이터 유효성 검사 (Validation)
  • 입력(Input)과 출력(Output) 데이터 분리 (UserCreate, UserResponse 처럼 서로 다른 구조 정의 가능)
  • API 문서 자동 생성 지원
  • ORM과 분리된 구조 유지

 


2. 사용 방법

프로젝트 구조 예시

Pydantic 스키마는 schemas/ 폴더에서 관리하여 API 요청과 응답 데이터를 처리

my_fastapi_project/
│── main.py
│── routers/
│   ├── user.py
│── services/
│   ├── user_service.py
│── repositories/
│   ├── user_repository.py
│── models/
│   ├── user.py  # SQLAlchemy 모델
│── schemas/
│   ├── user.py  # Pydantic 스키마 (Schema)
│── database.py

 

schemas/user.py

✅ FastAPI에서 사용할 Pydantic 모델을 정의

from pydantic import BaseModel, EmailStr, ConfigDict

# 입력 데이터 (사용자 생성 요청)
class UserCreate(BaseModel):
    name: str
    email: EmailStr  # 이메일 유효성 검증

# 응답 데이터 (사용자 정보 반환)
class UserResponse(BaseModel):
    id: int
    name: str
    email: str

    model_config = ConfigDict(from_attributes=True)

 

services/user_service.py

서비스 레이어에서 Pydantic 스키마 사용

from sqlalchemy.orm import Session
from repositories.user_repository import create_user, get_user_by_email
from schemas.user import UserCreate, UserResponse

def register_user(db: Session, user: UserCreate) -> UserResponse:
    existing_user = get_user_by_email(db, user.email)
    if existing_user:
        raise ValueError("이미 존재하는 이메일입니다.")

    user_obj = create_user(db, user)
    
    return UserResponse.model_validate(user_obj)

 

 

반응형