Backend/Spring Cloud

Spring Cloud Config Server

야뤼송 2022. 6. 23. 13:11
반응형

1.Spring Cloud Config Server의 필요성

 

각각의 Micro Service가 가지고 있어야 할 Application 구성 정보 파일의 내용이 변경이 될 경우 빌드-배포 과정이 발생하게 된다.

 

Spring Cloud Config Server를 통해 구성 정보 파일(application.yml)을 관리함에 따라 구성 정보 파일이 변경되어도 Micro Service의 별도 빌드-배포 없이 적용이 가능하다.

 

어플리케이션 배포 파이프라인을 통해 DEV-STG-PROD 환경에 맞는 구성 정보 사용 가능하다.

 

2.Spring Cloud Config 설정 파일 읽기 우선 순위

 

설정 파일은 크게 다음의 위치에 존재하면 다음의 순서로 읽혀진다. 마지막에 읽혀지는 설정 파일의 값의 우선순위가 높다.
동일한 값의 설정 정보 존재하는 경우 마지막에 읽어진 값으로 덮어 씌워진다.

 

1. 프로젝트의 application.yml

2. 프로젝트의 application-{profile}.yml

3. spring.config.name에 명시된 {file-name}

4. spring.config.name에 명시된 {file name}-{profile}

5. 설정 저장소의 application.yml

6. 설정 저장소의 {application name} / {application name}-{profile}.yml
(ex: user-service/user-service-prod.yml)

 

3. Spring Cloud Config 설정 파일 저장 방법

 

설정 파일이 저장되는 Config 저장소는 Git repository, File System 등등이 존재하며 주로 Git Repository를 사용한다.

 

4. Spring Cloud Config 구현 - Config Server

 

Cloud Config Server는 Config 저장소와 연결되어 중간 역할을 수행하며 이를 위해 Cloud Config Library 추가해야한다.

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-config-server</artifactId>
</dependency>

 

Library 추가 후 Application class에 Config Server역할을 위해 @EnableConfigServer 어노테이션을 선언해줘야 한다.

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

 

서버 정보 설정을 위해 application.yml 파일에 설정 정보를 입력해준다. local file system을 이용할 경우와 git repository를 이용하는 경우 각각 다르게 한가지로만 설정해줘야 한다.

server:
  port: 8888

spring:
  application:
    name: config-service
    
  #local file system을 이용하기 위한 profiles.active 값
#  profiles:
#    active: native
    
  cloud:
    config:
      server:
        ## local file system을 이용하는 경우 ##       	
        #native:
        #  search-locations: file://${user.home}/{config file location}
          
        ## git Repository를 이용하는 경우 ##
        #git:
          # git local repository 를 이용하는 경우
          #uri: file:///Users/${user.home}/git/{git local location}
          
          # git remote repository를 이용하는 경우
          uri: git hub url

 

 

5. Spring Cloud Config 구현 - Micro Service Client 

 

MSA Serivce Client에도 Spring Cloud Config 를 이용하기 위해서는 별도의 작업을 진행해야한다.

 

먼저 Spring Cloud Config Library와 Actuator 2개의 Library를 추가해줘야 한다. Actuator는 Spring에서 제공하는 Library로 해당 application의 상태를 종합적으로 정리해서 Client에 제공하는 역할은 한다.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-config</artifactId>
</dependency>

 

Spring Cloud Config Client를 위해서는 bootstrap.yml 파일을 새로 생성해서 정보를 추가해줘야한다. bootstrap.yml에는 config server의 uri, name, profiles정보를 입력해준다.

# bootstrap.xml

spring:
  cloud:
    config:
      uri: http://127.0.0.1:8888
      name: ecommerce
profiles:
  active: dev

 

단, spring-boot 2.4 이후부터는 bootstrap.yml을 사용하기 위해서는 라이브러리를 추가하거나 spring.cloud.bootstrap.enabled = true 설정을 통해 bootstrap.yml을 활성화 해줘야 한다.

bootstrap.yml 없이 application.yml에 설정시에는 아래와 같이 설정해줘야한다.

spring:
  config:
    import: optional:configserver:http://host:port
    name: user-service
    #spring.cloud.config.profile : Spring Cloud Config Server에 전달할 profiles 목록
    profile: ${spring.profiles.active}
    label: develop

 

설정 완료 후 서비스를 기동하게 되면 Spring Cloud Server로부터 정보를 받아왔다는 로그를 확인할 수 있다.

 

Config Server에 등록한 정보를 Micro Service에서 정상적으로 가져오는 것을 확인 할 수 있다.

 

6. Spring Cloud Config 설정 파일의 변경 적용

 

앞서 이야기한 것과 같이 설정파일에서 내용이 변경되는 경우 내용 수정 후 Service의 빌드-배포가 발생하게 된다. 

Spring Cloud Config에서는 Spring의 autuator/refresh를 이용하여 빌드-배포 없이 바로 적용이 가능하다.

 

autuator 기능의 경우 5번 Client 구현 시 관련 Dependency를 추가했기 때문에 별도 개발 없이 actuator/refresh 호출을 통해 바로 적용이 가능하다.

 

actuator/refresh를 호출하게 되면 Spring Cloud Server로부터 정보를 다시 받아오게되면서 설정파일 정보가 변경되게 된다.

 

해당 내용은 인프런 이도원님의 "Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)"를 듣고 정리한 내용입니다.

 

반응형