스프링 클라우드 컨피그 갱신 되지 않는 이슈(feat. 서비스 디스커버리)

스프링 클라우드 컨피그가 갱신되지 않는다?
- 스프링 클라우드 컨피그 서버를 구축했다면 프로퍼티를 어떻게 갱신할지 고민할 것이다 
- 우선 스프링 클라우드 컨피그를 갱신하는 방법에 대해서 살펴보자 
스프링 클라우드 컨피그 갱신하는 방법
- 애플리케이션을 재시작 한다 
- actuator의 refersh를 사용하여 변경된 프로퍼티를 사용하는 애플리케이션만 업데이트 해준다 
- bus-refresh를 사용하여 스프링 클라우드 컨피그를 사용하는 모든 클라이언트를 업데이트 해준다 
bus-referesh를 사용하여 모두 갱신하기
- 애플리케이션을 매번 재시작하는건 스프링 클라우드 컨피그를 사용하는 메리트가 없다 
- refresh를 사용하여 특정 애플리케이션에만 업데이트해주는 것도 매번 프로퍼티를 갱신할 때마다 사용되고 있는 클라이언트를 알아야 하므로 번거로울 수 있다 
- 결국 bus-refresh를 사용하는게 관리하기도 편하고 심플할것 같다 
- bus-refresh를 사용하는 방법은 간단하다 
- 프로퍼티가 변경되는 시점에 스프링 클라우드 서버에 bus-refresh를 호출해주면 된다 
- 스프링 클라우드 서버는 바라보고 있는 클라이언트 모두에게 프로퍼티를 갱신해줄 것이다 
github webhook 사용하기
- bus-refresh API를 호출하는 시점을 github에서 푸시 이벤트가 발생할때 호출하도록 웹훅을 설정하였다 

그럼 왜 갱신이 되지 않나?
- github 웹훅 내역을 보면 response status code는 200으로 정상적으로 호출되었다고 기록되어 있다 
- 그 이유는 서비스 디스커버리 때문이었다 
- 하나의 프로퍼티를 사용하는 애플리케이션이 여러개 일 수도 있는데 각각의 클라이언트 정보가 고유하지 않아서 스프링 클라우드 컨피그 서버에서 클라이언트에게 갱신할 수 있는 정보를 전달하지 못하는 이슈가 있었다 
- 그래서 스프링 클라우드 컨피그를 사용하는 클라이언트들은 본인의 고유값 정보를 서버에 전달해주어야 한다 
spring:
  cloud:
    bus:
      id: ${vcap.application.name:${spring.application.name:application}}:${vcap.application.instance_index:${spring.profiles.active:${local.server.port:${server.port:0}}}}:${vcap.application.instance_id:${random.value}}Last updated
Was this helpful?