Spring/Cloud Config

Cloud Config 구성하기(1) - 구성하는 방법과 이론

anys 2024. 5. 28. 21:14

이번 포스팅에서는 Spring에 있는 Cloud Config를 사용하여 환경변수 서버를 구성하여 프로젝트에 적용을 시켜볼 것이다.

Cloud Config를 사용하는 이유는 여러 가지가 있다.

 

첫 번째로 MSA를 사용하면 여러 서버의 환경변수를 공유해야 하는데 만약 하나의 환경변수가 바뀐다면 여러 개의 프로젝트에서

환경변수의 변동이 일어날 것이다. 이런 상황이 벌어진다면 각각의 프로젝트에 환경변수를 적용시켜야 하는 번거로운 작업이 생긴다

 

번째로 jenkins 같은 CI/CD 사용하게 된다면 깃허브에 있는 코드를 pull 받아서 사용하는데 github 환경변수를올려서는 안 Cloud Config에서 환경변수를 가져와서 사용해야 한다.

 

나는 두 번째의 이유로 Cloud Config라는 것을 알게 되었고 이 글을 통해 구성하는 방법을 공유하고자 한다.

Cloud Config를 구성하기 위해 글을 찾아보았는데 개념이 어려워 보였다. 하지만 굉장히 쉽고 구성하기도 굉장히 편리하다. 그러니 걱정하지 않아도 된다.

 

Cloud Config Server는 위의 그림과 같이 동작을 한다. 설명을 하자면

Application에서 환경 설정을 달라고 Cloud Config에 요청을 하면 Git Repository에 올라가 있는 .yaml파일을 가져와 Application에 전달해 준다. 그럼 모든 Application은 같은 .yaml파일을 전달받아 사용하게 된다.

 

Cloud Config Server와 Client Application을 만들어 구성하겠습니다.

모든 예제는 깃허브에 올려놨습니다.(참고해 주세요) Github Repository는 Public으로 해야 합니다

 

Cloud Config Server를 먼저 구성해 보도록 하겠습니다.

Dependencies에서 ConfigServer를 추가해 줍니다.

 

서버 포트는 8888로 설정해 주었습니다.

uri - 깃허브 주소를 설정해 주어야 합니다.

search-paths - CloudConfigFile폴더 밑의 내용부터 시작합니다.

default-label - 브랜치를 선택합니다.

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/anys34/Spring-Cloud-Config-Server
          search-paths: CloudConfigFile/**
          default-label: main

 

Cloud Config Server에서는 Application파일 부분에 @EnableConfigServer를 붙여줍니다.

@SpringBootApplication
@EnableConfigServer
public class CloudConfigServerApplication {

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

}

 

이제 스프링 부트를 실행하면 사용이 가능합니다. 하지만 yaml파일을 Git Repository에 올려야 합니다.

아까 CloudConfigFile을 기준으로 시작을 한다고 정의했다.

맨 위에는 application폴더들을 만들어줄 수 있다.

application아래에는 profile들의 폴더를 만들 수 있다.

profile아래의 폴더에는 {application}-{profile}.yaml의 파일을 만들어 줄 수 있다.

.yaml의 파일에는 적용하고 싶은 설정의 내용을 적으면 된다.

 

그리고 localhost:8888/{application}/{profile}으로 요청을 하면 위와 같이 설정된 내용이 나올 것이다.

 

이렇게 하면 Cloud Config Server의 설정이 끝났다.

 

다음으로 Client를 구성해 볼 것이다. Client는 Cloude Config Server에 요청을 하여 설정을 가져와 적용시킬 것이다.

Cloud Confg Server와는 반대로 Dependencies에서 Config Client를 적용시킬 것이다.

 

spring:
  config:
    import: optional:configserver:http://localhost:8888/
  cloud:
    config:
      name: config
      profile: dev

위는 Client의 application.yaml이다.

 

import - optional:configserver:http://localhost:8888/ 을 붙여주면 된다.

name - 적용하고 싶은 application의 이름을 적용해 주면 된다.

profile - 적용하고 싶은 profile의 이름을 적용해 주면 된다.

 

이렇게 하면 Client의 설정은 다 끝났다. 굉장히 간단하다.

 

마지막으로 설정이 잘 되었는지 Controller를 만들어서 요청을 하면 적용된 설정의 내용을 불러와지게 해 볼 것이다.

 

@RestController
public class Controller {
    @Value("${test.profile}")
    private String profile;

    @GetMapping
    public String getProfile() {
        return profile;
    }
}

 위의 코드를 작성하면 test.profile에 있는 내용을 가져와서 출력해 준다

 

이렇게 잘 출력되는 것을 알 수 있다.

 

이것을 하다 보면 의문점이 들 수 도 있습니다.

.yaml의 파일을 깃허브 퍼블릭으로 올려두면 보안적 측면에서 매우 좋지 않다. 그래서 Github Repository를 private로 만들어야 하는데 다음 포스팅에서는 repository를 private로 하여 만드는 것을 해볼 것입니다.