diff --git a/_posts/2024-01-21-spring-cloud-refresh.md b/_posts/2024-01-21-spring-cloud-refresh.md index 9e508aa..02a0010 100644 --- a/_posts/2024-01-21-spring-cloud-refresh.md +++ b/_posts/2024-01-21-spring-cloud-refresh.md @@ -15,11 +15,11 @@ categories: [Development] 근래에 [요즘 우아한 개발](https://m.yes24.com/Goods/Detail/122535338)이라는 책을 읽으면서 내용 중에 배포 없이 Spring Cloud Config에서 받아오는 프로퍼티를 변경해 서버에 적용하려는 내용을 접했습니다. -이는 단일 장애 지점(SPOF)을 제거하기 위해 [외부 메시지 플랫폼을 이중화](https://techblog.woowahan.com/7724/)하면서 각 외부 플랫폼 연동에 대한 트래픽 분배를 어플리케이션이 실행 중에도 유연하게 변경하려는 의도였습니다. -또, 최종적으로 선택한 방법이 일반적으로 사용하는 Spring Cloud Bus를 이용하기보다 Spring Boot만을 활용해 프로퍼티를 재배포 없이 수정하는 방법이 흥미롭게 느껴져 호기심에 구현해보게 되었습니다. +해당 팀은 [외부 메시지 플랫폼을 이중화](https://techblog.woowahan.com/7724/)하면서 각 외부 플랫폼 연동에 대한 트래픽 분배를 어플리케이션 실행 중에도 변경할 수 있도록 구현해 단일 장애 지점(SPOF)을 제거하려 했습니다. +이를 위해 어플리케이션의 배포 없이 Config 서버의 프로퍼티를 변경함으로 트래픽 분배를 변경하는 방법을 고려했고, 팀에서 최종적으로 일반적으로 사용하는 Spring Cloud Bus를 이용하기보다 Spring Boot만을 활용해 프로퍼티를 재배포 없이 수정하는 방법을 선택했습니다. 이 부분이 흥미롭게 느껴져 호기심에 구현해보게 되었습니다. -### 배포 없이 프로퍼티를 변경 +### 배포 없이 프로퍼티를 변경하는 방법, refresh Spring Boot를 이용하면 로깅 레벨, 데이터 소스 정보, 타임아웃 설정, 환경 변수 등 여러 설정 정보(이하 프로퍼티)를 application.yml 혹은 application.properties 파일에 명시해서 외부화(externalize)할 수 있습니다. 이를 통해 다양한 환경(local, dev, prod 등) 설정을 코드가 아닌 외부 파일에 명시함으로 해당 관심사를 코드에서 분리할 수 있습니다. 책에 나온 사례와 같이 외부 시스템 장애와 같은 기민한 대응을 하려면 어플리케이션 배포 없이도 런타임 환경에서 변경할 수 있어야 합니다. 만약 해당 기능이 비즈니스에서 중요한 역할을 하는 부분이라면 더더욱 조심스럽고 기민하게 다뤄야 합니다.