본문 바로가기
공부/프로그래밍

[SpringBoot] Cloud Config Server-Github에 설정파일 두고 사용하기

by demonic_ 2018. 7. 10.
반응형

Spring Cloud Config Server 가 무엇인지 간단히 설명드리자면,


모든 어플리케이션은 설정이 필요합니다. DB접속 정보라든가, Server의 주소, 포트 그 외 다수의 정보들이 있는데 이것들을 매번, 서버별로 관리하자니 여간 불편한 것이 아니죠.

그래서 application.properties 파일을 여러개 나누는 방법으로 하고 Tomcat 구동시 설정값을 주어서 읽는 파일을 변경하는 방법으로 발전하기도 했습니다.


문제는 설정파일이 변경하게 되면 다시 빌드, 배포를 해야 한다는 점에서 여전히 불편한 점이 있었습니다. 톰캣 설정에 익숙치 않은 분들에게 혼란을 주기도 했고요.


게다가 요즘은 대기업 개발 이야기를 들어보면 서버 갯수가 엄청나게 늘어나기도 하는데, 설정하나 바뀌었다고 올라가 있는 모든것을 일일히 바꿀수도 없는 노릇입니다. 이것들을 중앙에서 관리하게 하여 효율성을 올릴 수 있게 됩니다.



이미지 출처: http://blog.leekyoungil.com/?p=352




github에 설정파일을 갖을 경우 설정 내용을 수정하더라도 즉각 반영되지만

반대로 노출의 위험이 있을 수 있으니 참조하는 수준으로 사용하시는게 좋겠습니다.



환경은 다음과 같습니다.

Spring Boot 2.x 

spring-cloud-config-server

github



깃헙에 새로운 프로젝트를 생성하겠습니다.




Create new file 을 이용해서 파일 2개를 생성합니다.

project1-real.yml, project1-test.yml


각각의 파일에 다음 내용을 넣었습니다.

# project1-real.yml 파일
server:
  name: project1-real
  message: REAL 서버입니다


# project1-test.yml 파일
server:
  name: project1-test
  message: 테스트 서버입니다


이제 Spring Boot 에 설정을 해보겠습니다.



1. build.gradle 설정

메이븐을 사용하시는 분은 아래 사이트에서 확인하시면 됩니다.

https://cloud.spring.io/spring-cloud-config/



1. build.gradle 설정
메이븐을 사용하시는 분은 아래 사이트에서 확인하시면 됩니다.
https://cloud.spring.io/spring-cloud-config/


buildscript {
    ext {
        springBootVersion = '2.0.3.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'

group = 'kr'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}


ext {
    springCloudVersion = 'Finchley.RELEASE'
}

dependencies {
    compile('org.springframework.cloud:spring-cloud-config-server')
    testCompile('org.springframework.boot:spring-boot-starter-test')
}

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



2. @EnableConfigServer 추가

SpringBoot 를 사용할때 구동되는 main 클래스가 있는곳에 위의 어노테이션을 추가해주세요.

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.config.server.EnableConfigServer;

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



3. application.yml 파일을 수정해주세요.

여기서는 다른 포트와 중복되서 사용되지 않도록 8888로 설정했습니다. 

spring.cloud.config.server.git.url 에 이전에 만든 github 주소를 적어주세요.

만약 만들기 귀찮으시다면 변경하지 않아도 진행 가능합니다.

server:
  port: 8888

spring:
  cloud:
    config:
      server:
        git:
          uri: https://github.com/lemontia/SpringCloudConfigRepository.git



4. 서버를 띄우고 URL - GET 방식으로 호출합니다.

호출할 때에는 설정파일을 기준으로 하시면 됩니다.

위에서 설정파일을 project1-test.yml 로 만들었기에 아래와 같은 방법으로 호출합니다.

http://localhost:8080/project1/test

# 호출결과
{  
   "name":"project1",
   "profiles":[  
      "test"
   ],
   "label":null,
   "version":"49eaed4b3ebc8aabb27d39c9f6652244999dbaaa",
   "state":null,
   "propertySources":[  
      {  
         "name":"https://github.com/lemontia/SpringCloudConfig.git/project1-test.yml",
         "source":{  
            "server.name":"project1-test",
            "server.message":"테스트 서버입니다"
         }
      }
   ]
}



5. github 에 있는 설정파일 수정 후 결과

수정을 하면 즉각 반영이 되는지 확인해보겠습니다.



# project1-test.yml 파일 수정 전

server:

  name: project1-test

  message: 테스트 서버입니다

# 호출결과
{  
   "name":"project1",
   "profiles":[  
      "test"
   ],
   "label":null,
   "version":"49eaed4b3ebc8aabb27d39c9f6652244999dbaaa",
   "state":null,
   "propertySources":[  
      {  
         "name":"https://github.com/lemontia/SpringCloudConfig.git/project1-test.yml",
         "source":{  
            "server.name":"project1-test",
            "server.message":"테스트 서버입니다"
         }
      }
   ]
}



# project1-test.yml 파일 수정 후

server:

  name: project1-test

  message: 테스트 서버입니다

  message2: 수정적용여부 확인

# 호출결과
{  
   "name":"project1",
   "profiles":[  
      "test"
   ],
   "label":null,
   "version":"2d1eca7d72da500f0f29ec20036eaace87f5639a",
   "state":null,
   "propertySources":[  
      {  
         "name":"https://github.com/lemontia/SpringCloudConfig.git/project1-test.yml",
         "source":{  
            "server.name":"project1-test",
            "server.message":"테스트 서버입니다",
            "server.message2":"수정적용여부 확인"
         }
      }
   ]
}





관련 코드는 깃헙에 올려두었습니다.

설정파일

https://github.com/lemontia/SpringCloudConfigRepository

설정서버

https://github.com/lemontia/SpringCloudConfig_GIT



공식 홈페이지:

https://cloud.spring.io/spring-cloud-config/


참조 사이트:

http://lng1982.tistory.com/292

http://blog.leekyoungil.com/?p=352




반응형

댓글