Python FastAPI로 REST API 개발하기
안녕하세요, 소프트웨어 공장에 오신 것을 환영합니다. 오늘은 Python의 인기 있는 웹 프레임워크 중 하나인 FastAPI를 사용하여 REST API를 개발하는 방법에 대해 알아보겠습니다. FastAPI는 빠른 개발 속도와 간결한 코드 작성, 그리고 뛰어난 성능으로 많은 개발자들에게 사랑받고 있습니다. 이 포스팅에서는 기초부터 시작해 실제로 API를 설계하고 구현하는 예제를 함께 살펴보겠습니다.
1. FastAPI란?
FastAPI는 다음과 같은 특징을 가진 Python 기반의 웹 프레임워크입니다:
- 빠른 개발: 자동으로 문서화를 생성하고 타입 힌트를 기반으로 코드를 작성할 수 있어 개발 속도가 빠릅니다.
- 높은 성능: Starlette와 Pydantic을 기반으로 하여 빠르고 효율적인 요청 처리가 가능합니다.
- 자동 문서화: Swagger UI와 ReDoc을 통해 API 문서를 자동으로 생성합니다.
- Pythonic: 타입 힌트를 적극적으로 활용하여 코드의 가독성을 높입니다.
FastAPI는 간단한 프로젝트에서부터 대규모 시스템에 이르기까지 다양한 환경에서 사용할 수 있습니다.
2. FastAPI 설치
FastAPI를 사용하려면 Python 3.7 이상이 필요합니다. FastAPI와 함께 ASGI 서버인 uvicorn을 설치해야 합니다.
pip install fastapi uvicorn
설치가 완료되면 다음 단계를 진행할 준비가 된 것입니다.
3. FastAPI로 간단한 REST API 만들기
3.1 프로젝트 구조
먼저 프로젝트 디렉토리를 설정합니다:
fastapi-rest-api/
├── main.py
main.py
파일을 생성하고 아래와 같이 작성합니다.
3.2 기본 FastAPI 애플리케이션
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
def read_root():
return {"message": "Hello, FastAPI!"}
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="127.0.0.1", port=8000)
FastAPI()
: FastAPI 애플리케이션 인스턴스를 생성합니다.@app.get("/")
: HTTP GET 요청을 처리하는 엔드포인트를 정의합니다.uvicorn.run
: 애플리케이션을 실행합니다.
터미널에서 아래 명령어를 실행하면 서버가 시작됩니다:
python main.py
브라우저에서 http://127.0.0.1:8000
로 이동하면 {"message": "Hello, FastAPI!"}
응답을 확인할 수 있습니다.
4. CRUD API 구현
이번에는 간단한 To-Do 리스트 API를 만들어보겠습니다. CRUD(Create, Read, Update, Delete) 기능을 포함하도록 설계합니다.
4.1 데이터 모델 정의
FastAPI는 Pydantic 모델을 사용하여 데이터 구조를 정의합니다.
from pydantic import BaseModel
from typing import Optional
class TodoItem(BaseModel):
id: int
title: str
description: Optional[str] = None
completed: bool = False
BaseModel
: Pydantic 모델의 기본 클래스입니다.Optional[str]
: 필수가 아닌 필드를 정의합니다.
4.2 API 엔드포인트 작성
다음으로 CRUD 기능을 제공하는 엔드포인트를 추가합니다:
from typing import List
from fastapi import FastAPI, HTTPException
app = FastAPI()
todos = [] # 간단한 메모리 저장소
@app.post("/todos/", response_model=TodoItem)
def create_todo(todo: TodoItem):
todos.append(todo)
return todo
@app.get("/todos/", response_model=List[TodoItem])
def read_todos():
return todos
@app.get("/todos/{todo_id}", response_model=TodoItem)
def read_todo(todo_id: int):
for todo in todos:
if todo.id == todo_id:
return todo
raise HTTPException(status_code=404, detail="Todo not found")
@app.put("/todos/{todo_id}", response_model=TodoItem)
def update_todo(todo_id: int, updated_todo: TodoItem):
for index, todo in enumerate(todos):
if todo.id == todo_id:
todos[index] = updated_todo
return updated_todo
raise HTTPException(status_code=404, detail="Todo not found")
@app.delete("/todos/{todo_id}", response_model=dict)
def delete_todo(todo_id: int):
for index, todo in enumerate(todos):
if todo.id == todo_id:
del todos[index]
return {"message": "Todo deleted successfully"}
raise HTTPException(status_code=404, detail="Todo not found")
- POST: 새로운 To-Do 항목을 추가합니다.
- GET: 전체 또는 특정 To-Do 항목을 조회합니다.
- PUT: 특정 To-Do 항목을 수정합니다.
- DELETE: 특정 To-Do 항목을 삭제합니다.
5. Swagger UI 및 ReDoc 활용
FastAPI는 기본적으로 API 문서를 제공합니다:
- Swagger UI:
http://127.0.0.1:8000/docs
- ReDoc:
http://127.0.0.1:8000/redoc
이 페이지에서 API 엔드포인트를 테스트하거나 자세한 사용법을 확인할 수 있습니다.
6. 마무리
이번 포스팅에서는 FastAPI로 REST API를 설계하고 구현하는 과정을 알아보았습니다. FastAPI는 간결한 코드와 높은 성능으로 REST API 개발에 매우 적합한 도구입니다.
'Python > Python 심화' 카테고리의 다른 글
Python socket 모듈을 이용한 네트워크 프로그래밍 (0) | 2025.08.05 |
---|---|
웹 스크래핑을 위한 Python BeautifulSoup와 Scrapy (0) | 2025.08.04 |
Python Django를 이용한 웹 애플리케이션 구축 (0) | 2025.08.02 |
Python Flask를 이용한 간단한 웹 서버 구현 (0) | 2025.08.01 |
Python statsmodels를 이용한 통계 분석 (0) | 2025.07.31 |