Software Architecture/MSA

[MSA] Spring Cloud Config - (5)

jimkwon 2022. 7. 20. 11:23
반응형

 

이전에는 MSA구조 중 API Gateway Service에 대해 다뤘다.

 

이번에는 Config 정보를 하나로 통합하여 관리할 수 있는 Spring Cloud Config에 대해 다뤄보자.

 

 

 Spring Cloud Config - 설정 정보의 중앙화

 

이전에 Microservice를 여러 개 만들어 실습을 진행하면서, 각 서비스에 대한 설정정보는 각각 application.yml 파일에 독립적으로 분리되어 관리되었다. 따라서 설정 정보가 겹치는 경우에도 각각 따로 기재하고, 변경되는 경우는 각 서비스 별 설정파일을 수정한 후 다시 application을 구동해야 했다.

 

Spring Cloud Config는 이러한 설정정보를 통합적으로 관리할 수 있는 서비스다.

 

기능을 간단하게 정리해보자.

 

  • 설정정보 (yml파일 등)를 외부 시스템에서 관리
  • 하나의 중앙화 된 저장소에서 구성요소 관리 가능
  • 각 서비스를 빌드하지 않아도 바로 적응이 가능하다
  • 개발(DEV), 테스트(UAT), 프로덕션(PROD) 환경에 맞는 구성 정보 사용이 가능
    즉, 아직 개발중이거나 테스트 중인 영역을 실제 서비스중인 환경과 구분지어 환경 정보 구성이 가능함

 

그림을 통해 이해해보면, 2개의 서비스가 하나의 Spring Cloud Config Server에서 관리되고 있다.

환경 설정 파일은 보편적으로 3가지의 방식이 있다.

  1. local, remote git 레파지토리
  2. Secure Vault (암호화된 데이터)
  3. 내 컴퓨터의 디렉토리나 로컬에 있는 파일

 

위 그림과 같이 개발 영역과 서비스중인 영역을 분리하여 각 서비스에 맞는 환경 설정을 Spring Cloud Config Server 한 곳에서 관리할 수 있다. 

필자는 git 레파지토리에 application.yml 파일을 두어 환경 설정을 관리해보는 예제를 진행해보겠다!

 

 

 Spring Cloud Config - 프로젝트 생성

 

[개발 환경]
InteliJ - Ultimate
Java 11
PowerShell (Window)
[프로젝트 구성]

 

먼저 local git 환경을 만들어보자!

원하는 이름으로 디렉토리를 생성하자. 필자는 git-local-repo로 생성하였다.

 

vim 이나 vscode를 이용해 yml 파일을 만들어보자! 필자는 이미 설치되어있는 vscode를 code 명령어로 사용하였지만 여러분들은 vim이나 메모장을 이용해 해당 파일을 만들어주면 된다. (확장자만 유의하면 된다.)

 

이름은 ecommerce.yml로 설정하였다. (추후 해당 이름으로 찾아야 하니 잊지말것)

token:
  expiration_time: 86400000
  secret: user_token

gateway:
  ip: 본인 아이피 주소

(아이피주소는 터미널에 ipconfig를 치고 IPv4 주소 옆 내용을 참고하면 된다.)

위 내용으로 yml파일을 만들고 git에 commit까지 진행하자.

 

PS C:\Users\Metanet\git-local-repo> code ecommerce.yml
PS C:\Users\Metanet\git-local-repo> git init
Initialized empty Git repository in C:/Users/Metanet/git-local-repo/.git/
PS C:\Users\Metanet\git-local-repo> git add ecommerce.yml
PS C:\Users\Metanet\git-local-repo> git commit -m "upload a default application yaml file"
[master (root-commit) 788232b] upload a default application yaml file
 1 file changed, 6 insertions(+)
 create mode 100644 ecommerce.yml

 

로컬에서만 관리할거라 push는 따로 하지 않았다.

 

이제 Spring Config Server용 프로젝트를 생성하자.

 

프로젝트 이름은 config-server, 필요한 dependencies는 위 하나만 설정하고 생성했다.

그 후, Config Server로 동작하도록 어노테이션을 붙여주고 설정 파일로 이동하자!

server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: [아까 만들어둔 application.yml 파일 경로]

위와 같이 포트번호 설정과 외부에 만들었던 설정파일 경로를 작성해주면 된다.

 

프로젝트 가동 후, localhost:8888/파일이름/test 로 들어가보자!

현재는 별다른 profiles 설정이 없어서 마지막에 test를 입력해도 실제로는 default값이 출력되고 있다.

만약 test라는 이름의 profiles를 설정하면 해당 파일을 불러올것이다.

 

profiles?
테스트 환경, 실제 배포 환경으로 나눠져 있을 때
각 환경에 맞게 설정정보를 구분할 수 있다.

 

 

다음은 실제 마이크로서비스와 Spring Cloud Config를 연동하고, 더 나아가 Cloud Gateway와도 연결해보는 프로젝트를 간단하게 진행해보겠다.

 

[참고 레퍼런스]

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%ED%81%B4%EB%9D%BC%EC%9A%B0%EB%93%9C-%EB%A7%88%EC%9D%B4%ED%81%AC%EB%A1%9C%EC%84%9C%EB%B9%84%EC%8A%A4