💡 AI 인사이트

🤖 AI가 여기에 결과를 출력합니다...

댓글 커뮤니티

쿠팡이벤트

이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.

검색

    로딩 중이에요... 🐣

    [코담] 웹개발·실전 프로젝트·AI까지, 파이썬·장고의 모든것을 담아낸 강의와 개발 노트

    04 요청(Request) 및 응답(Response) 본문 처리 | ✅ 편저: 코담 운영자

    4강: FastAPI 요청(Request) 및 응답(Response) 본문 처리

    🔗 소스


    📦 요청/응답 본문이란?

    • 요청 본문(Request Body): 클라이언트가 서버로 전송하는 데이터 (예: 게시글 내용, 사용자 정보)
    • 응답 본문(Response Body): 서버가 클라이언트에 반환하는 데이터 (예: 처리 결과, 저장된 객체 정보)

    ✅ 예시 상황

    • 사용자가 게시글을 작성할 때 → 글 내용과 이미지를 서버에 전송 (Request Body)
    • 서버는 저장 후 → 성공 메시지와 글 정보를 반환 (Response Body)

    🧱 Pydantic 모델로 요청 본문 정의

    FastAPI에서는 Pydantic 모델을 통해 JSON 형식의 요청 데이터를 구조화하고 자동 검증할 수 있습니다.

    📌 예제 1: 요청 바디 받기

    from fastapi import FastAPI
    from pydantic import BaseModel
    
    app = FastAPI()
    
    class User(BaseModel):
        name: str
        age: int
    
    @app.post("/users")
    def create_user(user: User):
        return user
    
    • /users에 POST 요청 시 JSON 데이터를 User 모델로 검증
    • 예시 요청 데이터:
    {
      "name": "John",
      "age": 18
    }
    
    • 유효성 검사 실패 시 422 오류와 상세 메시지 반환

    📤 응답 본문 정의

    응답도 Pydantic 모델로 명시하면 API의 응답 포맷을 일관되게 유지할 수 있습니다.

    📌 예제 2: 응답 바디 지정

    @app.get("/users/{user_id}", response_model=User)
    def get_user(user_id: int):
        return {"name": "Jane", "age": 25}
    
    • response_model=User → 반환값이 User 모델을 따라야 함
    • FastAPI가 반환값을 검증하여 자동 필터링, 검증 수행

    🔍 유효성 검사와 제약 조건 추가

    Pydantic은 데이터의 정확성과 제약 조건을 손쉽게 설정할 수 있습니다.

    📌 예제 3: 커스텀 유효성 검사

    from pydantic import BaseModel, Field, validator
    
    class User(BaseModel):
        name: str = Field(..., min_length=1)
        age: int = Field(..., gt=0, le=120)
    
        @validator("name")
        def name_must_not_be_empty(cls, v):
            if not v.strip():
                raise ValueError("Name cannot be empty")
            return v
    
    • Field()를 이용해 age의 범위 제약 설정
    • @validator를 통해 공백 이름 허용 방지

    🚫 GET 요청에는 Body 사용 비권장

    • GET 요청에 본문 데이터 사용은 HTTP 사양상 비표준이며, FastAPI에서는 가능하나 권장되지 않음
    • 데이터 전송에는 POST, PUT, DELETE, PATCH 등을 사용하세요

    ✅ 요약

    • 요청(Request) 본문 → 클라이언트에서 서버로 보내는 데이터
    • 응답(Response) 본문 → 서버가 클라이언트에 보내는 결과 데이터
    • Pydantic을 활용해 JSON 요청/응답을 구조화 및 유효성 검사 가능
    • response_modelField, validator로 응답 구조와 제약조건을 명시할 수 있음

    다음 강의에서는 Pydantic을 더 깊이 활용한 고급 데이터 유효성 검사 기법을 다룹니다.

    📌 참고: 본 강의는 FastAPI 학습 시리즈 기반으로 제작되었습니다.

    TOP
    preload preload