k6로 부하테스트를 진행 할 예정입니다.
이를 위해서
Prometheus로 서버 상태를 수집하고
Grafana를 이를 시각화하여 모니터링합니다.
먼저 Docker로 Prometheus를 설치합니다.
데이터를 수집하려면 백엔드에서 스프링부트 액추에이터에서 /prometheus를 열어야 합니다.
변경한 파일
build.gradle
- spring-boot-starter-actuator 추가
- micrometer-registry-prometheus 추가
application.yml에서 스프링부트 액추에이터 엔드포인트 개방

- health
- 앱 상태 확인용 (/actuator/health)
- 서버 살아있는지 체크할 때 사용
- info
- 앱 정보 노출용 (/actuator/info)
- 버전/설명 같은 메타 정보(설정했을 때)
- prometheus
- Prometheus 수집용 메트릭 (/actuator/prometheus)
- Grafana 시각화의 원천 데이터
observability/prometheus.yml 추가

- backend:8080의 /actuator/prometheus를 5초 간격으로 스크랩
docker-compose.yml

- prometheus 서비스 추가
- 포트 9090:9090 오픈
prometheus와 backend 연결 확인


다음으로 Grafana를 설치, Prometheus와 연동합니다.
docker-compose.yml

- grafana 서비스 추가
- 포트 3005:3000 (프론트와 충돌 피함)
- Prometheus 실행 순서 의존 설정 (depends_on)
- 프로비저닝 마운트 + grafana-data 볼륨 추가
observability/grafana/provisioning/datasources/datasource.yml

- Grafana 시작 시 Prometheus(http://prometheus:9090)를 기본 데이터소스로 자동 등록
Grafana와 Prometheus 연동 확인

처음에는 대시보드가 비어있는 상태입니다. 템플릿을 추가해보겠습니다.

JVM Micrometer 템플릿을 import 하겠습니다.

url을 복사해서 import하여 대시보드를 불러왔습니다.

현재 패널:
- HTTP Rate / Errors / Duration
- API 트래픽량, 에러율, 지연시간(보통 p95/p99)을 보는 핵심 패널
- JVM Heap / Non-Heap
- 메모리 사용 추이, 누수 의심 여부 확인
- GC (Pause / Allocation / Promotion)
- GC 때문에 응답시간 튀는지 확인
- CPU / Load / Threads
- 서버 리소스 압박 상황 확인
- Hikari/DB connection 관련
- DB 커넥션 풀 병목 확인
현재 대시보드에서는 서버의 전체적인 성능을 확인할 수 있습니다.
특정 api 성능을 분석하기 위해선 커스텀 패널을 추가해야 합니다.
커스텀 패널은 Prometheus Query(PromQL)을 통해 작성합니다.
1000 *
sum(rate(http_server_requests_seconds_sum{uri="/api/products",method="GET"}[1m]))
/
clamp_min(sum(rate(http_server_requests_seconds_count{uri="/api/products",method="GET"}[1m])), 1e-9)

먼저 search api 에 대한 평균 latency 그래프 패널을 추가 해봤습니다.
이후 search에 대한 최적화 및 부하테스트를 진행하면서
검색과 주문에 대한 p99/p95, ErrorRate, RPS, TPS 등을 확인하기 위한 패널을 추가해야 합니다.
만약 docker에서 마이그레이션 문제로 volume을 삭제한다면 grafana의 dashboard 데이터도 삭제됩니다.
따라서 저는 dashboard json파일을 export해서 저장했습니다.
'백엔드 엔지니어링 일지' 카테고리의 다른 글
| 마켓 백엔드 엔진 8 : 검색 쿼리 튜닝 (EXPLAIN ANALYZE, Index, Page, Slice) (0) | 2026.05.03 |
|---|---|
| 마켓 백엔드 엔진 6 : QueryDSL로 동적 쿼리 적용 (0) | 2026.04.27 |
| 마켓 백엔드 엔진 5 : product DB 구체화, 대용량 더미 데이터 생성, 검색 기능 개발 (0) | 2026.04.24 |
| 마켓 백엔드 엔진 4 : Next.js 프론트 생성, Docker Compose로 통합 배포, 더미 데이터 생성 (0) | 2026.04.23 |
| 마켓 백엔드 엔진 3 : flyway, JPA, CRUD API, Swagger, Filter (0) | 2026.04.22 |