![[Spring Boot 핵심원리와 활용] 액츄에이터(Actuator)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnbLis%2FbtsNSaApJzn%2F95wHVgwV5BTx21SRo8Qkd0%2Fimg.png)
이 글은 인프런 김영한님의 Spring 강의를 바탕으로 개인적인 정리를 위해 작성한 글입니다.
액츄에이터를 사용하려면 스프링부트 의존성에 다음과 같이 추가해야한다.
build.gradle
dependencies { implementation 'org.springframework.boot:spring-boot-starter- actuator' // actuator 추가 } |
의존성을 추가하고 /actuator 경로로 접근하면 액츄에이터에 접근할 수 있다.
- http://localhost:8080/actuator
액츄에이터의 모든 기능을 웹에 노출하려면 application.yml에 아래와 같이 작성하면 된다.
application.yml
management: endpoints: web: exposure: include: "*" |
각각의 엔드포인트는 /actuator/{엔드포인트명} 과 같은 형식으로 접근할 수 있다.
- http://localhost:8080/actuator/health : 애플리케이션 헬스 정보를 보여준다.
- http://localhost:8080/actuator/beans : 스프링 컨테이너에 등록된 빈을 보여준다.
보안 주의
망 분리
액츄에이터가 제공하는 기능들은 우리 애플리케이션의 내부 정보를 너무 많이 노출한다.
그래서 외부 인터넷 망이 공개 된 곳에 액츄에이터의 엔드포인트를 공개하는 것은 보안상 좋은 방안이 아니다.
액츄에이터의 엔드포인트들은 외부 인터넷에서 접근이 불가능하게 막고, 내부에서만 접근 가능한 내부망을 사용하는 것 이 안전하다.
다른 포트에서 실행
예를 들어서 외부 인터넷 망을 통해서 8080 포트에만 접근할 수 있고, 다른 포트는 내부망에서만 접근할 수 있다면 액츄에이터에 다른 포트를 설정하면 된다.
액츄에이터의 기능을 애플리케이션 서버와는 다른 포트에서 실행하려면 다음과 같이 설정하면 된다.
이 경우 기존 8080 포트에서는 액츄에이터를 접근할 수 없다.
액츄에이터 포트 설정 : management.server.port=9292
인증 설정
포트를 분리하는 것이 어렵고 어쩔 수 없이 외부 인터넷 망을 통해서 접근해야 한다면 /actuator 경로에 서블릿 필터, 또는 스프링 시큐티리를 통해서 인증된 사용자만 접근 가능하도록 추가 개발이 필요하다.
엔드포인트 설정
엔드포인트를 사용하려면 아래 2가지 과정이 모두 필요하다.
- 엔드포인트 활성화 : 해당 기능 자체를 사용할지 말지 on , off 를 선택하는 것
- 엔드포인트 노출 : 활성화된 엔드포인트를 HTTP에 노출할지 아니면 JMX에 노출할지 선택하는 것
엔드포인트 활성화 + 엔드포인트 노출이 둘다 적용되어야 사용할 수 있다.
엔드포인트는 대부분 기본으로 활성화 되어 있다.(shutdown 제외) 노출이 되어 있지 않을 뿐이다.
따라서 어떤 엔드포인트를 노출할지 선택하면 된다. HTTP와 JMX를 선택할 수 있는데, JMX는 잘 사용하지 않으므로 HTTP에 어떤 엔드포인트를 노출할지 선택하면 된다.
엔드포인트 활성화
위에서 말했지만 엔드포인트는 대부분 기본으로 활성화 되어 있다.(shutdown 제외) 노출이 되어 있지 않을 뿐이다.
application.yml
management: endpoints: web: exposure: include: "*" |
위 설정은 모든 엔드포인트를 웹에 노출하는 것이다.
특정 엔드포인트를 활성화 하려면 management.endpoint.{엔드포인트명}.enabled=true 를 적용하면 된다.
application.yml(shutdown 엔드포인트 활성화)
management: endpoint: shutdown: enabled: true endpoints: web: exposure: include: "*" |
Postman을 사용해서 HTTP POST로 http://localhost:8080/actuator/shutdown 를 호출하면 다음 메시지와 함께 실제 서버가 종료되는 것을 확인할 수 있다.
{"message": "Shutting down, bye..."} |
이 기능은 주의해서 사용해야 한다. 그래서 기본으로 비활성화 되어 있다.
엔드포인트 노출
application.yml
management: endpoints: web: exposure: include: "*" exclude: "env,beans" |
위 설정은 web 에 모든 엔드포인트를 노출하지만 env , beans 는 제외한다.
엔드포인트 목록
- beans : 스프링 컨테이너에 등록된 스프링 빈을 보여준다.
- conditions : condition을 통해서 빈을 등록할 때 평가 조건과 일치하거나 일치하지 않는 이유를 보여준다.
- configprops : @ConfigurationProperties를 보여준다.
- env : Environment 정보를 보여준다.
- health : 애플리케이션 헬스 정보를 보여준다.
- httpexchanges : HTTP 호출 응답 정보를 보여준다. HttpExchangeRepository를 구현한 빈을 별도로 등록해야 한다.
- info : 애플리케이션 정보를 보여준다.
- loggers : 애플리케이션 로거 설정을 보여주고 변경도 할 수 있다.
- metrics : 애플리케이션의 메트릭 정보를 보여준다.
- mappings : @RequestMapping 정보를 보여준다.
- threaddump : 쓰레드 덤프를 실행해서 보여준다.
- shutdown : 애플리케이션을 종료한다. 이 기능은 기본으로 비활성화되어 있다.
전체 엔드포인트는 아래의 공식 메뉴얼을 참고하면 된다.
https://docs.spring.io/spring-boot/reference/actuator/endpoints.html#actuator.endpoints
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
엔드포인트 경로 변경
- 엔드포인트의 기본 경로는 /actuator 지만 변경할 수 있다.
- 아래와 같이 설정하면 된다.
application.yml
management: endpoints: web: base-path: "/manage" |
'Back-End > Spring' 카테고리의 다른 글
[Spring Boot 핵심원리와 활용] 사용자 정의 메트릭 (0) | 2025.05.11 |
---|---|
[Spring Boot 핵심원리와 활용] 마이크로미터, 프로메테우스, 그라파나 (0) | 2025.05.10 |
[Spring Boot 핵심 원리와 활용] 외부 설정 (0) | 2025.05.03 |
[Spring Boot 핵심 원리와 활용] 자동 구성 라이브러리 제작 및 사용 (0) | 2025.05.02 |
[스프링 핵심원리 - 고급] 스프링 AOP 실무 주의사항 (0) | 2025.04.27 |