0Pricing
Python Academy · 강의

경로 매개변수, 쿼리 매개변수 및 요청 본문

Pydantic으로 형식이 지정된 매개변수와 요청 본문 스키마를 정의합니다.

경로 매개변수, 쿼리 매개변수 및 요청 본문은(는) CoddyKit의 무료 Python Academy 강의입니다. 이것은 4개 중 2번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Python Academy 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

경로 매개변수 검증

Path()를 사용해 경로 매개변수에 검증기를 추가합니다. ge, le, gt, lt 제약 조건을 설정할 수 있습니다.

from fastapi import FastAPI, Path
app = FastAPI()

@app.get("/items/{item_id}")
def get_item(item_id: int = Path(ge=1, le=1000)):
    return {"item_id": item_id}

# GET /items/0  → 422 (must be >= 1)

쿼리 매개변수 검증

Query()를 사용해 쿼리 매개변수에 검증, 기본값, 별칭 및 설명을 추가합니다.

from fastapi import FastAPI, Query
app = FastAPI()

@app.get("/search")
def search(
    q: str = Query(min_length=2, max_length=50),
    page: int = Query(default=1, ge=1),
):
    return {"q": q, "page": page}

선택적 쿼리 매개변수

| None = None(Python 3.10 이상) 또는 Optional[str] = None을 사용하면 쿼리 매개변수를 선택 사항으로 만들 수 있습니다.

from fastapi import FastAPI
app = FastAPI()

@app.get("/users")
def list_users(
    dept: str | None = None,
    active: bool = True
):
    return {"dept": dept, "active": active}

# GET /users → dept=None, active=True
# GET /users?dept=HR&active=false

하나의 쿼리 매개변수에 여러 값 사용

list[str]과 Query()를 사용하면 하나의 쿼리 매개변수에 여러 값의 목록을 받을 수 있습니다.

from fastapi import FastAPI, Query
from typing import Annotated
app = FastAPI()

@app.get("/filter")
def filter_items(tags: Annotated[list[str], Query()] = []):
    return {"tags": tags}

# GET /filter?tags=python&tags=web

중첩된 요청 본문

Pydantic 모델은 중첩할 수 있습니다. FastAPI가 중첩된 JSON을 자동으로 처리합니다.

from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()

class Address(BaseModel):
    street: str
    city: str

class User(BaseModel):
    name: str
    address: Address

@app.post("/users")
def create_user(user: User):
    return user.model_dump()

Pydantic의 필드 제약 조건

모델 내부에서 Field()를 사용하면 개별 필드에 제약 조건, 기본값 및 설명을 추가할 수 있습니다.

from pydantic import BaseModel, Field

class Product(BaseModel):
    name: str = Field(min_length=1, max_length=100)
    price: float = Field(gt=0)
    quantity: int = Field(ge=0, default=0, description="Items in stock")

요청 본문 + 경로 + 쿼리 함께 사용

하나의 엔드포인트에서 세 가지 매개변수 유형을 모두 조합할 수 있습니다. FastAPI는 위치에 따라 구분합니다. 경로는 URL에, 단순 형식은 쿼리에, 모델은 본문에 해당합니다.

from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()

class ItemUpdate(BaseModel):
    name: str
    price: float

@app.put("/shops/{shop_id}/items/{item_id}")
def update_item(
    shop_id: int,
    item_id: int,
    item: ItemUpdate,
    notify: bool = False,
):
    return {"shop": shop_id, "item": item_id,
            "data": item.model_dump(), "notify": notify}

파일 업로드

UploadFile과 File()을 사용해 파일 업로드를 받습니다. await file.read()로 콘텐츠에 접근합니다.

from fastapi import FastAPI, UploadFile, File
app = FastAPI()

@app.post("/upload")
async def upload(file: UploadFile = File(...)):
    content = await file.read()
    return {"filename": file.filename, "size": len(content)}

폼 데이터

Form()을 사용해 HTML 폼 데이터(application/x-www-form-urlencoded 또는 multipart/form-data)를 받습니다.

# pip install python-multipart
from fastapi import FastAPI, Form
app = FastAPI()

@app.post("/login")
def login(username: str = Form(...), password: str = Form(...)):
    return {"username": username}

요청 검증 요약

FastAPI는 모든 매개변수 유형을 자동으로 검증합니다. 잘못된 입력이 들어오면 핸들러가 호출되기 전에 자세한 오류와 함께 HTTP 422를 반환합니다.

# Auto-validated:
# - Path params: type coercion, Path() constraints
# - Query params: Query() constraints, type coercion
# - Request body: Pydantic model validation
# - All errors → HTTP 422 Unprocessable Entity
# - No manual validation needed

별칭 및 사용 중단

Query() 또는 Field()에서 alias=를 사용하면 요청에서 다른 이름을 받을 수 있고, deprecated=True를 사용하면 이전 매개변수를 사용 중단된 것으로 표시할 수 있습니다.

from fastapi import FastAPI, Query
app = FastAPI()

@app.get("/items")
def get_items(
    q: str | None = Query(default=None, alias="search-query"),
    old: str | None = Query(default=None, deprecated=True),
):
    return {"q": q, "old": old}

# GET /items?search-query=python

빠른 확인

FastAPI는 경로 매개변수, 쿼리 매개변수 및 요청 본문을 어떻게 구분합니까?

복습

매개변수 제약 조건에는 Path()/Query()를 사용합니다. 복잡한 본문에는 Pydantic 모델을 중첩합니다. 경로, 쿼리 및 본문 매개변수는 자유롭게 조합할 수 있습니다. UploadFile은 파일을 처리하고 Form()은 HTML 폼을 처리합니다. FastAPI는 핸들러가 실행되기 전에 모든 항목을 검증합니다.

자주 묻는 질문

“경로 매개변수, 쿼리 매개변수 및 요청 본문” 강의는 무료인가요?

네 — “경로 매개변수, 쿼리 매개변수 및 요청 본문” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Python Academy 강의 전체를 잠금 해제할 수 있습니다. Python Academy 강의에는 총 4개의 강의가 포함되어 있습니다.

“경로 매개변수, 쿼리 매개변수 및 요청 본문”에서 뭘 배우나요?

Pydantic으로 형식이 지정된 매개변수와 요청 본문 스키마를 정의합니다. 브라우저에서 직접 실행하는 실습 코드로 Python Academy을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.

Python Academy을(를) 시작하는 데 경험이 필요한가요?

사전 경험은 필요하지 않습니다. CoddyKit의 Python Academy은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 2번째 강의입니다.

“경로 매개변수, 쿼리 매개변수 및 요청 본문” 강의는 얼마나 걸리나요?

대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.

이 Python Academy 강의에서 코드를 작성하고 실행할 수 있나요?

네. 모든 Python Academy 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.

이 강의의 모든 강의

  1. FastAPI 프로젝트 설정과 첫 엔드포인트
  2. 경로 매개변수, 쿼리 매개변수 및 요청 본문
  3. 의존성 주입과 인증
  4. 비동기 엔드포인트와 데이터베이스 통합
← Python Academy(으)로 돌아가기