Spring Cloud

6. Spring Cloud Config

Config server 

  • 마이크로서비스의 어떠한 설정(환경변수값, Spring cloud 설정 등)이 변경되었을때 서버 재시작 없이 동적으로 적용
  • 마이크로서비스가 배포될때 제반 설정값들을 배포 대상 환경(개발계, 검증계, 운영계 등)에 맞게 적용
  • 마이크로서비스를 Stateless하게 개발하기 위해서입니다. Stateless하게 만들어야 스케일링(마이크로서비스 인스턴스 서버 - 즉, 컨테이너의 증감)과 부담없는 재시작이 가능

실습

1. 의존성 및 config repository 설정

...

ext['springCloudVersion'] = 'Finchley.SR2'

...

dependencies {
    compile('org.springframework.cloud:spring-cloud-config-server')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/whdals7337/spring-cloud-workshop-config-repository

 

@EnableConfigServer
@SpringBootApplication
public class ConfigServerApplication {

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

 

 

2. Spring Boot Actuator 의존성 및 설정

Spring Boot Actuator란 Spring Boot 기반의 애플리케이션을 손쉽게 모니터링 할수 있는 데이터를 제공해주는 라이브러리이다. 웹의 상태 모니터링과 metric, traffic정보 그리고 database의 상태등을 알 수 있다. 이러한 모니터링 데이터를 직접 구현할 필요없이 간단한 설정으로 사용할 수 있다는 것이 큰 장점

...

ext['springCloudVersion'] = 'Finchley.SR2'

...

dependencies {
    compile('org.springframework.boot:spring-boot-starter-web')
    compile('org.springframework.cloud:spring-cloud-starter-netflix-eureka-client')
    compile('org.springframework.cloud:spring-cloud-starter-config') // config 의존성 추가
    compile('org.springframework.boot:spring-boot-starter-actuator') // starter-actuator 의존성 추가
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

spring boot 1.x 때는 추가적으로 무언가 해줄 필요는 없었지만

 2.x 부터는 default로 대부분의 정보를 노출하지 않는 것으로 되어 있기 때문에 해당 부분을 변경해줘야한다.

아래 설정에서는 refresh만 허용하였지만 *를 통해서 전체 허용도 가능하며 exclude를 통해서 특정 endpoint를 제외한 나머지를 적용할수도 있다.

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

management:
  endpoints:
    web:
      exposure:
        include: refresh

bootstrap.yml  application.yml 전에 로드하게 되어 spring cloud configserver를 사용하는 경우 사용되는데 이유는 기본적으로 외부 소스에서 구성 속성을 로드하고 로컬 외부 구성 파일의 속성을 해독 하기 위해서 이다.

# bootstrap.yml
server:
  port: 8082

spring:
  application:
    name: product
  cloud:
    config:
      uri: http://127.0.0.1:8080