목차
반응형
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)
반응형
'Fastapi' 카테고리의 다른 글
[FastAPI] 로그 남기기 (logging) (13) (0) | 2025.02.03 |
---|---|
[FastAPI] 공통 코드(Common Code) 작성 방법 (12) (0) | 2025.02.02 |
[FastAPI] 디자인 패턴-레포지토리 패턴(11-6) (0) | 2025.02.02 |
[FastAPI] 디자인 패턴-서비스 레이어 패턴(11-5) (0) | 2025.02.02 |
[FastAPI] 디자인 패턴-라우터패턴(Router Pattern) (11-4) (0) | 2025.02.02 |