개발/FastAPI
FastAPI 시리즈 3화 - FastAPI 기본 라우팅: GET, POST, PUT, DELETE 작성법
B컷개발자
2025. 5. 2. 09:46
FastAPI에서 다양한 HTTP 메서드(GET, POST, PUT, DELETE)를 사용하는 라우팅 구현 방법을 실제 코드 예제 중심으로 정리합니다. RESTful API 구조를 이해하고 싶은 개발자에게 실질적인 도움이 됩니다.
FastAPI의 라우팅 구조, 왜 중요한가?
FastAPI는 경량 프레임워크이지만, 라우팅 시스템만큼은 굉장히 탄탄하게 설계되어 있습니다.
단순히 URL에 함수를 연결하는 걸 넘어서, 함수 시그니처 기반으로 문서화와 검증까지 자동화합니다.
이 장에서는 대표적인 HTTP 메서드에 대한 FastAPI 라우팅을 하나씩 실습해보겠습니다.
1. GET – 데이터 조회 요청
from fastapi import FastAPI
app = FastAPI()
@app.get("/users")
def get_users():
return [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}]
- @app.get() 데코레이터 사용
- URL: /users
- Swagger UI에서 자동 문서화됨
▶ 결과 예시
GET /users 요청 시 JSON 배열 응답
[
{"id": 1, "name": "Alice"},
{"id": 2, "name": "Bob"}
]
2. POST – 새로운 데이터 생성
from pydantic import BaseModel
class User(BaseModel):
name: str
age: int
@app.post("/users")
def create_user(user: User):
return {"message": f"{user.name} created", "data": user}
- @app.post() 데코레이터 사용
- Pydantic 모델을 통해 body 데이터 검증
- Swagger UI에서 자동으로 요청 스키마 생성
▶ Swagger UI에서 확인
{
"name": "Charlie",
"age": 30
}
3. PUT – 데이터 수정 요청
@app.put("/users/{user_id}")
def update_user(user_id: int, user: User):
return {"message": f"User {user_id} updated", "data": user}
- URL 경로에 {user_id} 파라미터 포함
- user_id는 함수 인자에서 자동 매핑됨
- 본문은 POST와 동일하게 User 모델 사용
4. DELETE – 데이터 삭제 요청
@app.delete("/users/{user_id}")
def delete_user(user_id: int):
return {"message": f"User {user_id} deleted"}
- 삭제 요청도 단순하고 명확하게 처리
- DELETE 메서드는 보통 본문 없이 URL만으로 처리
5. FastAPI 라우팅 구조 정리
메서드 데코레이터 설명
GET | @app.get() | 조회 |
POST | @app.post() | 생성 |
PUT | @app.put() | 수정 |
DELETE | @app.delete() | 삭제 |
FastAPI는 이들 메서드를 직관적인 방식으로 매핑하며,
타입 힌트 기반으로 요청/응답 스키마를 자동으로 생성해주는 점이 가장 큰 장점입니다.
실무 팁: URL 설계에 REST 관점 적용하기
- /users : GET(전체 조회), POST(신규 생성)
- /users/{id} : GET(단일 조회), PUT(수정), DELETE(삭제)
이런 URL 규칙을 따를 경우, Swagger UI와 Redoc에서의 API 문서가 깔끔하고 직관적으로 정리됩니다.
다음 글 예고
FastAPI 시리즈 4화 - 요청(Request)과 응답(Response) 데이터 핸들링: Pydantic 모델 이해하기
에서는 FastAPI의 강력한 데이터 모델링 도구인 Pydantic을 통해
요청 바디, 응답 스키마, 유효성 검사 등 실전 API 품질관리 방법을 살펴보겠습니다.