최근 들어 웹 애플리케이션 개발에 있어 FastAPI는 그 빠른 성능과 사용의 용이성 덕분에 많은 인기를 끌고 있습니다. 특히 비동기 처리를 지원하여 높은 처리량을 요구하는 애플리케이션에 적합합니다. 이번 글에서는 FastAPI를 사용한 서버 개발 과정과 함께 Poetry를 활용한 파이썬 환경 관리 방법에 대해 자세히 알아보겠습니다.
1. FastAPI란?
FastAPI는 Starlette 위에 구축된 현대적인 웹 프레임워크로, 빠르고 효율적인 API 개발을 위한 도구입니다. Python 3.6 이상에서 사용할 수 있으며, 주요 특징으로는 다음과 같은 점들이 있습니다:
- 빠른 성능: FastAPI는 비동기 및 동기 기능 모두를 지원하며, Uvicorn 서버 위에서 매우 빠르게 작동합니다.
- 자동 문서화: API를 정의할 때 사용한 타입 힌트에 기반하여 Swagger UI와 Redoc을 자동 생성합니다.
- 간편한 입력 검증: Pydantic을 통해 요청 데이터의 검증과 직렬화/역직렬화를 손쉽게 처리할 수 있습니다.
2. Poetry란?
Poetry는 Python 프로젝트 관리를 위한 도구로, 패키지 의존성 관리와 프로젝트 환경을 통합적으로 제공합니다. 다른 패키지 관리 툴들과의 차별점은 다음과 같습니다:
- 간편한 의존성 관리: Poetry는
pyproject.toml
파일에 의존성을 명세하며, 이를 통해 의존성 충돌을 방지합니다. - 가상 환경 자동 생성: 각 프로젝트별로 독립적인 가상 환경을 자동으로 생성하고 활성화합니다.
- 버전 잠금:
poetry.lock
파일에 버전을 잠궈 재현 가능한 환경을 제공합니다.
3. FastAPI 서버 개발 환경 구축하기
3.1. Poetry 설치
Poetry를 설치하기 위해 다음 명령어를 사용합니다:
curl -sSL https://install.python-poetry.org | python3 -
설치 후, 아래 명령어로 PATH를 설정합니다:
export PATH="$HOME/.local/bin:$PATH"
3.2. 새 프로젝트 생성
이제 새로운 FastAPI 프로젝트를 생성해 보겠습니다. 프로젝트 폴더를 만들어주고 해당 폴더로 이동한 후, Poetry로 새 프로젝트를 초기화합니다:
mkdir my_fastapi_project
cd my_fastapi_project
poetry init
변수에 대한 질문이며, 기본값을 사용하거나 필요한 정보를 입력합니다. 이후, Poetry가 생성한 pyproject.toml
파일이 프로젝트 루트 디렉토리에 생성됩니다.
3.3. FastAPI 및 Uvicorn 설치
FastAPI와 Uvicorn을 설치합니다. Uvicorn은 ASGI 서버로, FastAPI 애플리케이션을 실행할 수 있게 해줍니다:
poetry add fastapi uvicorn
4. FastAPI 애플리케이션 구현하기
4.1. 기본 FastAPI 애플리케이션
프로젝트 디렉토리에 main.py
파일을 생성하고 아래와 같이 내용을 작성합니다:
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
4.2. 서버 실행
이제 서버를 실행해볼 차례입니다. 아래 명령어를 입력하면 Uvicorn 서버가 실행됩니다:
poetry run uvicorn main:app --reload
브라우저에서 http://127.0.0.1:8000
로 접근하면 “Hello, World!” 메시지를 확인할 수 있습니다. 또한, Swagger UI는 http://127.0.0.1:8000/docs
에서 확인 가능합니다.
5. 데이터 모델 정의 및 CRUD API 만들기
5.1. Pydantic 모델 생성
Pydantic을 사용하여 데이터 모델을 정의합니다. models.py
파일을 생성하고 다음 코드를 추가합니다:
from pydantic import BaseModel
class Item(BaseModel):
id: int
name: str
description: str = None
price: float
tax: float = None
5.2. CRUD 기능 구현
이제 main.py
파일에 CRUD 기능을 구현해 보겠습니다. 간단한 메모리 데이터베이스를 사용하여 데이터를 저장하고 조회하는 기능을 추가합니다:
from fastapi import FastAPI
from typing import List
from models import Item
app = FastAPI()
items = {}
@app.post("/items/", response_model=Item)
async def create_item(item: Item):
items[item.id] = item
return item
@app.get("/items/", response_model=List[Item])
async def read_items():
return list(items.values())
@app.get("/items/{item_id}", response_model=Item)
async def read_item(item_id: int):
return items[item_id]
@app.put("/items/{item_id}", response_model=Item)
async def update_item(item_id: int, item: Item):
items[item_id] = item
return item
@app.delete("/items/{item_id}")
async def delete_item(item_id: int):
del items[item_id]
return {"message": "Item deleted"}
5.3. 테스트
서버를 실행한 후, Swagger UI를 통해 API를 테스트할 수 있습니다. 각 메서드를 클릭하여 요청을 보내고 응답을 확인합니다.
6. 마무리 및 추가 리소스
FastAPI와 Poetry를 통한 개발 환경 구축 과정을 살펴보았습니다. 이러한 도구들은 특히 비동기 기능과 작업의 단순성을 제공하므로, 빠르게 RESTful API를 개발할 수 있게 도와줍니다.
FastAPI에 대해 더 알고 싶다면 공식 문서와 다양한 튜토리얼을 참고해 보세요:
이 튜토리얼을 통해 FastAPI와 Poetry의 기초를 익히고, 실무에서의 활용에 대한 감각을 익히셨기를 바랍니다. Happy Coding!