Backend/Spring(활용)

Spring Boot Actuator - 프로덕션 환경 준비 : 모니터링 시각화를 위한 첫 단계

개발자-제이 2025. 5. 14. 09:46

참고용 소스코드

https://github.com/namic123/Spring-Monitoring-Dev-Notes/tree/master/spring-actuator

1. 프로덕션 준비 기능이란?

프로덕션 준비 기능이란, 단순히 애플리케이션을 개발해서 실행하는 수준을 넘어, 실제 운영 환경에서 시스템이 안정적으로 동작하고 있는지를 관찰하고 통제할 수 있게 해주는 기능들을 말한다. 예를 들어, 현재 서비스가 정상적으로 실행 중인지, 시스템 자원이 과다하게 소모되지는 않는지, 로그 레벨은 적절한지 등을 지속적으로 확인할 수 있어야 한다. (즉, 모니터링) 

운영 환경에서 문제가 발생했을 때 이를 실시간으로 감지하고 신속히 대응할 수 있도록, 다음과 같은 기능들이 필요하다.

기능명 설명
Metric (지표) CPU, 메모리, DB 커넥션 등 수치를 실시간 수집
Trace (추적) HTTP 요청, 로직 흐름 등을 따라가며 병목 탐지
Audit (감사) 설정 변경, 인증 실패 등 주요 이벤트 기록
Health Check 애플리케이션의 정상 동작 여부를 진단
Log Monitoring 로그 전송 상태와 로그 레벨 조정 기능

Spring Boot Actuator

Spring Boot는 spring-boot-starter-actuator라는 모듈을 통해, 위에서 언급한 프로덕션 준비 기능을 간단한 설정만으로 바로 적용할 수 있도록 제공한다.

주요 기능

  • /actuator/health: 애플리케이션 헬스 체크
  • /actuator/metrics: 메트릭 데이터 확인 (예: JVM, HTTP 요청 수 등)
  • /actuator/loggers: 로그 레벨 변경
  • /actuator/beans: 등록된 빈 목록 확인
  • /actuator/env: 환경변수 값 확인

 

2. Spring Boot Actuator 도입 및 설정

액추에이터 시작: 운영 환경 준비의 첫걸음

서비스를 실제 운영 환경에 배포하면 단순히 기능이 잘 작동하는지 여부만으로는 충분하지 않다. 서버가 정상적으로 작동 중인지, 내부 자원은 어떤 상태인지, 애플리케이션에 등록된 빈은 무엇이 있는지 등을 수시로 점검해야 한다. 이때, Spring Boot는 이를 위한 전용 기능으로 Actuator(액추에이터) 를 제공한다.

액추에이터 기능을 사용하기 위해서는 다음과 같은 의존성을 build.gradle에 추가해야 한다.

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

프로젝트 실행 후, http://localhost:8080/actuator 로 접속하면 기본적으로 health 엔드포인트가 노출된다.

기본적으로 노출되는 엔드포인트는 health 뿐이다. http://localhost:8080/actuator/health 로 접근하면 아래와 같은 응답이 출력된다.

이는 애플리케이션이 현재 정상 작동 중임을 의미한다.

더 많은 엔드포인트 노출하기

Actuator는 매우 다양한 기능을 제공하지만, 기본적으로는 health와 info만 외부에 노출된다. 모든 엔드포인트를 웹에서 확인하고자 한다면 application.yml 파일에 아래와 같은 설정을 추가해야 한다:

management:
  endpoints:
    web:
      exposure:
        include: "*"

이 설정은 Actuator의 모든 엔드포인트를 외부에 노출하겠다는 의미이다. 보안상 민감한 정보가 포함될 수 있으므로, 실무에서는 필요한 항목만 선별적으로 노출하는 방식이 권장된다.

전체 엔드포인트 확인

설정 이후 다시 http://localhost:8080/actuator 로 접속해보면 앞서 출력된 결과와 다르게 아래와 같이 수많은 엔드포인트가 나타난다.

  • /actuator/health: 애플리케이션 상태 확인
  • /actuator/beans: 스프링 빈 정보 확인
  • /actuator/env: 환경 변수 조회
  • /actuator/metrics: 애플리케이션 메트릭 정보
  • /actuator/loggers: 로그 레벨 확인 및 변경
  • /actuator/mappings: 등록된 RequestMapping 정보
  • /actuator/scheduledtasks: 예약 작업 목록
  • /actuator/heapdump: 힙 메모리 덤프 (JVM 메모리 상태)
  • /actuator/threaddump: 스레드 상태 덤프

 

