Spring Config Server 1

작성자 : 조회수 :

보통 스프링 부트 프로젝트를 만들 때 각각의 yml파일에 설정 값들을 기입해 놓곤 했습니다.

 

하나의 프로젝트만 다룬다면 문제 없겠지만 문득

 

여러 개의 프로그램을 사용할 때 만약 공통적으로 똑같은 설정들을 수정해야한다면?

 

이라는 질문이 올라왔고 결국 결론은 두 가지가 나왔습니다.

 

1.     Gradle을 통한 멀티 프로젝트를 이용해 공통적인 Model, Repository, service등을 모아두자!

2.     프로젝트마다 겹치는 공통적인 yml설정들을 모아둔 Config Server도 만들자.

 

입니다.

 

Config Server를 담을 프로젝트를 하나 새로 생성했습니다.

 

들어가는 것은 Config-server 의존성 하나입니다. (모든 프로젝트는 동일하게 자바 11을 사용했습니다.)





이렇게 @EnableConfigServer 를 둡니다.






(그림에서는 빠졌지만 추가적인 yml을 만들어두고 git과 연동해야합니다!)


그리고 공통의 config server를 사용할 서버 프로젝트 들은

 

아래처럼 세가지를 추가해줍니다.

 

(bootstrap, config, actuator 입니다.)





Bootstrap 의존성을 추가 후 application.yml 보다 우선순위가 높은 bootstrap.yml을 만듭니다

 

그리고 아래 코드처럼 config server의 설정된 포트번호를 넣어줍니다

(임의로 바꾸셔도 상관없습니다. config server의 설정포트와 동일해야합니다.)


갑자기 등장한 common-config란 이름은






이런 식으로 git 등록과 함께 yml을 만들었으며

 

yml안에는 제가 공통적으로 사용될만한 설정들을 작성해서 넣어놓은 상태입니다.

 

(yml 파일을 추가하면 반드시 git commit 해줘야하며, yml 파일을 추가 시 등록하고 싶다면

똑같이 name에 추가해주면 됩니다.)




ymlconfig server 프로젝트에 yml을 통해서 등록해놔야 정상 작동합니다

 

중요한 점은 저는 file로 했지만 나중에는 github private repository를 통해서 등록하겠습니다.


Config server의 설정을 사용하는 프로젝트의 yml 입니다.

 

아래처럼 변수로 사용해서 config server의 값들을 받아올 수 있습니다.

(common-config.yml 에서 가져온 설정들입니다.)



하지만 서버를 기동하려면 반드시 config-server 또 열려 있어야 하며

 

만약 common-config.yml 파일이 수정된다면 git commit 이 진행되고 꼭 서버도 재기동해야합니다.

 

그렇게 한다면 번거롭기 때문에

 

Acturator를 사용하는 겁니다.



Config server 외에 서버에서 acturator 의존성을 추가했던 것을 기억하실껍니다.

 

그럼 아래처럼 yml 설정이 가능한데

 

Refresh ,health, beans는 모두 acturator에서 기본적으로 주는 엔드 포인트이며

 

Refreshyml이 변경되어 커밋됐을 때 서버를 재기동 하지 않고 refresh 요청만 준다면

 

알아서 변경사항이 적용되는 것이고

 

Beans는 현재 어플리케이션에 등록된 bean들을 볼수있는 것입니다.




이런 상태로 현재 업로드 상태를 확인합니다.


다만 refresh는 이렇게 post형식으로 해줘야합니다.


정리하자면

 

Yml 등록된 git에 변경사항이나 추가사항이 있다면 git commit을 합니다.

 

각 서버들을 재기동 할 필요 없이 refresh만 해준다면 모두 자동 적용됩니다.

 

 

하지만 이 refresh마저도 다 해줘야 하기 때문에 다음에는 bus를 이용하도록 하겠습니다.

 


출처 : 인프런 스프링-클라우드-마이크로서비스