Java

JMX(Java Management Extensions)와 Spring Actuator

hyuk0309 2026. 1. 12. 22:34

 

Java로 어플리케이션을 개발했다면, 모니터링은 어떻게 할까?

Java에는 어플리케이션 모니터링을 위한 JMX(Java Management Extensions)가 있다.

이번 글에서는 JMX가 어떻게 Java 어플리케이션을 모니터링하는데 도움을 주는지 정리하겠다. 여기에 더해 Spring Actuator가 어떻게 JMX를 사용하고 있는지도 정리하겠다.

 

JMX 정의와 동작 방식

 

JMX는 크게 3가지 컴포넌트로 구성되어 있다.

 

Instrumentation

쉽게 설명하면, 모니터링하고자 하는 리소스에 계측기를 다는 과정이다.

이는 엄청 간단하다, JMX Specification에 따라 MBean을 구현하고, MBean 서버에 등록하면 된다.

 

JMX Agent

JMX Agent는 자원을 직접 제어하고, 자원들을 워녁 관리 애플리케이션에서 사용할 수 있도록 만들어주는 에이전트이다.

JMX Agent는 MBean Server와 Connector/Adapter로 구성되어 있다. MBean Server는 Instrumentation 과정에서 등록한 MBean을 관리하는 서버이다. Connector/Adapter는 외부 클라이언트가 에이전트에 접근할 수 있게 해주는 통신 장치이다.

 

Remote Managment

JMX Agent의 Connector/Adapter 덕분에 원격 클라이언트에서도 Java 어플리케이션의 리소스 상태를 모니터링 할 수 있다.

 

 

쉽게 정리하자면, Java 어플리케이션에서 특정 리소스의 상태를 모니터링 하고 싶다면, 아래 단계를 수행하면 된다.

1. JMX Specification에 맞게 MBean 구현

2. MBean을 MBean 서버에 맞게 구현.

3. 원격 클라이언트를 통해, 리소스 상태 모니터링

 

좀 더 자세한 내용이 궁금하면, Oracle의 Java Management Extensions Trail 을 참고하면 된다. (Oracle JMX API Specification)

 

그럼 실제로 간단한 프로그램을 만들어보자.

 

1, 2 JMX Specification에 맞게 MBean 구현 & MBean 서버에 MBean 등록.

 

JMX 스펙에 맞게 구현하면된다. 자세한 코드는 깃헙 저장소에 있다.

 

3. 원격 클라이언트를 통해 리소스 상태 모니터링.

 

위에서 작성한 코드를 실행한다. (자세한 내용들은 저장소 README.md를 참고하면 알 수 있다.)

그 후 JConsole을 이용해 확인하면, MBean이 등록된걸 확인할 수 있다.

 

 

 

JConsole로 테스트를 하다보면 재밌는게 하나있다. 나는 따로 MBean을 등록하지 않았는데, JVM의 상태들을 모니터링 할 수 있다.

 

 

 

그 비밀은 Java가 알아서, JVM 관련 MBean들을 MBean 서버에 등록하기 때문이다. 이는 디버깅을 통해서도 확인할 수 있다. (참고)

 

 

Sping Actuator

Spring을 이용한 애플리케이션을 모니터링 할때 가장 많이 사용하는 기술은 Spring Actuator다. 

Spring Actuator가 어떻게 동작하는 JMX 관점에서 설명하겠다.

 

Spring Actuator를 이용하면, JMX 또는 Web 방식으로 서버 관련 데이터들을 얻을 수 있다. 어떤 데이터를 얻을 수 있는지는 여기서는 자세히 다루지 않겠다. 공식 문서를 참고하길 바란다.

 

데이터는 크게 2가지 타입으로 나뉜다. 데이터를 요청할때 즉석에서 계산해주는 데이터와 CPU 사용량, 요청 횟수 같은 누적된 값이다. 이때 누적된 값은 MeterRegistry에 저장된다. 

 

그럼 여기서 한 가지 궁금증이 생긴다.

'JVM 관련 데이터는 JMX를 통하면 가져올 수 있는데, 왜 MeterRegistry를 이용하는거지?' 결론만 말하자면, 확장성을 위해서다. MeterRegistry로 데이터 창구를 통합하면, 다양한 모니터링 도구들이 이를 가져다 사용할 수 있다. 대표적인 모니터링 도구로는 Promethus가 있다. 그리고 MeterRegistry는 JVM 관련 데이터를 얻기 위해서 내부적으로 MBean 서버에 접근한다.

 

JvmMemoryMetrics

 

 

 

마무리

이번 글을 통해 자바 애플리케이션 모니터링을 위해 필요한 JMX에 대해 정리해봤다. 추가로, Spring Actuator가 내부적으로 JMX를 어떻게 활용하는지도 알아봤다.