3. 엔드포인트 노출 설정 원칙

Actuator 엔드포인트 설정의 원칙

Actuator는 여러 가지 운영 지표를 엔드포인트로 제공하지만, 이들 엔드포인트를 사용하기 위해서는 두 가지 설정 조건이 동시에 충족되어야 한다.

1. 엔드포인트 활성화 (Enabled)

  • 엔드포인트 자체의 기능을 켜거나 끄는 설정이다.
  • 예: shutdown과 같이 기본적으로 꺼져 있는 엔드포인트도 존재한다.

2. 엔드포인트 노출 (Exposure)

  • 활성화된 엔드포인트를 어떤 채널에 노출할지 설정한다.
    • 주로 사용되는 채널은 web(HTTP)과 jmx이다.
  • 노출 설정이 없으면, 기본적으로 거의 모든 엔드포인트는 보이지 않는다.

 

모든 엔드포인트를 웹에 노출하는 예

management:
  endpoints:
    web:
      exposure:
        include: "*"

 

  • *는 모든 엔드포인트를 HTTP로 노출하라는 의미다.
  • 하지만, 기본적으로 비활성화된 엔드포인트는 여전히 노출되지 않는다.
    • 대표적으로 shutdown이 이에 해당된다.

shutdown 엔드포인트 활성화 및 노출

management:
  endpoint:
    shutdown:
      enabled: true
  endpoints:
    web:
      exposure:
        include: "*"

 

  • shutdown 엔드포인트는 서버를 종료할 수 있는 기능이다.

실행 및 테스트

  • POSTMAN과 같은 테스트로 다음 경로로 요청을 보낸다.
  • POST http://localhost:8080/actuator/shutdown

단, GET 요청으로는 동작하지 않으며, 반드시 POST 방식이어야 한다.

이 기능은 매우 위험할 수 있기 때문에 기본적으로는 꺼져 있으며, 운영 환경에서는 실수 방지를 위해 보안 설정과 함께 제한적으로 사용하는 것이 원칙이다.

일부 엔드포인트만 노출하기

예를 들어, env와 beans를 제외한 나머지만 노출하고자 할 경우 아래와 같이 설정할 수 있다.

management:
  endpoints:
    web:
      exposure:
        include: "*"
        exclude: "env,beans"

 

  • include: *로 전부 노출
  • exclude: "env,beans"로 민감한 정보는 제외

JMX에 특정 엔드포인트만 노출

management:
  endpoints:
    jmx:
      exposure:
        include: "health,info"

 

JMX는 Java Management Extensions의 약자로, 자바 애플리케이션의 실행 중 상태를 모니터링하고 제어할 수 있게 해주는 표준 관리 프레임워크다. 이 기능은 JVM에 내장되어 있으며, 시스템 자원이나 사용자 정의 자바 객체를 MBean(Management Bean)이라는 형태로 관리 대상 객체로 노출하고, 외부에서 이를 조회하거나 제어할 수 있도록 해준다.

Spring Boot Actuator는 내부적으로 대부분의 기능을 HTTP 엔드포인트와 JMX 엔드포인트 두 방식으로 모두 제공한다. 하지만 기본적으로 JMX는 비활성화되지 않고 켜져 있으며, HTTP는 일부 엔드포인트만 노출되는 구조다.

그러나, 최근에 JMX 엔드포인트 방식은 실무에서 잘 활용되지 않는다고 하며, 자세한 설명은 생략한다.

 

4. 마무리 및 요약

Spring Boot Actuator는 단순한 개발 도구가 아니라, 운영 환경에서의 생존력을 보장해주는 핵심 구성요소다. health, metrics, loggers 같은 기능을 통해 개발자는 애플리케이션의 상태를 실시간으로 관찰할 수 있고, Prometheus, Grafana와 연동하면 대시보드 기반의 시각화까지 가능해진다.

스프링 부트에서 제공하는 전체 엔드포인트 목록과 자세한 설명은 아래 공식 문서를 통해 확인할 수 있다.

https://docs.spring.io/spring-boot/reference/actuator/endpoints.html#actuator.endpoints

반응형