Hello, Freakin world!

[Spring Cloud Config] 1.컨피그 서버 만들기 본문

Spring Cloud/Config

[Spring Cloud Config] 1.컨피그 서버 만들기

johnna_endure 2021. 2. 10. 16:50

대략적인 동작 방식

 

서비스 A의 소스를 그레이들이나 메이븐으로 빌드할 경우 jar 형식의 아티팩트가 만들어집니다.

서비스 A의 구성 정보에는 config 서버의 url 정보가 있습니다. jar가 실행될 때 Spring Cloud Config 내부에서 config 서버로 요청을 보내 구성 정보를 주입받습니다.

 

config 서버는 구성 정보를 다양한 방식으로 저장할 수 있습니다. 서버 내의 파일시스템에 저장할 수도 있고, Git Hub... 이외에도 다양한 방식의 백엔드를 이용해 저장이 가능합니다. 이 예제에선 깃허브를 사용하겠습니다.

 

시나리오

최대한 간단한 방식으로 구현하려고 합니다.

구성 정보는 간단하게 msg=hello world! 만 가지는 프로퍼티 or yml 파일입니다.

서비스는 이 구성 정보를 주입받아 서비스를 시작하게 되고 외부에서 /hello 라는 엔드 포인트를 통해 다시 주입받은 hello world!를 출력하도록 합니다.

 

버전 정보

Spring boot 2.4.2, Java 11

 

 

Config 서버

Config 서버를 구현해보도록 하겠습니다.

스프링 이니셜라이저를 이용해 Spring Cloud Config Server 의존성을 추가하고 프로젝트를 생성합니다.

 

build.gradle

plugins {
    id 'org.springframework.boot' version '2.4.2'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
}

group = 'my.springboot'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

repositories {
    mavenCentral()
}

ext {
    set('springCloudVersion', "2020.0.1")
}

dependencies {
    implementation 'org.springframework.cloud:spring-cloud-config-server'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

test {
    useJUnitPlatform()
}

 

그리고 부트스트랩 클래스에 @EnableConfigServer 애너테이션을 추가합니다.

@EnableConfigServer
@SpringBootApplication
public class ConfigserviceApplication {

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

}

이걸로 추가할 코드는 끝입니다!

 

다음은 컨피그 서버에 구성 정보를 저장한 깃허브의 url을 알려주기 위해 프로퍼티 파일을 작성합니다.

 

application.yml

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/johnna-endure/config_exam
          search-paths: webclient

 

bootstrap.properties

spring.application.name=configserver

 

위 두 파일은 resource 폴더에 위치합니다.

bootstrap 에 적힌 구성 정보들은 서비스가 시작되기 전 부트스트래핑 단계에서 적용되는 구성 정보들을 명시하기 위함입니다.

보통 애플리케이션 이름과 같은 정보가 여기에 포함됩니다.

 

application.yml에 깃허브 리포지포티 url을 지정했습니다.

지포지토리에는 최상위에 webclient(뒤에 작성할 서비스 이름)라는 폴더있고 그 안에 dev, default, prod 등 다양한 구성 정보가 포함돼있습니다.

 

위의 설정들만으로도 Spring Cloud Config 내부에서 구성 정보에 접근 가능한 엔드 포인트를 자동 생성해줍니다.

 

리포지토리의 디렉토리를 기준으로 엔드포인트가 생성됩니다.

현재 리포지토리의 루트에 webclient 디렉토리가 있고 그 안에 webclient.yml, webclient-dev.yml가 있는 상태입니다.

이런 경우 http://컨피크서버 호스트 네임/webclient/default, http://컨피크서버 호스트 네임/webclient/dev 가 생성됩니다.

리포지토리에 저장된 구성 파일은 서비스명-프로파일.yml 식으로 구성되고 프로파일이 생략될 경우, default 프로파일이 되며 default 엔드포인트가 생성됩니다.

 

search-path 속성은  깃허브 루트 경로를 기준으로 구성파일을 찾을 상대경로를 의미합니다.

 

엔드 포인트를 호출해 구성 정보를 조회하는 걸로 이번 단락을 마무리 하겠습니다.

맨 아래를 보시면 hello, world가 잘 반환된 걸 확인할 수 있습니다.

 

 

2편에는 webclient 서비스를 만들어 컨피그 서버와 연결시켜 보도록 하겠습니다.

Comments