FastAPI

FastAPI 강좌 8강: 성능 테스트 및 모니터링

atomicdev 2024. 10. 9. 10:50
728x90

성능 테스트 및 모니터링


강의 목표:

  • API의 성능을 테스트하는 도구를 사용해 FastAPI 애플리케이션의 성능을 분석하는 방법을 학습한다.
  • Kubernetes 환경에서 애플리케이션 모니터링 도구를 사용해 실시간 상태를 감시하는 방법을 실습한다.
    Kubernetes에 배포된 FastAPI 애플리케이션의 성능 테스트와 모니터링 과정

 


강의 세부 내용:

1. 성능 테스트의 중요성

  • API 성능 테스트는 애플리케이션이 실제 트래픽 하에서 얼마나 빠르게 요청을 처리하는지 측정하는 데 중요한 역할을 합니다.
  • 성능 테스트는 대량의 요청에 대한 애플리케이션의 응답 시간, 처리량, 동시성 처리 능력을 분석합니다.

2. 성능 테스트 도구 소개

  • Locust: Python 기반의 오픈소스 성능 테스트 도구로, 다수의 동시 요청을 통해 API 성능을 테스트할 수 있습니다.
  • k6: 대규모 부하 테스트를 위한 오픈소스 도구로, 고성능의 JavaScript 기반 로드 테스트를 지원합니다.

3. 실습: Locust를 사용한 성능 테스트

Step 1: Locust 설치

pip install locust
 

Step 2: Locust 테스트 스크립트 작성

  • FastAPI 애플리케이션에 다수의 요청을 보내 성능을 측정하는 Locust 스크립트를 작성합니다.
    # locustfile.py
    from locust import HttpUser, task, between
    
    class LoadTestUser(HttpUser):
        wait_time = between(1, 5)
    
        @task
        def test_root(self):
            self.client.get("/")
    
        @task
        def test_summary(self):
            self.client.get("/summary")
 
  • HttpUser: Locust에서 HTTP 요청을 보내는 사용자 역할을 하는 클래스입니다.
  • @task: 특정 엔드포인트로 요청을 보내는 작업을 정의합니다.
  • wait_time: 각 요청 사이에 1초에서 5초 사이의 대기 시간을 설정합니다.

Step 3: Locust 서버 실행

  • Locust를 실행하여 성능 테스트 웹 인터페이스를 시작합니다.
    locust -f locustfile.py

 

  • 브라우저에서 http://localhost:8089로 접속하여 테스트할 사용자 수와 초당 요청 수를 설정할 수 있습니다.

Step 4: 성능 테스트 실행

  1. Number of users: 테스트할 사용자 수(예: 50명).
  2. Spawn rate: 초당 생성할 사용자 수(예: 10).
  3. Host: 테스트할 FastAPI 서버 주소(예: http://127.0.0.1:8000).

테스트가 실행되면 요청 처리 속도, 실패율, 응답 시간 등의 성능 데이터를 실시간으로 확인할 수 있습니다.

Step 5: 테스트 결과 분석

  • Locust 대시보드에서 각 요청의 평균 응답 시간, 90% 응답 시간, 초당 처리량 등의 결과를 확인할 수 있습니다.
  • 성능 병목 구간을 확인하여 애플리케이션의 최적화가 필요한 부분을 파악할 수 있습니다.

4. Kubernetes 환경에서 모니터링

Step 1: Kubernetes 모니터링 도구

  1. Prometheus: Kubernetes 클러스터의 메트릭 데이터를 수집하고, 실시간 모니터링을 제공합니다.
  2. Grafana: Prometheus 데이터를 시각화하여, 애플리케이션 상태를 모니터링할 수 있습니다.

Step 2: Prometheus와 Grafana 설치

  1. Helm 설치: Kubernetes에 Prometheus와 Grafana를 설치하기 위한 Helm 차트 설치.
    brew install helm
  2. Prometheus와 Grafana 배포:
    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
    helm repo update
    helm install prometheus prometheus-community/kube-prometheus-stack
  3. Prometheus 대시보드 접속:
    • Prometheus가 실행되고 있는 Pod를 확인한 후, Kubernetes 대시보드를 통해 접속할 수 있습니다.
      kubectl get pods -n default
     
  4. Grafana 대시보드 설정:
    • Grafana에서 기본적으로 제공되는 Kubernetes 모니터링 대시보드를 사용하여 클러스터 상태를 실시간으로 감시합니다.
    • Grafana 접속:
      kubectl port-forward <grafana-pod-name> 3000
       
    • 브라우저에서 http://localhost:3000에 접속하여 대시보드를 확인합니다.

 

 

 

 

Step 3: Kubernetes 애플리케이션 메트릭 모니터링

  • Prometheus가 수집하는 메트릭에는 CPU 사용량, 메모리 사용량, 네트워크 I/O, 애플리케이션 처리량 등이 포함됩니다.
  • Grafana 대시보드에서 각 메트릭을 시각화하여 애플리케이션 상태를 실시간으로 모니터링할 수 있습니다.

5. 애플리케이션 최적화

Step 4: 성능 최적화

  1. 비동기 처리: 성능 테스트 결과에서 발견된 병목 현상은 비동기 처리를 통해 최적화할 수 있습니다.
  2. 리소스 할당 조정: Kubernetes에서 각 Pod에 할당된 CPU와 메모리 리소스를 조정하여 성능을 개선할 수 있습니다.
    resources:
      limits:
        cpu: "500m"
        memory: "512Mi"
      requests:
        cpu: "250m"
        memory: "256Mi"
     

마무리 및 추가 학습

  • 이번 강의에서는 Locust를 사용해 FastAPI 애플리케이션의 성능 테스트를 진행하고, Kubernetes 환경에서 Prometheus와 Grafana로 애플리케이션을 모니터링하는 방법을 배웠습니다.
  • 성능 테스트와 모니터링 결과를 바탕으로 애플리케이션의 병목 구간을 분석하고, 최적화를 진행하는 방법을 학습했습니다.
728x90