Spring Cloud Config(feat.RabbitMQ)

현재 사내에서 진행하고 있는 프로젝트는 MSA 구조로 되어있으며, 총 11대의 서버를 사용해 서비스를 나누었다. 각 서비스에는 설정 파일(application.properties)이 존재하는데, 설정 파일을 하나 바꿀 때마다 빌드하고 배포하는 것이 비효율적이어서 설정 파일을 따로 빼는 작업이 필요해졌다.

Spring Cloud Config란?
분산된 환경에서 설정 파일을 외부로 분리할 수 있도록 해주는 서비스
이점1) 여러 서버의 설정 파일을 중앙 서버에서 관리할 수 있다.
이점2) 서버를 재빌드 및 재배포하지 않고 설정 파일의 변경 사항을 반영할 수 있다.


동작 순서
1. 사용자가 설정 파일을 수정 후 git에 push
2. config server는 git에서 최신 설정 값을 가져온다.
3. RabbitMQ(Spring Cloud Bus - 메시지 브로커)를 통해 최신 설정 값이 변경되었다는 이벤트를 각 서비스에 전달한다. (POST 방식 - url: /.../refresh)
4. 이벤트를 받은 각 서비스에서 config server에 최신 설정 값을 요청하고 반영한다.


설정 코드

// 각 서비스 내 application.properties에서는 config-server에 연결하는 코드만 작성
spring.application.name=api-commute
spring.profiles.active=dev

# config-server
spring.config.import=optional:configserver:http://localhost:[포트번호]
// config-server에 등록된 파일 내 실제 구성 정보 코드 작성
spring.application.name=api-commute
spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
server.servlet.encoding.charset=utf-8
server.servlet.encoding.enabled=true
server.servlet.encoding.force=true

# rabbitmq
spring.rabbitmq.host=[host]
spring.rabbitmq.port=[port]
spring.rabbitmq.username=[username]
spring.rabbitmq.password=[password]

// ...그 외 구성 정보들 생략

현재 실제 프로젝트와 구성정보 레포지토리가 따로 구성되어 있지만, git hooks를 사용해서 실제 프로젝트 내부에 config 파일을 생성해서 관리할 수도 있다고 한다.

hooks를 등록해두면 따로 변경 이벤트 url 호출 없이도 자동으로 구성 정보를 변경할 수 있게 해준다. 다만, 사용하려면 외부 ip를 사용해서 접근 가능하도록 만들어야 하는데, 현재 프로젝트는 사내 ip를 사용하기 때문에 접근 불가해서 hooks를 사용하지 않았다고 한다.

참고

좋은 웹페이지 즐겨찾기