FastAPI는 Python으로 작성된 현대적인 웹 프레임워크로, 높은 성능과 쉬운 사용성을 제공합니다. 비동기 I/O를 지원하며, Python 타입 힌트를 활용해 API 문서화를 자동으로 처리합니다. 이번 글에서는 FastAPI 서버를 개발하는 방법과 성능 분석 및 모니터링을 위한 도구에 대해 자세히 다루겠습니다.
1. FastAPI 서버 개발
1.1 FastAPI 설치
FastAPI를 사용하기 위해서는 먼저 필요한 패키지를 설치해야 합니다. 다음 명령어를 사용하여 FastAPI와 ASGI 서버인 Uvicorn을 설치할 수 있습니다.
pip install fastapi uvicorn
1.2 기본 FastAPI 애플리케이션 생성하기
FastAPI 애플리케이션을 생성하는 것은 매우 간단합니다. 아래는 간단한 “Hello, World!” 애플리케이션의 예입니다.
from fastapi import FastAPI
app = FastAPI()
@app.get("/")
async def read_root():
return {"Hello": "World"}
위 코드를 main.py
파일로 저장한 다음, 아래의 명령어로 서버를 실행할 수 있습니다.
uvicorn main:app --reload
서버가 실행되면 http://127.0.0.1:8000/docs 에서 자동으로 생성된 API 문서를 확인할 수 있습니다.
1.3 경로 매개변수와 쿼리 매개변수
FastAPI에서는 경로 매개변수와 쿼리 매개변수를 손쉽게 정의할 수 있습니다. 아래는 두 가지 매개변수를 사용하는 예시입니다.
@app.get("/items/{item_id}")
async def read_item(item_id: int, q: str = None):
return {"item_id": item_id, "q": q}
1.4 데이터 모델링
FastAPI는 Pydantic을 사용하여 데이터 모델을 정의합니다. 이를 통해 입력 데이터의 유효성을 검사할 수 있습니다.
from pydantic import BaseModel
class Item(BaseModel):
name: str
price: float
is_offer: bool = None
@app.post("/items/")
async def create_item(item: Item):
return item
2. FastAPI 성능 분석
FastAPI는 기본적으로 비동기적으로 동작하여 높은 성능을 자랑합니다. 하지만 성능을 더욱 향상시키기 위해 여러 가지 방법을 사용할 수 있습니다.
2.1 성능 테스트 도구
성능을 분석하기 위해 다양한 도구를 사용할 수 있습니다. 가장 흔히 사용되는 도구는 Locust와 Apache Benchmark입니다.
Locust 설치 및 사용 예제
pip install locust
아래는 Locust를 사용하여 FastAPI 애플리케이션의 부하 테스트를 수행하는 예제입니다.
from locust import HttpUser, task
class FastAPIUser(HttpUser):
@task
def index(self):
self.client.get("/")
위 코드를 locustfile.py
파일로 저장한 후, 다음 명령어로 Locust를 실행할 수 있습니다.
locust -f locustfile.py
웹 브라우저에서 http://localhost:8089에 접속하여 원하는 수의 사용자를 설정하고 테스트를 진행할 수 있습니다.
2.2 APM(애플리케이션 성능 모니터링) 도구
애플리케이션의 성능을 모니터링하기 위해 APM 도구를 사용하는 것이 효과적입니다. 대표적인 APM 도구로는 New Relic, Datadog, Sentry가 있습니다.
New Relic 설치 및 설정
New Relic을 사용하기 위해서는 먼저 계정을 생성한 후, 아래의 명령어로 New Relic Python 에이전트를 설치해야 합니다.
pip install newrelic
설치 후, newrelic-admin generate-config YOUR_NEW_RELIC_LICENSE_KEY newrelic.ini
명령어를 통해 설정 파일을 생성합니다. 이후 FastAPI 애플리케이션을 실행할 때 아래와 같이 설정할 수 있습니다.
NEW_RELIC_CONFIG_FILE=newrelic.ini newrelic-admin run-program uvicorn main:app --reload
3. FastAPI 모니터링 도구
서버의 상태를 모니터링하기 위해 다양한 도구를 사용할 수 있습니다. 여러 유형의 로그 및 메트릭을 수집하는 것이 중요합니다.
3.1 Prometheus와 Grafana
Prometheus는 시계열 데이터베이스로, 데이터를 수집하고 쿼리할 수 있는 역량을 제공합니다. Grafana는 그 데이터를 시각화하는 도구입니다.
FastAPI와 Prometheus 연동
먼저, prometheus_fastapi_instrumentator
패키지를 설치합니다.
pip install prometheus-fastapi-instrumentator
다음으로, FastAPI 애플리케이션에 Prometheus 미들웨어를 추가하는 예제입니다.
from prometheus_fastapi_instrumentator import Instrumentator
instrumentator = Instrumentator()
@app.on_event("startup")
def startup():
instrumentator.instrument(app).expose(app)
이렇게 설정한 후, Prometheus는 FastAPI 애플리케이션의 상태를 자동으로 수집합니다.
3.2 ELK 스택(Elasticsearch, Logstash, Kibana)
ELK 스택은 저장된 로그 데이터의 검색 및 분석을 가능하게 합니다. FastAPI 애플리케이션의 로그 데이터를 ELK 스택과 연결하는 방법은 다음과 같습니다.
FastAPI 로깅 설정
파이썬의 logging
모듈을 사용하여 FastAPI의 로그를 설정할 수 있습니다.
import logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
@app.get("/")
async def read_root():
logger.info("Root endpoint accessed")
return {"Hello": "World"}
이렇게 설정한 로그를 Logstash를 통해 Elasticsearch로 전송하고, Kibana를 통해 분석할 수 있습니다.
결론
FastAPI는 빠르고 효율적인 API 서버 개발을 지원하며, 성능 분석 및 모니터링 도구와의 연동을 통해 애플리케이션의 상태를 실시간으로 확인할 수 있습니다. 이 글에서는 FastAPI 서버 개발을 위한 기본적인 내용과 각종 성능 분석 및 모니터링 도구를 소개했습니다. 이를 통해 더 나은 FastAPI 애플리케이션을 개발해보시기 바랍니다.