본문으로 건너뛰기
백엔드 기초집: Python FastAPILESSON 07

응답 모델과 상태 코드

난이도초급
예상 시간35분
선수지식이전 강의

7강. 응답 모델과 상태 코드

1. 이번 강의에서 해결할 문제

서버 내부 dict를 그대로 반환하면 나중에 비밀 필드가 응답에 섞일 수 있습니다. 클라이언트가 받을 출력 계약과 상태 코드를 명시합니다.

2. 학습 목표

3. 핵심 개념

응답 모델은 문서용 타입만이 아니라 실제 출력 필터입니다. 서버 코드가 예상하지 못한 필드를 포함해도 선언한 필드만 JSON에 남습니다. 반환값이 모델과 맞지 않으면 서버 구현 오류로 취급되므로 계약 위반을 일찍 발견할 수 있습니다.

4. 단계별 코드 예시

파일 경로: game-ranking-api/app/schemas.py

app/schemas.py
from datetime import datetime, timezone

from pydantic import BaseModel, ConfigDict


class RecordCreate(BaseModel):
game_name: str
score: int


class RecordRead(BaseModel):
model_config = ConfigDict(from_attributes=True)

id: int
game_name: str
score: int
created_at: datetime

파일 경로: game-ranking-api/app/main.py

app/main.py
from datetime import datetime, timezone

from fastapi import FastAPI, status

from app.schemas import RecordCreate, RecordRead

app = FastAPI(title="Game Ranking API")


@app.post("/records", response_model=RecordRead, status_code=status.HTTP_201_CREATED)
def create_record(payload: RecordCreate) -> dict[str, object]:
return {"id": 1, **payload.model_dump(), "created_at": datetime.now(timezone.utc), "internal_note": "숨김"}


@app.delete("/records/{record_id}", status_code=status.HTTP_204_NO_CONTENT)
def delete_record(record_id: int) -> None:
return None

실행 위치: game-ranking-api/

python -m uvicorn app.main:app --reload
Invoke-WebRequest -Method Post http://127.0.0.1:8000/records -ContentType 'application/json' -Body '{"game_name":"Rule Break","score":1200}' | Select-Object StatusCode, Content
Invoke-WebRequest -Method Delete http://127.0.0.1:8000/records/1 | Select-Object StatusCode, Content

5. 코드가 동작하는 이유

response_model=RecordRead가 반환 dict를 검증하고 internal_note를 제거합니다. ConfigDict(from_attributes=True)는 다음 ORM 단계에서 객체 속성도 읽게 합니다. 204 응답은 본문을 가지지 않으므로 함수가 None을 반환합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

응답 모델과 상태 코드 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“응답 모델과 상태 코드”의 위험한 선택을 피하려면 어떤 원칙을 적용해야 하나요?
  2. 문제 2“응답 모델과 상태 코드”에서 ‘비밀번호 해시가 있는 내부 사용자 모델을 반환합니다.’ 문제가 생겼습니다. 가장 알맞은 진단 또는 대응은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

7강. 응답 모델과 상태 코드 미완료 상태