Actuator란 무엇인가?
Actuator란 Spring Boot에서 제공하는 애플리케이션 모니터링 및 관리 기능으로, Spring 애플리케이션의 Health를 체크하거나, Bean 목록을 확인하거나, 각 패키지의 로그 레벨이 어떻게 설정돼 있는지 확인하거나, Heap Dump를 제공하는 등 수십가지 기능을 제공하는 모니터링 툴이다.
Actuator 사용하기
Actuator을 사용하는 방법은 매우 간단하다. 단순히 build.gradle.kts 파일에 spring-boot-starter-actuator에 대한 의존성을 추가하면 된다. 그러면, Actuator 관련 기능이 활성화 된다.
dependencies {
implementation("org.springframework.boot:spring-boot-starter-actuator")
...
}
이것을 추가하고, 애플리케이션을 실행해보자. 이후 localhost:8080/actuator 에 접속하면 다음과 같은 화면이 나온다.
여기서 "health", "health-path"는 Actuator에서 제공하는 기능이며, href로 표현된 링크로 이동하면 해당 기능을 사용할 수 있다. 예를 들어 health를 확인하기 위해서는 http://localhost:8080/actuator/health로 이동하면 된다.
그러면 다음과 같이 "status": "UP" 이라는 문구가 나오고, 이는 서버가 살아있다 라는 뜻이다.
하지만, 서버가 살아있다 정도로는 정보가 충분하지 않으므로, 더 자세한 정보를 보는 방법을 알아보자.
Spring Actuator은 여러 지표를 수집할 수 있지만, 별도 옵션을 적용하지 않으면 기본적으로 최소한의 정보만을 수집한다. 더욱 많은 정보를 수집할 수록 애플리케이션에 부담이 가고, 심하게는 보안 문제가 생길 수 있기 때문이다. 따라서 필요한 경우 정보를 수집하기 위한 옵션을 application.properties 파일에 별도로 정의해줘야 한다.
health와 관련된 더 자세한 정보를 수집하기 위해서는 application.properties 파일에 다음과 같은 옵션을 추가하면 된다.
management.endpoint.health.show-details=always
그런 후 애플리케이션을 다시 실행하고 http://localhost:8080/actuator/health 를 확인하면 다음과 같이 더욱 자세한 정보가 나오는 것을 볼 수 있게 된다.
Actuator의 다른 기능들 살펴보기
앞서 Actuator에는 수십가지 기능이 있다고 했는데, 이곳에는 한 가지 기능밖에 없었다. Actuator의 다른 기능들을 살펴보기 위해서는 필요한 application.properties 파일에 보이도록 설정해야 한다.
예를 들어 생성된 bean 정보(beans), 패키지별 로그 레벨 정보(loggers), 지표 정보(metric) 를 확인하기 위해서는 다음과 같은 옵션을 application.properties에 추가하면 된다.
management.endpoints.web.exposure.include=beans,loggers,metrics
그러면 다시 /actuator 경로로 접근했을 때 다음과 같이 bean 정보(beans), 패키지별 로그 레벨 정보(loggers), 지표 정보(metric)이 추가로 나오게 된다.
여기서 http://localhost:8080/actuator/loggers로 들어가 보면 다음과 같이 각 패키지별로 로그 레벨이 어떻게 설정돼 있는지 볼 수 있다.
Actuator의 모든 기능 노출하는 방법과 주의점
Actuator의 모든 기능을 살펴보기 위해서는 application.properties 파일에 management.endpoints.web.exposure.include=* 옵션을 추가하면 된다.
management.endpoints.web.exposure.include=*
하지만, 위 옵션을 실제 서비스 되는 애플리케이션에 적용하는 것은 권장되지 않는다. 성능 상에도 문제가 있고 무엇보다 노출되면 안되는 Key가 노출돼 보안 문제가 생길 수 있기 때문이다.
즉, Actuator을 사용할 때는 모든 기능을 차단해두고 필요한 기능만을 추가하는 화이트리스트 방식으로 해야 한다.
전체 코드: GitHub
이 프로젝트가 도움이 되셨다면 저장소에 Star⭐️를 눌러주세요! Stargazers는 다음 페이지에서 확인할 수 있습니다.