1단계 : 모니터링 스택 기동 (분리 관리)

항목 루트에 합치기 (한 파일) 분리 관리 (별도 파일/경로)
온보딩/학습곡선 가장 간단: docker compose up -d 한 번 더 배우지만 금방 익힘(-f 2개)
로컬 리소스/속도 항상 모두 올라가 무거울 수 있음 필요할 때만 올려서 가볍고 빠름
협업(역할 분리) 인프라/모니터링 설정이 뒤섞임 관심사 분리, 리뷰·오너십 명확
문제 격리/디버깅 실패 시 영향을 서로 줌 모니터링만 내리거나 교체 가능
환경별 차등 실행 어려움(주석 관리 많아짐) -f 조합/프로필로 유연하게 선택
CI/CD(깃허브 액션) “항상 같이” 패턴 유도 스테이징만 모니터링 포함 등 선택 가능
확장/스케일링 단일 파일 비대해짐 파일 단위로 진화·확장 쉬움
보안/권한 관리 하나의 변경으로 영향 큼 민감 설정을 파일 단위로 분리 용이

실행 명령어 (PowerShell / CMD 동일) : 코어는 필수, 모니터링은 선택

# 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

접속 URL

global:
  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로 교체
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단계) 필요)

**2단계 : Spring Boot 계측 활성화

(Actuator + Micrometer + YML + Security)**

  1. build.gradle (루트) — 의존성 추가
// 모니터링 관리/지표 엔드포인트 제공
implementation 'org.springframework.boot:spring-boot-starter-actuator'

// 모니터링 Prometheus 포맷 출력
runtimeOnly 'io.micrometer:micrometer-registry-prometheus'
  1. 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