1. Config 서버의 필요성
민감정보는 빌드 시에는 무조건 올려야 하지만, 프로젝트 내부 민감정보를 들어낼 필요는 없다
인스턴스가 많은 회사인 경우 Config 설정이 바뀔 때 인스턴스에 있는 모든 서버 접속 정보를 바꾸기 어렵다.
그래서 설정파일만 가진 Config 서버가 필요하다.
2. Config 서버 작동 방식
3. Spring Cloud Config
Spring Cloud Config는 분산 시스템을 위한 외부 구성 관리를 제공하는 프로젝트입니다. 이를 통해 애플리케이션의 설정을 중앙 집중식으로 관리하고, 서비스 간에 설정 공유하고 변경사항을 동적으로 적용할 수 있습니다.
- 서비스 주요 특징과 작동 방식
a. 중앙 집중화된 설정 저장소+ 외부 구성소스 지원
애플리케이션의 설정 파일을 저장하고 관리하는 중앙 집중화된 저장소로 보통 Git등의 버전관리 시스템을 사용함
b. 다양한 환경에 대한 설정 제공
개발환경, 테스트환경, 운영환경 등 각각의 환경에 대한 설정으로 구성할 수 있습니다.
application-db, applicaton과 같이 -를 붙인 후 태그처럼 용도를 명시하여 파일로 쪼개서 가져올 수 있습니다.
c. 서버스 간 설정 공유
다수의 서비스가 있을 때, 각 서비스는 Spring Cloud Config 서버에서 설정을 가져와 사용할 수 있습니다.
이를 통해 서비스 간에 일관된 구성을 유지할 수 있습니다.
d. 동적으로 설정 변경 감지
Spring Cloud Config 클라이언트는 정기적으로 Config 서버에 설정을 요청하며, 변경 사항이 있을 경우 다시 로드합니다.이를 통해 동적으로 설정을 업데이트할 수 있습니다. 실제 Gihub에 로컬에서 작업한 변경된 설정 yml파일을 올리면 변경 사항을 확인하여 Config서버를 받는 다른 프로그램에서 설정이 변경되어 동적으로 업데이트 가능합니다.
4. Spring Cloud Config 설정하기
4.1 Config 서버 설정
bootstrap.yml 또는 bootstrap.properties 파일을 사용하여 Config 서버를 설정합니다. 이 파일은 애플리케이션이 시작될 때 가장 먼저 읽힙니다.
# bootstrap이란 부츠 끈에서 나온 용어로 무언가를 시작한다는 부팅을 의미하는 것으로 다른 파일보다 앞서서 로딩되는 파일에 많이 명명합니다.
4.2 외부 구성 소스 연결
Config 서버가 사용할 외부 구성 소스(Git, SVN 등)를 설정합니다. Git으로 관리할 때 로컬의 있는 파일을 Config파일에 두는 법과 Github 레포지토리에 올린 후 관리하는 방법이 있습니다.
4.3 Config 클라이언트 설정
각 서비스에서 Config 클라이언트를 설정하고, 어던 애플리케이션의 어떤 설정을 가져올지 정의합니다.
4.4 애플리케이션 코드에서 설정 사용
Config 서버에서 가져온 설정은 애플리케이션 코드에서 @Value 어노테이션 또는 Envitonment 객체를 통해 사용할 수 있습니다.
5. 코드 적용하기 - Config 서버
5.1 먼저 빈 폴더에 yml파일을 하나를 만들어주세요. 민감정보를 적습니다.
저는 VScode에서 yml 파일을 만들어서 넣었습니다.
해당 파일이 있는 폴더를 git으로 관리해야 하기에. git commit까지만 진행해주셔야 합니다!
C:\DevSoo\config-resource> test.yml 파일을 만들고
C:\DevSoo\config-resource> git init
C:\DevSoo\config-resource> git add .
C:\DevSoo\config-resource> git commit -m "민감정보 "최초 설정"
5.2 프로젝트 생성
메인클래스 위에 @EnableConfigServer 어노테이션을 붙입니다.
package com.example.configserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
application.yml에 config서버의 정보를 담은 파일경로 C:\DevSoo\config-resource (위 vscode로 만든 yml파일이 담긴 폴더)를 적습니다.
spring:
cloud:
config:
server:
git:
uri: file://C:\DevSoo\config-resource
웹브라우저에 127.0.0.1:포트번호/yml파일명/default 라고 입력하면 파일 경로에 담긴 해당 yml파일이 조회된다면 성공입니다.
6. 코드 적용하기 - Config 클라이언트
6.1 의존성으로 spring-cloud-starter-config, spring-cloud-starter-bootstrap 추가
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config/4.0.4
https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-bootstrap/4.0.4
6.2 bootstrap.yml파일 추가
spring:
cloud:
config:
uri: http://127.0.0.1:config서버포트번호
name: yml파일명
6.3 env 파일을 이용해 프로퍼티를 얻어올 수 있는지 확인한다.
import lombok.RequiredArgsConstructor;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.*;
@RestController()
@RequestMapping("/first-service")
@RequiredArgsConstructor
public class FirstserviceController {
// Environment는 application.yml 파일에 매칭 시켜 놓은 값을 자바 자료로 만들어줌
private final Environment env;
@GetMapping("config-check")
public String configCheck(){
return env.getProperty("test.value");
}
'MSA' 카테고리의 다른 글
Github 레포지토리 config 서버 연동 (0) | 2023.11.01 |
---|---|
Spring Cloud Config 서버를 활용한 DB 정보관리 (0) | 2023.11.01 |
JAVA 객체로 먼저 보는Join 없는 연관 관계 이해하기 (0) | 2023.10.30 |
디스커버리 서버와 유레카 적용 사례 (0) | 2023.10.25 |
기존 마이크로서비스를 Eureka 클라이언트로 등록 (0) | 2023.10.24 |