You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 2 Next »

개요

어플리케이션에 사용되는 설정을 중앙화하여 관리하는것은 여러가지 이점이 있으며 

어플리케이션을 클라우드에 분산하기위해서 중요한 요소중에 하나입니다.

고전적인 문제점을 먼저 체크해보겠습니다.

고전적 설정의 문제점

  • 설정이 배포파일에 포함되어, 설정 변경시 재 배포되어야한다.
  • 설정파일이 로컬파일에 분리되었다고 해도, 각 로컬에 접근후 설정파일을 변경후 재 실행되어야한다.
  • 설정이 파편화되어 설정의 차이점을 비교하기가 어렵습니다.


중앙화의 이점

  • 설정파일을 수정후, 자동혹은 수동으로 변경전략으로 일괄 변경가능함으로 재 배포될 필요가 없습니다.
  • 설정 내역이 중앙화되어 있어서 차이점 비교가 쉽습니다.
  • 필요하면 콘피그 서버자체를 개인화가 가능하며, 의존 서버 포트변경이 가능하며 로컬에서 도커사용시 유용합니다.



설정요약

Config 중앙 서버

application.properties
spring.application.name="config-service"
server.port=8888
spring.cloud.config.server.git.uri=http://git.webnori.com/scm/sb2/cloudconfig.git

설정 서버가 띄워질 포트와 , 설정저장소를 지정합니다.

어플리케이션

application.properties
spring.application.name=front-web
spring.cloud.config.uri=http://localhost:8888

Config 중앙서버의 접속정보와 자신의 어플리케이션이름 설정을 합니다.

여기서 어플리케이션 이름이 중요한 이유는, 중앙 서버에서  front-web.yml 와같이 자신의 어플리케이션 설정을 탐색하기 때문입니다. 


GreetingConroller.java
@RefreshScope
@RestController
public class GreetingController {
    // Config Server Test
    @Value("${message:Hello default}")
    private String message;

    @RequestMapping("/message")
    String getMessage() {
        return this.message;
    }
}

스프링에서는  로컬에서 설정을 읽어온것과 같은 방식으로 사용하면 됩니다.

어플리케이션이 로드될시 중앙서버에서 이미 설정값을 읽어왔기때문입니다.

여기서 RefreshScope 어노테이션은 , 설정변경시 노드 재시작없이 적용가능하게 합니다.


API 자체 모니터링툴인 actuator를 내장하면 변경적용 명령이 가능합니다.

curl localhost:8080/actuator/refresh -d {} -H "Content-Type: application/json"

설정 저장소 분리

git:http://git.webnori.com/scm/sb2/cloudconfig.git

front-web.yml
message: "hello, spring cloud -default"
---
spring:
  profiles: local
server:
  port: 8080
message: "hi, spring cloud -local"

---
spring:
  profiles: dock-local
server:
  port: 80
message: "hello, spring cloud -doc local"
---

설정 저장소는 , 코드 저장소가 아닌 설정저장소로 분리되어 관리가 되는것이 좋으며

yml은 한가지 파일에서 다양한 환경의 파일을 관리할수 있게하며 필요하면

파일 or 디렉토리로 환경 분리룰을 적용할수 있습니다.


그외

확장: 콘피그서버는 구성 노드의 스케일 인-아웃/ 장애가난 노드의 제외등 서버의 가용성을 체크하는 기능으로 사용하기엔

그 성격이 다릅니다. 이 경우 유레카와 상호연동이 됩니다. 유레카는 다음장에서 다룹니다.



더 많은 정보:






  • No labels