코딩공작소
MSA(5) - 스프링 클라우드 컨피그 서버 구성관리 본문
애플리케이션 구성 관리
- 분리 : 물리적 배포에서 서비스 구성 정보를 완전히 분리해야 한다
- 추상화 : 구성 데이터의 접근 방식을 추상화해야 하며, REST 기반 JSON서비스를 사용해야 한다
- 중앙 집중화 : 가능한 적은 수의 저장소로 애플리케이션 구성 정보를 모아야 한다
- 견고화 : 구현할 솔루션은 가용성이 높고 이중화가 필요하다
이렇듯, 코드를 외부로 분리할 때 외부 의존성이 생겨서 이를 관리하고 버전 제어한다는 것이다.
구성 데이터는 추적 가능하고 버전을 제어할 수 있어야 한다.
- 인스턴스가 시작되면 서비스 엔드포인트를 호출하여 동작 중인 환경별 구성 정보를 읽어 온다
- 실제 구성 정보는 저장소에 보관된다. 구성 저장소 구현체에 따라 구성 데이터를 보관하는 다양한 방법을 선택할 수 있다
- 응용 프로그램이 배포되는 방식과는 독립적이며 구성 관리에 대한 변경 사항은 일반적으로 빌드 및 배포 파이프라인으로 처리된다
- 서비스 변경 사항을 통지받고 애플리케이션 데이터 복제본을 갱신해야 한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.2.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.optimagrowth</groupId>
<artifactId>configserver</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>Configuration Server</name>
<description>Configuration Server</description>
<properties>
<java.version>11</java.version>
<docker.image.prefix>ostock</docker.image.prefix>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies> --> 컨피그 서버를 실행하기 위한 스프링 클라우드 프로젝트와 기타 의존성
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<dependencyManagement> --> 스프링 클라우드 BOM(Bill Of Materials)
<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>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<!-- This plugin is used to create a docker image and publish the image to docker hub-->
<plugin>
<groupId>com.spotify</groupId>
<artifactId>dockerfile-maven-plugin</artifactId>
<version>1.4.13</version>
<configuration>
<repository>${docker.image.prefix}/${project.artifactId}</repository>
<tag>${project.version}</tag>
<buildArgs>
<JAR_FILE>target/${project.build.finalName}.jar</JAR_FILE>
</buildArgs>
</configuration>
<executions>
<execution>
<id>default</id>
<phase>install</phase>
<goals>
<goal>build</goal>
<goal>push</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
|
cs |
중요하게 체크해야 할 부분
- 스프링 부트 버전
- 스프링 클라우드 버전
- 서비스에 사용하는 의존성
- 스프링 클라우드 컨피그의 상위 BOM
스프링 클라우드 컨피그 서버를 만드는 다음 단계는 서버의 핵심 구성을 정의할 파일을 하나 더 설정하는 것이다.
즉, application.properties, application.yml, bootstrap.properties, bootstrap.yml 파일 중 하나를 설정해야 한다.
bootstrap.yml 파일 생성하기
spring:
applicaton:
name : config-server
server:
port:8071
애플리케이션 이름을 설정하는 것이 중요한데, 서비스 디스커버리를 위해 우리가 구축할 아키텍처 내 모든 서비스 이름을 지정하는 것이다.
스프링 컨피그 서버가 요청받은 구성 데이터를 제공할 때 사용되는 수신대기 포트도 중요하다.
부트스트랩 클래스 설정
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
package com.optimagrowth.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigurationServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigurationServerApplication.class, args);
}
}
|
cs |
@EnableConfigServer 애너테이션은 스프링 클라우드 컨피그 서비스로 활성화한다
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
spring:
application:
name: config-server
profiles:
active: native #, git, vault : 백엔드 저장소 스프링 프로파일 설정
cloud:
config:
server:
encrypt.enabled: false
native:
search-locations: classpath:/config --> 스프링 클라우드 컨피그 서버는 src/main/resources/config폴더
git:
uri: https://github.com/klimtever/config.git
searchPaths: licensingservice
vault:
port: 8200
host: 127.0.0.1
kvVersion: 2
profile-separator: /
backend: licensing-service
server:
port: 8071
encrypt:
key: fje83Ki8403Iod87dne7Yjsl3THueh48jfuO9j4U2hf64Lo
#Enable all Spring Boot Actuator endpoints.
management:
endpoints:
web:
exposure:
include: "*"
|
cs |
구성 데이터를 보관할 저장소를 지정한다. 파일 시스템 기반의 저장소를 설정하는 것이 가장 쉽다.
스프링 프로파일은 스프링 프레임워크가 제공하는 기능이다.
native 클라우드 컨피그 서버용으로만 생성한 프로파일이며, 구성 파일을 클래스 패스나 파일 시스템에서 검색하고 읽도록 지시하는 프로파일!
파일 시스템 기반의 저장소를 하용할 때 native 프로파일을 사용한다
search-locations에 클래스 패스를 사용한 후, /config 폴더에 라이선싱 서비스를 위한 프로퍼티 파일을 생성할 것이다
서비스를 로컬에서 실행할 때의 default, dev, production 환경이 있다.
컨피그는 모든 것이 계층 구조로 동작한다.
구성 서비스를 구축하는 것은 마이크로 서비스가 하나 추가된다는 것이고, HTTP 기반 REST 엔드포인트로 서비스 콘텐츠에 액세스할 수 있다.
파일의 명명 규약은 appname-env.properties or appname-env.yml
구성 정보에 관한 데이터 값들을 JSON형태로 응답한다.
- 스프링 프로파일에 설정된 엔드포인트로 스프링 클라우드 컨피그 서비스와 통신
- 스프링 클라우드 컨피그서비스는 구성된 백엔드 저장소를 사용하여 URI에 매개변수로 전달된 스프링 프로파일에 해당하는 구성 정보 검색
- 적절한 프로퍼티 값이 라이선싱 서비스로 다시 전달되면 스프링 부트 프레임워크는 이 값을 애플리케이션의 적절한 부분에 주입
일반적으로 bootstrap.yml파일에 서비스에 대한 애플리케이션 이름, 프로파일, 구성 서버에 연결할 URI를 넣는다.
spring :
application :
name : licensing-service : 라이선싱 서비스의 이름을 지정해서 스프링 클라우드 컨피그 클라이언트는 어떤 서비스가 검색되는지 알 수 있다.
profiles :
active : dev : 서비스가 실행될 프로파일을 지정. 환경에 매핑된다.
cloud :
config :
uri : htpps://configserver:8071 : 스프링 클라우드 컨피그 서버의 위치를 지정
mvc spring-boot:run
엔드포인트와 활성화된 프로파일을 사용 스프링 클라우드 컨피그 서버에 연결을 시도한다.
- 스프링 클라우드 구성 서버를 사용하며 프로퍼티 값을 환경별로 설정할 수 있다
- 스프링은 서비스가 시작할 때 프로파일을 사용하여 컨피그 서비스에서 조회할 환경 프로퍼티들을 결정한다
- 스프링 클라우드 컨피그 서비스는 파일 또는 깃, 볼트 기반의 애플리케이션 구성 저장소를 사용하여 애플리케이션 프로퍼티를 저장할 수 있다
- 스프링 클라우드 컨피그 서비스는 대칭 및 비대칭 암호화를 사용하여 중요한 정보를 암호화할 수 있다
'어플리케이션개발 > MSA' 카테고리의 다른 글
MSA(7) - Resilience4j를 사용한 회복성 패턴 (1) | 2024.07.14 |
---|---|
MSA(6) - 서비스 디스커버리 (0) | 2024.07.08 |
MSA(4) - 도커 (0) | 2024.06.25 |
MSA(3) - 스프링 부트로 마이크로서비스 구축하기 (0) | 2024.06.25 |
MSA(2) - 스프링 클라우드를 통한 MSA 구축 (0) | 2024.06.24 |