Actuator

반응형

k6를 통해 부하 테스트와 API 테스트를 진행하면서 한 가지 한계를 느꼈습니다.
요청을 보내고 결과를 확인하는 것은 가능했지만, 실제로 부하가 걸리는 동안 애플리케이션 내부에서 어떤 변화가 일어나는지 화면으로 확인하기는 어렵다는 점입니다. 그래서 자연스럽게 이런 생각이 들었습니다. 부하가 걸리는 상황을 시각적으로 모니터링할 수 있다면 더 좋지 않을까? 이럴 때 떠올릴 수 있는 대표적인 도구가 바로 Grafana입니다. Grafana는 메트릭 데이터를 시각화하여 시스템 상태를 한눈에 확인할 수 있게 도와줍니다. 그런데 Grafana가 사용하려면 먼저 애플리케이션이 자신의 상태 정보를 외부로 제공할 수 있어야 합니다. Spring Boot에서는 이를 위해 Actuator를 사용할 수 있습니다. Actuator는 애플리케이션의 상태, 메트릭, 헬스 체크 정보 등을 외부에 노출해주는 기능이며, 이러한 정보들은 모니터링 도구와 연동하는 데 활용됩니다. 이번 기회에 Actuator가 무엇이고, 왜 사용하는지, 그리고 어떤 정보를 제공하는지 학습해보겠습니다.

Actuator란 무엇일까?

Actulator는 Spring boot 애플리케이션의 운영 상태를 외부에서 확인하고 관리할 수 있도록 정보를 제공하는 기능입니다. 애플리케이션이 실행되는 동안 내부에서 발생하는 다양한 정보들을 HTTP endpoint 형태로 노출하여, 개발자나 운영 환경에서 이를 확인 할 수 있도록 도와줍니다.

제일 먼저 그레들에 Actulator를 등록합니다. 

implementation 'org.springframework.boot:spring-boot-starter-actuator'

그렇다면, 어떠한 정보들을 HTTP endPoint형태로 제공할까요?

확인을 해보니 Rest형식으로 제공하고 있는것을 확인 할 수 있었습니다. 눈에 띄이는것은 health부분입니다.
들어가서 확인을 해봅시다. 

다행히 상태가 UP으로 되어 있네요. 참고로 link에 group을 path로 사용할 수 있습니다.

그 이유는 Actuator가 기본값만 노출하고 있는 상태입니다. 그래서 /actuator에 들어가면 health 관련 링크만 보이는 것입니다.
다른 endpoint는 열어두지않는 상태입니다. 찾아보니 보안상 문제로 많은 endpoint들을 오픈하지 않는다고 합니다.
그렇다면, 다른 endpoint들도 확인을 하려면 어떻게 해야 할까요?

 

Endpoints :: Spring Boot

If you add a @Bean annotated with @Endpoint, any methods annotated with @ReadOperation, @WriteOperation, or @DeleteOperation are automatically exposed over JMX and, in a web application, over HTTP as well. Endpoints can be exposed over HTTP by using Jersey

docs.spring.io

이 문서를 보면 확인할 수 있습니다.

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus

요렇게 지정하면, health, info, metrics,prometheus가 노출됩니다.
만약 include를 *로 지정한다면 모든 endpoint를 열 수 있습니다.

Actuator를 통해 다양한 정보를 endpoint 형태로 제공할 수 있다는 것을 확인할 수 있습니다.
또한 일반적인 endpoint 외에도 특수한 목적을 가진 endpoint들이 존재합니다.

대표적으로 다음과 같은 endpoint가 있습니다.

  • heapdump : JVM Heap Dump 파일을 제공합니다.
  • logfile : 애플리케이션 로그 파일의 내용을 확인할 수 있습니다.
  • prometheus : Prometheus 서버가 수집할 수 있는 형식으로 메트릭을 노출합니다.

각 endpoint는 동작에 필요한 조건이 충족되어야 하며, 조건이 맞지 않는 경우에는 endpoint 자체가 생성되지 않을 수도 있습니다.
참고로 prometheus는 의존성을 추가해야 합니다.

implementation 'io.micrometer:micrometer-registry-prometheus'

이제 실제로 테스트를 진행해봅시다.

management:
  endpoints:
    web:
      exposure:
        include: health,info,metrics,prometheus

저는 이렇게 4개를 등록해보겠습니다. 현재 상태에서는 prometheus의 의존성이 추가가 되지 않았기 때문에 앞에 3개만 endpoint로 사용할 수 있습니다.

그래서 Actuator를 이용해서 무엇을 할 수 있는데?

Actuator를 사용하면 애플리케이션의 현재 상태를 확인할 수 있으며, 추후에는 메트릭 정보를 수집하고 모니터링하는 용도로 활용할 수 있습니다. 예를 들어 health endpoint를 통해 애플리케이션이 정상적으로 동작하고 있는지 확인할 수 있고, metrics나 prometheus endpoint를 통해 JVM 메모리 사용량, HTTP 요청 수와 같은 다양한 메트릭 정보를 확인할 수 있습니다. 이러한 정보들은 Prometheus와 같은 모니터링 시스템이 수집하여 Grafana와 같은 도구를 통해 시각적으로 확인할 수 있습니다.

결론

간단하게 Actuator가 어떤 것인지 알아보았습니다. Actuator를 사용하면 현재 애플리케이션의 상태를 확인할 수 있으며, 추후에는 다양한 메트릭 정보를 확인하는 데 활용할 수 있다는 점을 알 수 있었습니다. 또한 운영 환경에서는 보안 문제로 인해 모든 endpoint를 외부에 노출하지 않고, Actuator 포트를 분리하거나 내부 네트워크에서만 접근할 수 있도록 구성하여 관리한다고 합니다. 다만 이 부분은 아직 직접 구성해보지는 않아 자세하게는 알지 못했습니다. 추후에는 Actuator를 통해 수집한 메트릭 정보를 Prometheus와 Grafana와 연동하여 모니터링 환경을 구성해보는 것도 좋을 것 같습니다.

반응형

'개발' 카테고리의 다른 글

문제 발견: LazyConnectionDataSourceProxy 톺아보기  (1) 2026.03.13
Actuator 메트릭 생성 하기  (0) 2026.03.11
OpenAI는 어떻게 PostgreSQL을 스케일했을까  (0) 2026.03.10
프록시 JDBC(2)  (0) 2026.03.09
프록시 JDBC(1)  (0) 2026.03.08

댓글

Designed by JB FACTORY