[MSA] Spring Cloud Config - Config server 구축 - 삽질중인 개발자
- Spring Cloud Config Server세팅 -
MSA 아키텍처에서의 설정 파일은 외부화하여 관리하게 된다.
외부화를 하기 위하여 대표적으로 사용하는 기술로는 Spring Cloud의 Spring Cloud Config 가 있다.
Spring Cloud Config 을 사용하여 설정을 외부화를 하여 관리했을 때 나타나는 장점으로는 다음과 같다.
- 환경에 따라 달라지는 설정 정보를 소스로부터 분리하여 소스 코드와의 결합도를 낮춰 유지보수의 용이성이 증대된다.
- 운영중에 서버 빌드 및 배포를 다시 할 필요 없이 환경 설정을 변경 가능하다.
- 설정 파일을 git에 저장하여 관리하여 버전 관리를 쉽게 할 수 있으며 다양한 도구에 액세스가 가능하다.
스프링 클라우드 컨피그에는 크게 두 가지 구성 요소가 존재한다.
- GIT과 같은 형상 관리 툴로 백업되어 application의 설정을 관리해주는 스프링 클라우드 컨피그 서버
- application이 스프링 클라우드 컨피그 서버에 접근할 수 있도록 도와주는 스프링 클라우드 컨피그 클라이언트
Spring Cloud Config 구성도
위의 그림과 같은 구조로 각 MSA 서비스들은 Spring Cloud Config Client를 통하여 Spring Cloud Config Server에 통신을 하고 Spring Colud Config Server는 GIT에서 설정 파일을 불러오는 구조이다.
Spring Cloud Config Server 구현
1. pom.xml 의존성 추가
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
2. application에 @EnableConfigServer 추가
@EnableConfigServer
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigApplication.class, args);
}
}
3.. yml 파일 세팅
spring:
cloud:
config:
server:
git:
skip-ssl-validation: true
timeout: 4
searchPaths: config/src/main/resources/{profile} # 깃 경로
# uri: https 깃 주소
# username: 유저명
# password: 패스워드
server:
port: 8888
4. git 공개키 등록
이 부분은 git을 https 형식으로 사용하면 3에 주석이 되어 있는 부분을 주석을 지우고 채워두면 생략 가능하다.
근데 혼자하는 프로젝트가 아닌 대부분의 프로젝트의 경우 공개키 방식으로 git을 접근하기에 다음 과정을 추가하는 게 좋다.
ssh 방식에서는 공개키를 등록해야 한다.
windows의 CMD나 리눅스 서버에서 아래와 같은 커멘드를 입력 후 키를 만든다.
ssh-keygen -m PEM -t rsa -b 4096 -C "이메일"
정삭적으로 커맨드가 작동하면 windows의 경우
c:/Users/{유저명}/.ssh 에서 id_rsa.pub 파일의 내용을 git repository에서 settings → Deploy keys → Add deploy key 클릭 후 key에 복붙 한다.
그 후 c:/Users/{유저명}/.ssh 에서 id_rsa에 있는 내용을 yml에 추가한다.
spring:
cloud:
config:
server:
git:
skip-ssl-validation: true
timeout: 4
searchPaths: config/src/main/resources/{profile} # 컨피크 파일을 찾을 깃 경로
uri: ssh 깃 주소
ignoreLocalSshSettings : true #true 인 경우 파일 기반 대신 속성 기반 SSH 구성을 사용
privateKey: |
-----BEGIN RSA PRIVATE KEY-----
~~~~~~~~~~~~
-----END RSA PRIVATE KEY-----
server:
port: 8888
privateKey: | <<< 이거와 개인키의 입력 시 앞에 공간을 주의해야 한다.
searchPaths: 는 github.com/내아이디/프로젝트명/blob/master/config/src/main/resources/dev/service-dev.yaml 라서
위와 같이 세팅했다.
5. 스프링 클라우드 컨피그 클라이언트 애플리케이션의 설정 파일 생성
searchPaths에 설정한 config/src/main/resources/{profile} 경로에 yml 파일 작성하기
server:
port: 8093
6. 프로젝트 실행
스프링 클라우드 컨피그 서버의 기본 포트는 관례로 8888 포트를 사용한다.
해당 프로젝트의 경우 application의 이름을 service로 설정했고 profile은 dev 브랜치는 master를 사용했다.
http://localhost:8888/service/dev/master (서버 주소/{application-name}/{profile}/{branch} )로 접속을 하면 아래와 같은 파일이 보이면 정상 실행이 된 것이다.
{
"name": "service",
"profiles": [
"dev"
],
"label": "main",
"version": "35dbe45bbf4afc270ead9357d60f06d09be1cd46",
"state": null,
"propertySources": [
{
"name": "깃랩주소/프로젝트명.git/config/src/main/resources/dev/service-dev.yaml",
"source": {
"server.port": 8093
}
}
]
}
스프링 클라우드 컨피그 클라이언트 어플리케이션 구축