SpringBoot + Microservice 프로젝트에서 Spring Cloud Config 적용하기

반응형
728x90
반응형

testconfig-{profiles} 의 yml 파일 생성하기

  • testconfig.yml
test:
  message: default yml

 

  • testconfig-dev.yml
test:
  message: dev yml

 

  • testconfig-prod.yml
test:
  message: prod yml

 

위 파일들은 로컬 컴퓨터에 특정 폴더 안에 생성되어 있을 것이다. 해당 파일들을 git repository 에 push 한다.

(예상 경로 : https://github.com/seohae/microservice-config)

 

 

 

Config 관리 프로젝트 생성

 

1) SpringBoot 프로젝트를 생성하였다. ConfigApplication.java 파일 안에 아래 코드를 추가하여 Config Server로 등록하자.

@SpringBootApplication
@EnableConfigServer /* config server 등록 */
public class ConfigApplication {

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

}

 

2) application.yml 파일에 이전에 git에 push했던 testconfig.yml 의 git 경로 설정을 추가하자.

server:
  port: 6060

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: https://github.com/seohae/microservice-config
          #private git repository 일 경우 username, password 입력 필요
          #username: seohae
          #password:

 

 

Service 프로젝트 설정 추가

  • 1) pom.xml

이전에 생성했던 Config 프로젝트를 해당 Service 프로젝트에서 testconfig.yml 등의 config 설정을 적용할 수 있도록 아래 dependency를 추가하자.

 

<!-- common config -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-config</artifactId>
</dependency>

<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

 

  • 2) resources/bootstrap.yml 신규 파일 생성

application.yml 과 같은 경로에 bootstrap.yml 파일을 생성하자.

 

spring:
  cloud:
    config:
      uri: http://127.0.0.1:6060
      name: testconfig  # git repository 에 있는 .yml 파일의 파일명

 

 

Profiles 설정 추가 (dev, prod 등)

  • 1) bootstrap.yml 파일에 아래 코드를 추가하자.
spring:
  cloud:
    config:
      uri: http://127.0.0.1:6060
      name: testconfig  # git repository 에 있는 .yml 파일의 파일명
  profiles:
    active: dev

 

우리는 아까 git Repository에 총 3개의 파일을 push 했다.

 

- testconfig.yml

- testconfig-dev.yml

- testconfig-prod.yml

 

위 3개의 파일 중에서 방금 bootstrap.yml에 추가한 active: dev 로 인해 testconfig-dev.yml 파일로 적용됨을 확인하자.

 

 

 

 

 

Service 프로젝트에서 Config 설정 적용 여부 확인

모든 설정을 끝낸 후, Service 프로젝트를 재시작 후 아래 API를 호출하면 우리가 git에 추가했던 application.yml 파일이 적용되었음을 알 수 있다.

@RestController
@RequestMapping("")
@RequiredArgsConstructor
@Slf4j
public class UserController {

    private final Environment environment;
    
    @GetMapping("/test")
    public String status() {
        log.info(environment.getProperty("test.message"));
    }   
}

 

 

재기동 없이 Config 수정내용 적용하기

Service 프로젝트에 적용되어있는 공통 testconfig.yml 등의 파일에 수정이 일어나면 Service 프로젝트를 재기동해야 적용된다. 이는 불편함을 가지고 있으므로, 재기동 없이 적용할 수 있도록 설정을 추가하자.

 

 

 

Service 프로젝트에 Actuator 적용

  • 1) pom.xml
<!-- 재기동 없이 config (.yml) 적용 (/refresh 호출해야함) -->
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>

 

  • 2) application.yml
management:
  endpoints:
    web:
      exposure:
        include: refresh

 

- http://localhost:8080/actuator/refresh 호출

 

include: 뒤에 올 수 있는 속성들은 여러가지가 있지만 Config의 재기동 없는 적용을 위한 refresh만 우선 추가했다. 이제 Service 프로젝트를 기동하여 http://localhost:8080/actuator/refresh 를 호출해보자. 호출 이후에 수정된 Config 내용이 적용됨을 확인할 수 있다.

 

 

 

RabbitMQ 를 사용하여 Spring-Cloud-Bus 설정

우선 위 방법에는 단점이 존재하는데, 변경된 config 설정을 적용하고자 모든 프로젝트의 /refresh 를 호출해줘야한다. 이를 해결하기 위해 아래 포스팅을 참고하자.

 

  • 1) RabbitMQ 설치

https://devfunny.tistory.com/438

 

MacOS에 RabbitMQ 설치하고 실행하기

Terminal 실행 1) brew update brew update 2) rabbitmq 설치 brew install rabbitmq 설치 완료 후 설치 경로로 폴더 확인 /usr/local/sbin RabbitMQ 실행 ./rabbitmq-server 접속 확인 127.0.0.1:15672 접속 후,..

devfunny.tistory.com

 

  • 2) Spring-Cloud-Bus 설정

https://devfunny.tistory.com/439

 

Spring Cloud Bus 적용하기

현재 프로젝트 목록 Prj1. Config -> 여러 Service 프로젝트들의 Config를 공통으로 관리하는 프로젝트 Prj2. API-Gateway -> 여러 Service 프로젝트들의 Gateway 역할을 하는 프로젝트 Prj3. User-Service -> Use..

devfunny.tistory.com

 

 

반응형

Designed by JB FACTORY