Page History
개요
어플리케이션에 사용되는 설정을 중앙화하여 관리하는것은 여러가지 이점이 있으며
어플리케이션을 클라우드에 분산하기위해서 중요한 요소중에 하나입니다.
고전적인 문제점을 먼저 체크해보겠습니다.
고전적 설정의 문제점
- 설정이 배포파일에 포함되어, 설정 변경시 재 배포되어야한다.
- 설정파일이 로컬파일에 분리되었다고 해도, 각 로컬에 접근후 설정파일을 변경후 재 실행되어야한다.
- 설정이 파편화되어 설정의 차이점을 비교하기가 어렵습니다.
중앙화의 이점
- 설정파일을 수정후, 자동혹은 수동으로 변경전략으로 일괄 변경가능함으로 재 배포될 필요가 없습니다.
- 설정 내역이 중앙화되어 있어서 차이점 비교가 쉽습니다.
- 필요하면 콘피그 서버자체를 개인화가 가능하며, 의존 서버 포트변경이 가능하며 로컬에서 도커사용시 유용합니다.
설정요약
Config 중앙 서버
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
spring.application.name="config-service"
server.port=8888
spring.cloud.config.server.git.uri=http://git.webnori.com/scm/sb2/cloudconfig.git |
설정 서버가 띄워질 포트와 , 설정저장소를 지정합니다.
어플리케이션
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
spring.application.name=front-web
spring.cloud.config.uri=http://localhost:8888 |
Config 중앙서버의 접속정보와 자신의 어플리케이션이름 설정을 합니다.
여기서 어플리케이션 이름이 중요한 이유는, 중앙 서버에서 front-web.yml 와같이 자신의 어플리케이션 설정을 탐색하기 때문입니다.
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
@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
Code Block | ||||||
---|---|---|---|---|---|---|
| ||||||
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 디렉토리로 환경 분리룰을 적용할수 있습니다.
그외
확장: 콘피그서버는 구성 노드의 스케일 인-아웃/ 장애가난 노드의 제외등 서버의 가용성을 체크하는 기능으로 사용하기엔
그 성격이 다릅니다. 이 경우 유레카와 상호연동이 됩니다. 유레카는 다음장에서 다룹니다.
더 많은 정보:
- https://cloud.spring.io/spring-cloud-config/multi/multi__spring_cloud_config_server.html
- https://spring.io/guides/gs/centralized-configuration/