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

Compare with Current View Page History

« Previous Version 6 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 와같이 자신의 어플리케이션 설정을 탐색하기 때문입니다. 

Spring boot 은 기본적으로 application.peroperties 라는 기본설정을 사용하지만, application.yml 설정도 인식이됩니다.

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 디렉토리로 환경 분리룰을 적용할수 있습니다.

실행 환경을 지정하여 실행하기

// 메이븐 실행 ( 로컬에서 주로 디버깅 수행시)
mvn spring-boot:run -Dspring.profiles.active="local"


// Stand Alone for Spring ( 배포후 자바 실핼시 )
java -jar application.jar --spring.profiles.active=staging --spring.config.location=C:\Config
spring.application.name=lobbyapi
spring.cloud.config.uri=http://localhost:8888

설정은 원격지에 있으나,원격지 설정을 찾기위해 위 두가지는 로컬에서 파일혹은 전달인자로 필수로 지정해줘야하는 설정입니다. 

그외

이것은 스테이징/운영에서도 이점이 있지만 로컬개발환경에서 다음과같은 이점이 있을수 있습니다.

일반적으로 마이크로한 서비스를 자신의 로컬컴퓨터에 구동시키고 디버깅환경을 구축하는것은 중요합니다.

하지만 설정의 복잡성으로 DB를 포함하여 안정적인 개발환경에 조인하는 방법이 마땅하지 않습니다.

이럴때 설정 서버를 사용하여 이미 설정이 구조화가 되어있다고 하면, 큰 노력없이 변칙적인 개발환경 셋팅이 가능할것입니다.

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

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


참고자료: 






  • No labels