Spring Cloud Config 구축하기

onlyJoon·2024년 1월 30일
2

MSA

목록 보기
2/5
post-thumbnail

🧐Config Server 어떻게 써?

Spring Cloud Config를 사용한다.

근데 구축에 앞서 우선 상상을 해보자.
Config Server를 구성하려면 어떤게 필요할까?

일단 설정 파일을 모아둘 저장소가 필요할 것이다.
그리고 저장소에서 설정파일을 적재적소에 제공해줄 서버가 있어야 한다.
마지막으로 설정 파일을 사용하는 서비스가 필요하다.

설정 파일 어디에 모아둘까?

서버와 서비스는 Spring Cloud Config가 제공하는 Server와 Client를 사용하면 된다. 그럼 저장소는 무엇을 사용하면 좋을까?

어디든 모아둘 수 있고 접근이 가능한 곳이면 된다.

  • FTP
  • Native File System
  • Local Git Stage
  • Git Hosting Service(ex. GitHub, GitLab)

여기선 모두에게 익숙한 Github을 사용한다.

🫨Private Repository

설정 정보는 민감 정보를 포함하는 경우가 많다. 따라서 설정 정보 비공개를 위해 Public 레포가 아닌 Private 레포를 기준으로 구축을 시작하겠다.

해당 레포에 설정 파일들을 저장하면 된다.

설정 파일 이름 구조

설정 파일의 이름을 아무렇게나 하면 안된다.

{앱 이름}-{프로파일}.yaml

이 구조로 작성해주어야 한다. 예를 들어 user-dev.yamluser는 앱 이름이고 dev는 프로파일에 해당한다.

🤨Spring Cloud Config Server

Spring Boot 프로젝트를 생성한다.

의존성 추가


프로젝트를 생성하면서 Spring WebConfig Server 의존성을 추가해주거나, 생성 후에 의존성을 추가해주어야 한다.

implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.cloud:spring-cloud-config-server'

Config Server 활성화

Config Server의 메인 클래스에 @EnableConfigServer를 추가해준다.

@EnableConfigServer
@SpringBootApplication
public class ConfigServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(ConfigServiceApplication.class, args);
    }

}

application.yaml

server:
  port: 8888

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: {private repo. 주소}
          default-label: {private repo. 브랜치}

이대로 끝이면 좋겠지만 private repo를 사용하기 때문에 SSL 설정이 추가로 필요하다.

SSL 연결 설정

1. 비대칭 키 생성

ssh-keygen -m PEM -t ecdsa -b 256

위 명령어로 비대칭키를 생성한다. 이 비대칭키는 Config Server가 Private Repo.에 연결할 때 사용된다.
생성 과정에서 저장할 위치와 passphrase를 지정할 수 있는데
위치는 그냥 enter, passphrase는 enter 혹은 값을 넣어주면 된다.

rsa키는 보안 취약점 때문에 에러가 발생할 수 있어 ecdsa를 사용했다.

명령어의 결과로 id_rsa라는 private_keyid_rsa.pub라는 public_key가 생성된다.

2. public key를 deploy key에 등록

다음으로 Private Repo.의 deploy key에 공개키를 저장해주어야 한다.

cat ~/.ssh/id_ecdsa.pub

명령어의 결과로 나온 내용을 전부 Key 칸에 넣어주고 등록하면 된다.

3. application에 private key 정보 추가

생성했던 비대칭 키의 Private Key는 Config Server의 application.yaml에 넣어주어야 한다.

cat ~/.ssh/id_ecdsa

private key 값은 위 명령어로 확인 가능하다.

server:
  port: 8888

spring:
  application:
    name: config
  cloud:
    config:
      server:
        git:
          uri: {private repo. 주소}
          default-label: {private repo. 브랜치}
          ignore-local-ssh-settings: true
          passphrase: {비대칭 키 생성 시 입력 값} // 생략 가능
          private-key: |
          -----BEGIN EC PRIVATE KEY-----
          
          ... KEY 값
          
          -----END EC PRIVATE KEY-----

😪Spring Cloud Config Client

Client는 매우 쉽다.

의존성 추가

implementation 'org.springframework.cloud:spring-cloud-starter-config'
implementation 'org.springframework.cloud:spring-cloud-starter-bootstrap'

갑자기 bootstrap은 어디서 튀어나온건지 의아할 수 있다.
설정 정보를 추가하기 위해서는 bootstrap을 이용하는데, 2021년도 기준으로 spring cloud 에서는 bootstrap 을 자동으로 읽어오는 기능이 빠져있다.그러므로 spring-cloud-starter-bootstrap 의존성을 추가해줘야 한다.

bootstrap.yaml

application.yaml과 동일한 위치에 bootstrap.yaml을 추가하고 아래의 내용도 함께 추가해준다.

spring:
  cloud:
    config:
      uri: http://localhost:8888
      name: user
      profile: dev

😑이상하단 생각 안들어?

이제 config server를 사용하면 된다.

하지만 여기서 의문점이 생긴다. 설정 파일이 수정되었다는 것은 어떻게 감지하고 전파하는 것일까? 자동으로 해주는 걸까?

아니다. 현재까지의 설정으로는 수동으로 해주어야 한다.
편하게 쓰려고 사용했는데 수동이라니 너무 귀찮다.

다음 글에서는 설정 파일 수정사항을 감지하고 전파하는 것을 자동화 해보자.

profile
A smooth sea never made a skilled sailor

0개의 댓글