Spring Cloud Config Server는 프로젝트에서 설정해서 사용하는 properties의 config 변수 값들을 통합 관리할 수 있게 해준다.
여러 프로젝트에서 반복 사용하는 공통 변수값을 관리할 수 있어 프로젝트가 많아질 수록 Spring Cloud Config Server의 사용은 유지 보수를 위한 필수 선택이 된다.
각 프로젝트별 변수 관리를 application / profile / label 세 가지 개념을 통해 관리를 한다.
Spring Cloud Config Server 설정
spring cloud는 spring boot를 사용하는 전제 조건에서 사용한다.
Maven 설정
대략 아래처럼 선언한다.
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.1.RELEASE</version>
</parent>
<properties>
<java.version>11</java.version>
<spring-cloud.version>Finchley.SR2</spring-cloud.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
</dependencies>
application.yml 설정
대략 아래처럼 선언한다.
git을 사용하는 경우에 대한 설정이다.
server:
port: 8888
spring:
application:
name: bluesky-cloud-config-server
cloud:
config:
server:
git:
uri: [git주소]
default-label: develop
bus:
enabled: false
Config Server가 직접 config properties를 가지고 있을 수도 있지만 대부분 DB나 git 으로 관리하고 해당 repository 를 호출하여 사용한다.
아래와 같은 repository 를 지원한다.
- native : 파일 호출
- git
- svn
- jdbc
- vault
자세한 설정은 유형마다 다르다.
bus 설정을 false로 처리하였는데 bus는 spring-cloud-config-monitor를 추가로 참조하는 경우 사용한다.
git과 같이 webhook을 지원하는 경우 git에 변경된 설정이 push 되면 config server에 변경에 대한 알림을 전파하여 바로 반영할 수 있도록 해주는 기능이다.
git의 경우 별다른 설정이 없으면 refresh rate가 0 이어서 매번 새로고침할 때마다 해당 데이터를 가져오지만 라이브 사용 시엔 성능 문제가 발생하기 때문에 되도록 refresh 주기를 길게 잡고 bus 설정을 통해 변경점을 전파 받도록 하는 것이 좋다.
Repository 설정
repository를 설정하는 방식은 유형별로 차이가 있다.
git의 경우 요청받은 application 별로 yml이나 properties를 만들어 관리할 수 있다.
spel을 통해 복수의 git repository를 지정하거나 pattern 별 repository 참조도 가능하다. (이에 대해 테스트를 하진 않음)
Pattern Matching and Multiple Repositories
여러 유형의 repository를 병행해서 사용도 가능하다. (이에 대해 테스트를 하진 않음)
Composite Environment Repositories
암복호화 설정
repository에 저장하는 값들은 plain text로 저장할 수 있지만 암호화가 필요한 정보도 있다.
spring security의 경우 password encoder를 설정하고 여러 암호화 알고리즘 중 선택해서 저장한다.
config server는 JCE를 통한 암복호화를 처리하며 이를 위해선 다음과 같은 절차가 필요하다.
- keytool을 이용해 keystore 파일을 만든다.
- config server에 해당 keystore 파일을 참조하는 설정을 추가한다
- config server에서 제공하는 /encrypt, /decrypt를 통해 암복호화를 한 값을 repository에 사용한다.
이 때 '{cipher}암호화값' 과 같이 {cipher} prefix를 사용하여 암호화 값임을 선언해야 한다.
이에 대해서는 Encryption and Decryption 문서를 참고하면 된다.
Client 설정
Config Server를 사용할 프로젝트에서는 다음의 설정이 필요하다.
Maven 설정
cloud import 설정 부분은 생략하고 필요한 참조만 표기하였다.
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
bootstrap.yml 설정
bootstrap.yml이나 bootstrap.properties 파일은 boot 설정에 우선하는 cloud 설정 선언을 관리하는 파일이다.
client 프로젝트에서 cloud config server를 연동하기 위해서 bootstrap 파일 설정이 필요하다.
아래와 같이 config server 주소와 호출하는 application 이름을 설정한다.
spring:
cloud:
config:
name: [참조할 config server application name]
uri: [config server url]
'Study > Java' 카테고리의 다른 글
Spring Boot AutoConfigurtaion java.io.FileNotFoundException: class path resource [.class] cannot be opened because it does not exist 에러 (0) | 2019.04.03 |
---|---|
Spring Boot AutoConfiguration 개발하기 (0) | 2019.03.28 |
Jasypt 암복호화 하기 (1) | 2019.03.01 |
에러 로그를 웹에서 json으로 호출해서 확인하기 (logback appender 만들기) (0) | 2019.01.22 |
Spring Boot log 설정하기 (0) | 2019.01.09 |
Spring Data Mongodb 사용해보기 (0) | 2018.12.24 |
JDK 11에서 java.xml.bind 관련 에러 발생하는 경우 (0) | 2018.12.13 |
Spring Boot multi module, multi profile 환경에서 @PropertySouce 사용하기 (0) | 2018.12.10 |
STS 4.0.0 이후 java, properties 에디터에서 ctrl + space (content assist) 가 동작하지않는 경우 (0) | 2018.12.06 |
Spring Boot Mongodb reactive 설정하기 (0) | 2018.12.03 |