직접 운영 환경에서 사용중인 RDS 에 부하 테스트를 하기엔 리소스적으로 부담이 많이 가기에, 로컬에서 사용중인 DB를 RDS 성능과 최대한 유사하게 세팅하였습니다.

docker compose -f docker-compose.k6.yml up -d prometheus postgres postgres-exporter influxdb grafana
docker compose -f docker-compose.k6.yml run --rm k6 \\
  run -o influxdb=http://influxdb:8086/k6 /k6/auth/auth.test.js

docker-compose.k6.yml

  prometheus:
    image: prom/prometheus:latest
    container_name: prometheus
    command:
      - --config.file=/etc/prometheus/prometheus-local.yml
    volumes:
      - ./prometheus/prometheus-local.yml:/etc/prometheus/prometheus-local.yml:ro
    ports:
      - "9091:9090"
    networks:
      - monitoring

  postgres-exporter:
    image: prometheuscommunity/postgres-exporter
    container_name: postgres-exporter
    environment:
      DATA_SOURCE_NAME: "postgresql://root:[email protected]:5433/mumuk?sslmode=disable"   // 주의 
    depends_on:
      - postgres
    ports:
      - "9188:9187"
    networks:
      - monitoring

Local DB 를 모니터링하기 위해 컨테이너를 추가하였다. 대시보드나 Prometheus 관련 설정들은 굳이 적지 않겠습니다..

[테스트 결과]:RPS 에 따른 서비스 진입점 K6 부하테스트 결과 with Grafana

지표 RPS 10 RPS 20 RPS 40 RPS 60 RPS 80
총 요청 수 (http_reqs) 950 (7.87/s) 1,879 (15.58/s) 3,723 (30.90/s) 5,585 (46.29/s) 7,194 (59.53/s)
로그인 건수 735 1,484 2,969 4,455 5,744
회원가입 건수 195 375 734 1,110 1,430
평균 응답시간 (http_req_duration) 89.45 ms 79.49 ms 87.31 ms 107.50 ms 2.75 s
p95 응답시간 144.90 ms 102.02 ms 131.49 ms 238.17 ms 7.01 s
최대 응답시간 375.93 ms 316.33 ms 380.75 ms 612.80 ms 15.38 s
에러율 (http_req_failed) 0% 0% 0% 0% 0.01%
데이터 수신량 1.3 MB 2.5 MB 5.0 MB 7.5 MB 9.7 MB

이건 위 글에서 측정했었던 테스트 결괏값이고, 이제부터 RPS 를 점차 올려가며 병목 지점과 DB 최적화 포인트를 찾을 것이다.

병목 구간 DB 모니터링

스크린샷 2025-08-15 오후 3.01.28.png

스크린샷 2025-08-15 오후 3.02.46.png

스크린샷 2025-08-15 오후 3.03.39.png