spring boot/actuator in spring boot

spring boot 3.x + actuator 파헤치기. 2. 공식 가이드 페이지, 의존성 라이브러리

Hello World Study 2023. 3. 20. 23:26

https://youtu.be/rmHbRmcRn0g

 

spring 의 장점중 하나는 공식 가이드가 아주 친절하다는 것입니다. 그래서 spring boot actuator 를 공부할때 서적이나 기술블로그를 통해 기본적인 이해와 사용법을 알고 난후에 공식 가이드를 통해 확실히 자기것으로 만드는 순서로 진행하는걸 추천합니다.

 

본 포스팅에서는 중요하거나 자주 사용할 만한 부분을 공식 가이드의 내용을 근거로 해서 샘플을 제작하도록 하겠습니다. 기술 블로그의 단점 중 하나가 "동작 하는건 알겠는데 이게 최선인가?, 내가 아는것과 약간 다른데 이 정보의 출처는 어디인가?" 라는 의문이 생기는건데 공식 가이드를 base 로 작성 및 관련 링크를 넣을 예정이니 믿고 읽어도 됩니다. :)

 

 

spring boot actuator 공식 레퍼런스 주소는 아래와 같습니다. 

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

 

Production-ready Features

You can enable recording of HTTP exchanges by providing a bean of type HttpExchangeRepository in your application’s configuration. For convenience, Spring Boot offers InMemoryHttpExchangeRepository, which, by default, stores the last 100 request-response

docs.spring.io

 

https://spring.io 가 spring 메인 페이지이므로 아래와 같은 방법으로 공식 레퍼런스를 찾아가면 됩니다.

 

자 그럼 이제 공식 가이드를 기준으로 중요한 부분을 확인해보도록 하겠습니다.

 

 

공식 가이드 맨 처음에 아래처럼 의존성을 넣어야 한다고 나옵니다. 

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
</dependencies>

intellij 의 maven 의존성 부분을 보니 아래처럼 spring-boot-starter-actuator 는 내부적으로 micrometer 라이브러리를 사용하고, auto configuration을 위한 라이브러리리(spring-boot-actuator-autoconfigure)를 포함하는걸 알 수 있습니다. 

 

 

핵심 라이브러리인 micrometer-core 의 내용을 살펴보면 아래처럼 spring boot 가 구동되는 application 의 health, info, metric 정보들을 수집하는 역할을 하는 binder 클래스들이 아주 많이 구현되어 있는걸 알수 있습니다.

즉 spring boot 에서 cache를 사용하고 있다면 cache 관련 정보를 수집하는 클래스를 micrometer 라이브러리에서 이미 제공하고 있으며, kafka 를 사용하고 있다면 kafka 관련 정보를 수집하는 클래스를 micrometer 라이브러리에서 이미 제공하고 있습니다. 즉 자주 쓰는 대부분의 기능들에 대해 micrometer 에서 정보를 수집하는 binder 를 이미 제공하고 있습니다.

 

spring boot 는 자동설정을 지원해주기에 아래처럼 spring-boot-actuator-autoconfigure 라이브러리에서 정보를 수집할수 있도록 bean 으로 등록해주고 있습니다.

하나를 예로 들어 설명하면, 

아래처럼 ElasticsearchRestHealthContributorAutoConfiguration 라는 클래스내부에는

HealthContributor 타입의 빈을 등록하는데, 무조건 등록하는게 아니라 org.elasticsearch.client.RestClient 라는 클래스가 존재할때만 ElasticSearch 관련 health 정보를 제공하는 bean을 생성해주도록 되어 있습니다.
@ConditionalOnClass 어노테이션을 통해 특정 클래스가 있을때만 동작하도록 하고 있습니다.

결론적으로 현재 spring boot 프로젝트는 elasticSearch 라이브러리를 넣지 않았으니 elasticSearch 관련 bean은 생성되지 않습니다.

 

그외 @ConditionalOnBean 과 같은 유사한 조건 어노테이션들이 더 설정되어 있으나, 간략한 설명을 위해 간소화시켜 아래에 코드를 넣었습니다. 
import org.elasticsearch.client.RestClient;  <-- spring 패키지가 아님

@ConditionalOnClass(RestClient.class)  <-- elasticSearch 관련 라이브러리의 클래스명
public class ElasticsearchRestHealthContributorAutoConfiguration {

	@Bean
	public HealthContributor elasticsearchHealthContributor(Map<String, RestClient> clients) {
		return createContributor(clients);
	}

}
 
사용되는 라이브러리들이 무엇이고, 각자 어떤 역할을 하는지 대략적으로 알게 되었길 바랍니다.
다음 포스팅부터 상세 항목별로 알아봅시다.

 

설마... 다음페이지는 다음에 봐야지!  하는건 아니죠? 아직 제대로 시작도 안했습니다. 달려요 달려