파란하늘의 지식창고
반응형

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 참조도 가능하다. (이에 대해 테스트를 하진 않음)

Placeholders in Git URI

Pattern Matching and Multiple Repositories


여러 유형의 repository를 병행해서 사용도 가능하다. (이에 대해 테스트를 하진 않음)

Composite Environment Repositories


암복호화 설정

repository에 저장하는 값들은 plain text로 저장할 수 있지만 암호화가 필요한 정보도 있다.

spring security의 경우 password encoder를 설정하고 여러 암호화 알고리즘 중 선택해서 저장한다.

config server는 JCE를 통한 암복호화를 처리하며 이를 위해선 다음과 같은 절차가 필요하다.

  1. keytool을 이용해 keystore 파일을 만든다.
  2. config server에 해당 keystore 파일을 참조하는 설정을 추가한다
  3. 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]


반응형
profile

파란하늘의 지식창고

@Bluesky_

내용이 유익했다면 광고 배너를 클릭 해주세요