ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Springcloud Config Server 설정 방법(git 활용)
    Programming/Spring 2021. 9. 17. 16:18

    $ ssh-keygen -m PEM -t rsa -b 4096 -C "your email address" -f config-server.id_rsa

    일반적으로 Spring 어플리케이션을 개발하게되면 설정파일(properties, yml)을 로컬에서 관리하도록 합니다. 그러나 config server를 활용하면 원격으로 부터 설정을 불러와서 애플리케이션을 구동할 수 있기 때문에 운영 및 관리가 간단해 집니다. 특히 구동 중 설정을 변경해야할 경우가 있는데 config server를 이용하면 간단하게 원격 설정을 변경하는 것으로 반영이 될 수 있도록 합니다. 

    config server는 다양한 설정 리포지토리를 지원합니다. 전통적인 file방식부터, git, db 등의 연동이 가능합니다.

    본 글에서는 git을 이용한 방법을 설명합니다.

     

    1. private repository

    먼저 git repository를 생성합니다.

    그리고 설정파일들을 미리 올려놓습니다.

    설정파일의 파일 구조는 {application-name}-{profile}.yml 또는 {application-name}-{profile}.properties 입니다.

     

    2. config-server에서 repository에 접근할 수 있도록 권한을 주기 위해 ssh key를 생성하여 git repository에 등록합니다.

    ssh key가 없다면 아래 명령어를 통해 생성합니다.

    $ ssh-keygen -m PEM -t rsa -b 4096 -C "your email address" -f config-server.id_rsa

     

    gitlab 기준 해당 리포지토리에서 Settings-Repository-Deploy Keys에 공개키(pub)를 등록합니다.

     

    3. spring cloud config 프로젝트 생성

    build.gradle의 dependencies 참고.

    dependencies {
        implementation 'org.springframework.cloud:spring-cloud-config-server'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        implementation group: 'org.springframework.boot', name: 'spring-boot-configuration-processor'
        implementation group: 'org.springframework.boot', name: 'spring-boot-starter-actuator'
    }

    ConfigServiceApplication

    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.config.server.EnableConfigServer;
    
    @SpringBootApplication
    @EnableConfigServer
    public class ConfigServiceApplication {
    
        public static void main(String[] args) {
            SpringApplication.run(ConfigServiceApplication.class, args);
        }
    
    }

    application.yml

    privateKey에는 앞서 생성한 ssh key의 private key파일 text전문을 복사하여 붙여넣습니다.

    server:
      port: 8888
    spring:
      application:
        name: config-service
      cloud:
        config:
          server:
            git:
              uri: enter your git ssh url
              ignore-local-ssh-settings: true
              privateKey: |
                -----BEGIN RSA PRIVATE KEY-----
                Proc-Type: 4,ENCRYPTED
                DEK-Info: AES-128-CBC,1241234123123123124124
    
                edc3p7L/o3HRNlBEvyixViGRz+Cohh4wJa78EJV2Rp7c7paH8NQOxzhlAN2ijZ/i
                .............
                -----END RSA PRIVATE KEY-----
              strict-host-key-checking: false
              passphrase: enter your ssh password

     

    4. config-server를 실행하면 정상적으로 동작합니다.

    테스트는 postman이나 브라우저에서 http://localhost:8888/{application-nam}/{profile} 으로 호출해 봅니다.

    만일 특정 설정 파일을 불러오고 싶다면 다음과 같이 콜을 해봅니다.

    http://localhost:8888/{application-nam}/{profile}/{label}/log4j2.xml

    ex) http://localhost:8888/clientService/dev/master/log4j2.xml

     

    5.spring cloud config client 설정

    build.gradle

    plugins {
        id 'org.springframework.boot' version '2.2.8.RELEASE'
        id 'io.spring.dependency-management' version '1.0.11.RELEASE'
        id 'java'
    }
    
    configurations {
        all {
            exclude group: 'org.springframework.boot', module: 'spring-boot-starter-logging'
        }
    }
    
    group = 'com.test.test'
    version = '0.0.1-SNAPSHOT'
    sourceCompatibility = '1.8'
    
    repositories {
        mavenCentral()
    }
    
    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter'
        testImplementation 'org.springframework.boot:spring-boot-starter-test'
        implementation('org.springframework.boot:spring-boot-starter-web')
        implementation('org.springframework.boot:spring-boot-starter-log4j2')
        implementation('org.springframework.cloud:spring-cloud-starter-config')
        implementation group: 'org.springframework.cloud', name: 'spring-cloud-starter-config', version: '2.2.8.RELEASE'
        implementation('org.springframework.boot:spring-boot-starter-actuator')
    }
    
    test {
        useJUnitPlatform()
    }
    

    log4j2 적용 및 테스트를 위해 configurations 부분 및 spring-boot-starter-log4j2 추가

    server:
      port: 8889
    spring:
      profiles: dev
      application:
        name: clientService
      cloud:
        config:
          uri: http://localhost:8888
          name: ${spring.application.name}, ${spring.application.name}-${spring.profiles}-db
    
    logging:
      config: http://localhost:8888/workerService/dev/master/log4j2.xml
    
    management:
      endpoints:
        web:
          exposure:
            include: refresh

    cloud.config.name 부분에 ${spring.application.name}-${spring.profiles}-db 처럼 추가를 하면 다중 설정 파일을 로드 할 수 있음.

    ex) clientService-dev-db.yml 파일 추가 로드 가능

    logging.config 설정시 log4j2 설정파일 로드 가능.

     

    반응형
Designed by Tistory.