OPEN HYPER STEP
← 목록으로 (Java+Spring)
JAVA · 88 / 99
java
CHAPTER 88 / 99
읽기 약 2
FUNCTION

모니터링: Actuator + Prometheus


핵심 개념

Spring Boot Actuator·Prometheus 메트릭·Grafana 대시보드 — 서버 상태 모니터링.

본문

Actuator 의존성

GRADLE📋 코드 (2줄)
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus'

application.yml

YAML📋 코드 (19줄)
management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus,env
      base-path: /actuator
  endpoint:
    health:
      show-details: when-authorized
      probes:
        enabled: true
  metrics:
    tags:
      application: ${spring.application.name}
      env: ${spring.profiles.active}
  prometheus:
    metrics:
      export:
        enabled: true

기본 엔드포인트

BASH📋 코드 (17줄)
GET /actuator/health
{"status": "UP"}

GET /actuator/health/liveness
GET /actuator/health/readiness

GET /actuator/metrics
{"names": ["jvm.memory.used", "http.server.requests", ...]}

GET /actuator/metrics/jvm.memory.used
{"name": "jvm.memory.used", "measurements": [...]}

GET /actuator/prometheus
# Prometheus exposition 형식
# HELP jvm_memory_used_bytes ...
# TYPE jvm_memory_used_bytes gauge
jvm_memory_used_bytes{area="heap"} 123456789

커스텀 헬스 체크

JAVA📋 코드 (44줄)
@Component
@RequiredArgsConstructor
public class DatabaseHealthIndicator implements HealthIndicator {
    private final DataSource dataSource;

    @Override
    public Health health() {
        try (Connection conn = dataSource.getConnection()) {
            try (Statement stmt = conn.createStatement();
                 ResultSet rs = stmt.executeQuery("SELECT 1")) {
                if (rs.next()) {
                    return Health.up()
                        .withDetail("database", "PostgreSQL")
                        .build();
                }
            }
        } catch (SQLException e) {
            return Health.down(e).build();
        }
        return Health.unknown().build();
    }
}


@Component
@RequiredArgsConstructor
public class ExternalApiHealthIndicator implements HealthIndicator {
    private final RestTemplate restTemplate;

    @Override
    public Health health() {
        try {
            ResponseEntity<String> response = restTemplate.getForEntity(
                "https://api.example.com/health", String.class
            );
            if (response.getStatusCode().is2xxSuccessful()) {
                return Health.up().build();
            }
        } catch (Exception e) {
            return Health.down(e).build();
        }
        return Health.down().build();
    }
}

커스텀 메트릭

JAVA📋 코드 (38줄)
@Component
@RequiredArgsConstructor
public class OrderMetrics {
    private final MeterRegistry registry;

    private Counter orderCount;
    private Timer orderDuration;

    @PostConstruct
    void init() {
        orderCount = Counter.builder("orders.total")
            .description("총 주문 수")
            .tag("service", "order")
            .register(registry);

        orderDuration = Timer.builder("orders.duration")
            .description("주문 처리 시간")
            .register(registry);
    }

    public void recordOrder(String status) {
        orderCount.increment();
    }

    public <T> T timeOrderProcess(Supplier<T> action) {
        return orderDuration.record(action);
    }
}


@Service
public class OrderService {

    @Timed(value = "orders.processing", description = "주문 처리")
    public Order placeOrder(OrderRequest req) {
        // ... 자동으로 메트릭 기록
    }
}

Prometheus 설정

YAML📋 코드 (7줄)
# prometheus.yml
scrape_configs:
  - job_name: 'spring-boot'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 15s
    static_configs:
      - targets: ['app:8080']

Grafana 대시보드

📋 코드 (7줄)
주요 패널:
- JVM Memory (heap/non-heap)
- HTTP requests rate by status (200/400/500)
- HTTP request duration P50/P95/P99
- DB connection pool (active/idle)
- Custom: orders/min, error rate
- Cache hit rate

다음 챕터

CH.20 "CI/CD: GitHub Actions + Docker" — PR → 자동 배포.


AI 프롬프트
🤖 AI에게 잘 물어보는 법 — 모델·전략별 프롬프트
Claude

무료: Sonnet 4.6 / Pro $20/mo: Opus 4.6

내 Spring 코드의 Actuator + Prometheus 부분을 분석해서
메트릭 설계·알람와 개선 우선순위를 알려줘.
ChatGPT

무료: GPT-5.5 / Plus $20/mo: GPT-5.5 Pro

Actuator + Prometheus vs 다른 패턴 비교를
실전 사례 5개로 보여주고 Prometheus vs DataDog vs NewRelic를 알려줘.
Gemini

무료: 2.5 Flash / Pro $19.99/mo: 3.1 Pro

내 코드베이스 전체를 분석해서
Actuator + Prometheus 관련 미모니터링 영역를 보고해줘.
Grok

무료: Grok 4.1 / SuperGrok $30/mo

2026년 한국 기업의 Actuator + Prometheus 채택률과
한국 SaaS 모니터링 스택를 솔직히 알려줘.

⭐ 이것만 기억하세요
모니터링: Actuator + Prometheus 이 3가지만 확실히 잡으세요
1.Actuator + Micrometer + Prometheus + Grafana = 표준 Spring 모니터링 스택
2.커스텀 헬스 + 메트릭으로 비즈니스 KPI 추적 (주문/결제/사용자)
3.다음 챕터 CH.20에서 CI/CD — 자동 배포 파이프라인


공유하기
진행도 88 / 99