[Spring Boot] Spring Cloud Config(3) Actuator refresh - MSA(6)

모지리 개발자·2022년 9월 27일
0

MSA

목록 보기
8/9

Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
를 수강하면서 작성한 글입니다.

Intro


제가 지금까지 작성한 코드는 user service가 실행이 될 때 spring cloud config server로 부터 설정 정보를 가져와 애플리케이션을 실행했었습니다. 그리고 spring cloud config server는 ecommerce.yml로부터 설정 정보를 가져와서 다른 서비스에 설정값을 제공했습니다.
중간에 ecommerce.yml 파일의 값이 변경된다면 user service를 재가동해야만 반영이 변경된 설정값이 반영이 되는 불편함이 있었습니다.

이를 해결하기 위해서는
1. Actuator
2. Spring cloud bus
방법이 있습니다. 이글에서는 Actuator에 대해 작성해보겠습니다.

Spring Actuator란?

Actuator 공식문서에 의하면

  • 애플리케이션을 모니터링하고 관리하는데 도움이 되는 여러기능이 추가되어있다.
  • HTTP endpoint를 사용하거나 JMX를 사용하여 애플리케이션을 관리하고 모니터링하도록 선택할 수 있다.
  • 감사, 상태 및 메트릭 수집도 애플리케이션에 자동으로 적용할 수 있다

라고 적혀있습니다.

말그대로 어플리케이션을 모니터링하고 관리하는 기능을 제공합니다.

Code

Actuator는 user-service에 적용해보도록 하겠습니다.
build.gradle

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
}

위와 같이 의존성을 추가합니다.

WebSecurity.java

@Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable();
        http.authorizeRequests()
                .antMatchers("/error/**").permitAll()
                .antMatchers("/actuator/**").permitAll()
                .antMatchers("/**")
                .hasIpAddress("192.168.219.109")
                .and()
                .addFilter(getAuthenticationFilter());

        http.headers().frameOptions().disable();
    }

actuator에 관한 요청은 필터를 거치지 않도록 코드를 Spring Security 관련 정보를 수정해줍니다.

application.yml

management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans

우선 3가지 정도의 옵션을 추가해보았습니다.
refresh : config server에서 가져와야할 정보를 refresh 하겠다는 뜻입니다.
health : 애플리케이션의 상태 확인 옵션입니다.
beans : 애플리케이션에 있는 모든 Spring 빈의 전체 목록을 표시합니다.

실행하기

user service를 재실행 해보도록 하겠습니다.

/health

상태에 대한 정보가 잘 나옵니다.

/beans

애플리케이션에 있는 모든 Spring 빈의 전체 목록을 표시해줍니다.

refresh 잘 반영되는지 확인하기

기존의 ecommerce.yml은 아래와 같이 작성되어 있습니다.

user service가 실행중인 상태에서 아래와 같이 값을 변경해보겠습니다.


/health_check를 호출해보면 아직 변경된 값이 반영되어 있지 않습니다.

post방식으로 아래와 같이 요청을 보내면

변경된 값이 response body에 담겨서 오게되고 health_check를 다시 확인해보면

위와 같이 변경된 값이 잘 반영되어있는 것을 알 수 있습니다.

결론

Actuator를 이용하여 서버를 재가동하지 않고도 변경된 설정 값이 반영되는 것을 볼 수 있었습니다. 이렇게 서버를 재가동하지 않고도 변경된 값이 반영된다는 장점을 가지고있었습니다. 하지만 만약 변경된 설정값이 반영이 되어야 할 서버가 1,2개가 아니라 엄청 많다면 각각의 서버 모두 api를 호출해야한다는 단점을 가지고 있었습니다. 이를 보완하기 위한 방법으로는 Spring Cloud Bus가 있습니다.
다음 글에서는 Spring Cloud Bus에 대해 작성해보도록 하겠습니다.

profile
항상 부족하다 생각하며 발전하겠습니다.

0개의 댓글