본문 바로가기
Programming/Java, Spring

[Spring Cloud] Config yml 설정, actuator를 이용한 자동 반영

by Renechoi 2023. 6. 1.

Spring Cloud Config

 

- 분산 시스템에서 서버, 클라이언트 구성에 필요한 설정정보 (application.yml)를 외부 시스템에서 관리

- 하나의 중앙화된 저장소에서 구성 요소 관리 가능

- 각 서비스를 다시 빌드하지 않고 바로 적용 가능

- 애플리케이션 배포 파이프라인을 통해 DEV - UAT - PROD 환경에 맞는 구성 정보 사용 

 

기존에 각 프로젝트마다 존재하던 yml 파일을 외부에서 관리하도록 하여

동적으로 서버 구성 정보를 적용할 수 있도록 한다. 

 

- private git repository ->

- secure vault ->.                         Spring cloud config server 
- secure file storage -> 

 

 


 

local repository를 만들어 confi yml 파일을 생성하기 

 

로컬에 설정 파일을 관리할 폴더를 새로 만들고 ecommerce.yml 파일을 생성하고 

필요한 정보를 입력

 

git에서 관리해주도록 설정 

 

git init

git add ecommerce.yml

git commit -m 'message'

 

 

 

스프링 config server를 의존성으로 하는 새로운 프로젝트를 생성한다. 

 

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-config-server'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

 

해당하는 서버가 config server 역할을 하기 위해 다음과 같은 애노테이션을 추가해준다. 

 

@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {

   public static void main(String[] args) {
      SpringApplication.run(ConfigServerApplication.class, args);
   }

}

 

 

yml 설정 

 

file 경로를 지정해준다. 

 

server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: file:///Users/Rene/Documents/rene/inflearn/msa-with-springcloud-config

 

 

정상적으로 등록을 마쳤다면 해당 서버를 기동하고 다음과 같은 주소로 접속하면 아래와 같은 json 포맷이 보이게 된다.

 

http://localhost:8888/ecommerce/default

 

 

{"name":"ecommerce","profiles":["default"],"label":null,"version":"f292a59922df704baf5756dc8fb68e62a4a9a790","state":null,"propertySources":[{"name":"file:///Users/Rene/Documents/rene/inflearn/msa-with-springcloud-config/ecommerce.yml","source":{"token.expiration_time":86400000,"token.secret":"user_token","gateway.ip":"192.8.0.0"}}]}

 

 


UserService 에서 등록한 yml을 읽어오기 

 

먼저 dependency를 추가해준다. 

 

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-starter-config'
    implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'
}

 

bootstrap.yml을 추가해 다음 내용을 작성한다.

  spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce

 

여기서 bootstrap.yml의 내용은 다음을 의미한다. 

 

url: cloud config 서버 

name: 읽어올 yml 파일

 

즉, config 서버에서 해당하는 yml 파일을 읽어오는 설정이다. 

 

 

이렇게 하면 가장 먼저 해당 yml 을 읽어오며 로그에 다음과 같이 출력된다.

 

 

 


 

config 파일이 변경에 반영되는 방법은 다음 3가지다. 

 

1. 서버 재기동

2. actuator를 이용 

3. spring cloud bus 사용 

 

 

첫 번째 방식은 계속해서 서버를 껐다 켜야 하는 번거로움이 있다. 2,3번의 방법으로 이러한 문제를 해결할 수 있다. 

 


 

Actuator를 사용하기 

 

spring actuator endpoints

 

https://docs.spring.io/spring-boot/docs/2.1.13.RELEASE/reference/html/production-ready-endpoints.html

 

53. Endpoints

Actuator endpoints let you monitor and interact with your application. Spring Boot includes a number of built-in endpoints and lets you add your own. For example, the health endpoint provides basic application health information. Each individual endpoint c

docs.spring.io

 

yml 파일에 enpoints를 볼 수 있는 설정을 추가해준다. 

 

management:
  endpoints:
    web:
      exposure:
        include: refresh, health, beans, busrefresh, info, metrics, prometheus

 

다음과 같이 정보 확인이 가능해졌다.

 

 

 

여기서 Post 요청으로 refresh를 시키면 yml 설정이 새롭게 반영된다. 

 

 


gateway에서는 actuator의 httptrace 기능을 이용해볼 수 있다. 

 

의존성, yml에 위와 같이 추가하고 다음과 같은 bean 등록을 해준다.

 


@SpringBootApplication
public class ApigatewayServiceApplication {

   public static void main(String[] args) {
      SpringApplication.run(ApigatewayServiceApplication.class, args);
   }

   @Bean
   public HttpTraceRepository httpTraceRepository(){
      return new InMemoryHttpTraceRepository();
   }

}

 

클라이언트가 요청했던 trace 정보가 memory에 담기고 endpoint를 호출하게 되면 해당하는 값을 사용할 수 있게 된다. 

 

 


ref. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4/dashboardhttps://www.inflearn.com/course/%EC%BD%94%EC%96%B4-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0/dashboard

반응형