본문 바로가기
Spring Cloud

Spring Cloud - Spring Cloud Config Server 와 github 연동

by sinabeuro 2022. 5. 26.
728x90

안녕하세요. 

2021년 8월 이후 변경된 github 정책으로 인해 변경된 Spring Cloud Config Server와 github 연동방식을 포스트하려합니다.

 

간략하게 Spring Cloud Config Server를 소개하고 github의 Personal access tokens 설정 방법을 다루겠습니다.

 

Spring Cloud Config Server

Spring Cloud Config Server는 MSA 를 구성하는 서버 중 하나로

다른 마이크로 서버의 공통으로 사용하는 프로퍼티 값들을 공유하는 역할을 하는 서버입니다.

 

하드코딩해서 공통으로 사용하는 값을 yml 파일에 저장하여 관리 합니다.

yml 파일을 Spring Cloud Config Server에서 호출하고,

또 다시 다른 마이크로 서버에서 Spring Cloud Config Server에서 호출한 yml 파일의 값들을 사용할 수 있게 됩니다.

 

Spring Cloud Config Server 구성도

 

git에 저장하는 파일 프로젝트는 아래와 같이 메인 디렉토리 안에 yml 파일로만 구성되게 만듭니다.

Spring Cloud file 구성

yml 파일은 profile 에 따라 "{yml명}-{profile}.yml" 형식으로 지정하시면 됩니다.

profile을 지정하지 않으면 default 파일로 인식됩니다.

 

yml에는 다른 마이크로 서버에서 시용할 값을 저장하시면 됩니다.

마지막으로 git에 업로드하는 것으로, git에 저장할 프로퍼티 프로젝트(Spring Cloud file)가 완성됩니다.

즉, Spring Cloud file은 yml 파일만 저장하고

Spring Cloud Config Server로 해당 yml 파일들을 호출합니다.

 

 

Spring Cloud Config Server 설정

Spring Cloud file 를 호출하기 위한 서버를 프로젝트를 생성합니다.

Spring Cloud Config Server를 만들기 위해서는 아래와 같은 의존성이 필요합니다.

    // spring cloud config server
    implementation 'org.springframework.cloud:spring-cloud-config-server'
    // eureka client
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    // autuator
    implementation 'org.springframework.boot:spring-boot-starter-actuator:2.6.4'
    // spring cloud bus
//    implementation 'org.springframework.cloud:spring-cloud-starter-bus-amqp'

유레카를 통해서 Spring Cloud Config Server 를 관리할 수 있습니다. 

유레카 서버에 관해서는 다음 기회에 다루어 보겠습니다.

 

spring cloud bus 의존성을 설정하게 되시면, rabbitmq 와 연동해서 사용할 수 있습니다.

rabbitmq 와 autuator 기능 중 bus-refresh를 통해서 변경된 Spring Cloud file 프로퍼티 내용을 실시간으로 반영할 수 있습니다.

마이크로 서버의 재배포 없이 Spring Cloud file 프로퍼티를 반영하는 것이죠!

 

rabbitmq 를 사용하지 않으면 마이크로 서버를 일일이 개별 배포해서, Spring Cloud file 변경 내용을 반영하면 됩니다.

아무튼 rabbitmq도 다음 기회에 다루어 보겠습니다!!

 

@SpringBootApplication
@EnableConfigServer     // 여기가 제일 중요함!!
@EnableDiscoveryClient
public class SpringCloudConfigApplication {

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

}

메인 클래스에 @EnableConfigServer 어노테이션을 붙여줌으로써, Spring Cloud Config Server 를 설정할 수 있습니다.

 

이제 가장 중요한 yml 파일 설정입니다.

# application.yml
server:
  port: 8888

spring:
  application:
    name: config-service
  cloud:
    config:
      server:
        git:
          uri: https://github.com/sinabeuro53/spring-cloud-file.git
          username: sinabeuro  # github 계정
          password: ghp_Eij9XYrOHUdou*****************
          
.......

application.yml 파일에 spring.application.cloud.config.server.git 정보를 꼭 기입해야합니다.

(해당 yml 파일에 유레카 서버 설정은 생략했습니다.)

 

git 정보에는 위에서 만들었던 Spring Cloud file의 git 주소를 지정하면 됩니다.

 

public repository로 설정 되었다면 username과 password를 지정할 필요가 없습니다.

하지만 public repository로 설정 되었다면 username과 password를 지정해야합니다.

 

spring.application.cloud.config.server.git.password 를 지정하는 것이 가장 큰 문제 난관일 것입니다.

2021년 8월 이후 변경된 github 정책으로 인해 변경으로 인해

github 에서 Personal access tokens 을 발급받아야 합니다.

 

 

github의 Personal access tokens

먼저 github 홈페이지에서 로그인 합니다. 

https://github.com/

Settings 로 이동합니다.

 

왼쪽 탭에 생성된 목록 중 가장 아래에 있는 Developer settings 로 이동합니다.

 

 

Personal access tokens 탭에서 Generate new token을 통해서 생성할 수 있습니다.

 

Personal access tokens 의 만료 기간은 아래와 같이 설정할 수 있습니다.

 

custom 설정으로 만료 기간을 설정 시 최대 1년 까지 지정할 수 있습니다.

저는 테스트 목적으로 사용할 것이기에 no expiation 을 지정해서,

만료 기간이 없는 반영구적인 토큰을 생성했습니다.

 

토큰 생성을 완료하면 토큰 암호키가 발급되는데

해당 키를 Spring Cloud Config Server의 spring.application.cloud.config.server.git.password 에 입력합니다.

이렇게 하면 Spring Cloud Config Server와 github 연동이 끝나게 됩니다.

 

이전에는 spring.application.cloud.config.server.git.private-key 방식을 사용해서 대칭키나 비대칭키를 사용해서 연동했지만, 2021년 8월 이후부터는 대칭키, 비대칭키 방식으로 연동이 되지 않는 것 같습니다.

확실하지는 않습니다만, 제가 직접 했을 시도 했을 때는 대칭키, 비대칭키 방식으로 연동이 되지 않습니다.

저와 같은 문제가 있다면 Personal access tokens 방식을 사용해보는 것이 좋을 것 같아서 해당 내용을 다루어보았습니다.

 

기회가 된다면 마이크로 서버에서 Spring Cloud Config Server 를 호출해서 사용하는 방법도 다루어 보겠습니다.

728x90

'Spring Cloud' 카테고리의 다른 글

[Spring Cloud] 12Factors  (0) 2022.03.29

댓글