Serializers & DTOs: API가 노출하는 것을 제어하기

발행: (2026년 2월 26일 오전 04:48 GMT+9)
2 분 소요
원문: Dev.to

Source: Dev.to

DTO란 무엇인가?

**DTO (Data Transfer Object)**는 클라이언트에 노출되는 데이터를 정확히 정의하여 내부 필드가 유출되는 것을 방지합니다.

예시 모델

다음과 같은 필드를 가진 Item 모델을 생각해 보세요:

  • id
  • name
  • description
  • price
  • created_at
  • internal_db_id ← 민감한 내부 필드
  • deleted_at ← 민감한 내부 필드

DTO가 없으면 이 모든 필드가 클라이언트에 반환됩니다.

DTO 정의

class ItemResponseDTO(BaseModel):
    id: int
    name: str
    price: float

    class Config:
        from_attributes = True

이 DTO는 id, name, price만 노출합니다.

FastAPI 엔드포인트에서 DTO 사용하기

@app.get("/items", response_model=List[ItemResponseDTO])
def get_all_items():
    db = SessionLocal()
    items = db.query(Item).all()
    db.close()
    return items

FastAPI의 response_model 매개변수는 DTO를 기준으로 출력 결과를 필터링합니다.

  • DTO 없이/items/full 요청은 internal_db_iddeleted_at을 포함한 모든 모델 필드를 반환합니다.
  • DTO와 함께/items 요청은 ItemResponseDTO에 정의된 필드만 반환하므로 민감한 데이터가 숨겨집니다.

API가 노출하는 내용을 항상 명시적으로 정의하세요.

0 조회
Back to Blog

관련 글

더 보기 »

고객을 위해 통합 복잡성을 줄이는 방법

도구가 아니라 비즈니스를 이해하는 것부터 시작하세요. 통합 플랫폼이나 API 설계에 손대기 전에, 나는 비즈니스 흐름에 집중합니다. 나는 간단하지만 중요한 질문을 합니다…