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

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)

     

     

    반응형