infra/monitoring에 docker-compose.yml + prometheus.yml 추가 → Prometheus, Grafana 컨테이너 실행.
MUSINSSAK/
├─ docker-compose.yml # 코어( MySQL/Redis/Kafka … )
└─ infra/
└─ monitoring/
├─ docker-compose.monitoring.yml
└─ prometheus.yml
| 항목 | 루트에 합치기 (한 파일) | 분리 관리 (별도 파일/경로) |
|---|---|---|
| 온보딩/학습곡선 | 가장 간단: docker compose up -d |
한 번 더 배우지만 금방 익힘(-f 2개) |
| 로컬 리소스/속도 | 항상 모두 올라가 무거울 수 있음 | 필요할 때만 올려서 가볍고 빠름 |
| 협업(역할 분리) | 인프라/모니터링 설정이 뒤섞임 | 관심사 분리, 리뷰·오너십 명확 |
| 문제 격리/디버깅 | 실패 시 영향을 서로 줌 | 모니터링만 내리거나 교체 가능 |
| 환경별 차등 실행 | 어려움(주석 관리 많아짐) | -f 조합/프로필로 유연하게 선택 |
| CI/CD(깃허브 액션) | “항상 같이” 패턴 유도 | 스테이징만 모니터링 포함 등 선택 가능 |
| 확장/스케일링 | 단일 파일 비대해짐 | 파일 단위로 진화·확장 쉬움 |
| 보안/권한 관리 | 하나의 변경으로 영향 큼 | 민감 설정을 파일 단위로 분리 용이 |
# 1) 코어 인프라(기존 compose) 먼저 기동
docker compose up -d
# 2) 모니터링 스택을 override로 추가 기동
docker compose -f docker-compose.yml -f infra/monitoring/docker-compose.monitoring.yml up -d
# 3)상태 확인
docker compose ps
# 4) 모니터링만 내리기
docker compose -f infra/monitoring/docker-compose.monitoring.yml down
# 5) 코어만 내리기
docker compose down
# 참고) 모니터링만 폴더 들어가서 실행
cd infra/monitoring
docker compose up -d
docker compose down
admin / admin)prometheus.yml 필수(앱을 스크레이프하려면). 지우면 앱 지표 Xglobal:
scrape_interval: 5s
scrape_configs:
- job_name: "spring-boot"
metrics_path: "/actuator/prometheus"
static_configs:
- targets: ["host.docker.internal:8080"]
# Windows/Mac Docker Desktop: host.docker.internal
# 리눅스 네이티브 Docker면 172.17.0.1 또는 실제 호스트 IP로 교체
docker-compose.monitoring.yml만으로 컨테이너는 뜸 지표는 안 들어옴services:
prometheus:
image: prom/prometheus:latest
container_name: musinsa-prometheus
volumes:
- ./infra/monitoring/prometheus.yml:/etc/prometheus/prometheus.yml:ro # root경로 기준
# - ./prometheus.yml:/etc/prometheus/prometheus.yml:ro
ports:
- "9090:9090" # Prometheus UI
restart: unless-stopped
grafana:
image: grafana/grafana:latest
container_name: musinsa-grafana
ports:
- "3000:3000" # Grafana UI
environment:
- GF_SECURITY_ADMIN_USER=admin
- GF_SECURITY_ADMIN_PASSWORD=admin
depends_on:
- prometheus
restart: unless-stopped
(2단계에서 지표 수집: 반드시 의존성 추가 + yml 설정(2단계) 필요)
(Actuator + Micrometer + YML + Security)**
build.gradle (루트) — 의존성 추가// 모니터링 관리/지표 엔드포인트 제공
implementation 'org.springframework.boot:spring-boot-starter-actuator'
// 모니터링 Prometheus 포맷 출력
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
application.yml — 관리 엔드포인트 노출# 개발 모니터링 (운영: 서비스는 8080 유지, Actuator만 8081로 분리)
management:
endpoints:
web:
exposure:
include: "health,info,prometheus" # prometheus 꼭 포함
endpoint:
health:
show-details: "always" # 로컬에선 상세 OK (원하면 never로)
metrics:
tags:
application: ${spring.application.name}
prometheus:
metrics:
export:
enabled: true
management:
metrics:
distribution:
percentiles-histogram:
http:
server:
requests: true
히스토그램 활성화 필요: http.server.requests percentiles-histogram ON