피드로 돌아가기
Spring Cloud Config & Bus-Refresh 도입기
올리브영 테크블로그올리브영 테크블로그
Backend

Spring Cloud Config & Bus-Refresh 도입기

올리브영이 Spring Cloud Config Server와 Bus-Refresh를 도입해 설정 변경 배포 시간을 20분에서 1분 이내로 단축

2025년 11월 4일8intermediate

Context

마이크로서비스 환경에서 단 하나의 설정값(예: 온라인 상품 조회 API 엔드포인트)을 변경하려면 연관된 모든 서비스를 재빌드하고 배포해야 했다. 이는 서비스 재시작을 강제했으므로 운영 효율성이 낮았고, 긴급 상황 대응이 느렸다.

Technical Solution

  • Spring Cloud Config Server를 도입해 Git 기반의 중앙 집중식 설정 저장소 구성: 모든 마이크로서비스의 설정을 하나의 Git 저장소에서 버전 관리 및 롤백 가능하게 통합
  • Spring Cloud Bus(Amazon MQ 기반)와 /actuator/busrefresh 엔드포인트를 연동: 설정 변경 시 모든 서비스에 동시에 메시지 브로드캐스트
  • TeamCity 트리거를 통해 Git push 감지 시 자동으로 busrefresh 호출: 개발자의 수동 개입 없이 자동화
  • @RefreshScope 어노테이션을 통해 외부화된 설정(@Value로 주입된 값)만 런타임에 갱신: 서비스 재시작 불필요
  • AWS Parameter Store 대신 Spring Cloud Config Server 선택: Git 버전관리와 복잡한 프로파일 구조화 지원의 우월성

Impact

  • 설정 변경 배포 시간을 20분에서 1분 이내로 단축
  • 서버 재시작 없이 변경사항을 즉시 반영

Key Takeaway

마이크로서비스 환경에서 설정 외부화(Config Server) + 이벤트 기반 갱신(Bus-Refresh)을 결합하면 배포 없는 런타임 설정 변경이 가능해진다. 단, @RefreshScope는 빈 레벨의 갱신만 지원하므로 DTO 필드처럼 컴파일 타임에 구조가 고정되는 요소는 적용 대상에서 제외해야 한다.


MSA 환경에서 여러 서비스가 공유하는 설정값(API 엔드포인트, DB URL 등)을 관리할 때 Spring Cloud Config Server + Spring Cloud Bus 아키텍처를 도입하면 배포 시간 없이 설정을 동기화할 수 있다. 다만 Spring Boot 버전(2.3.x 이하는 bootstrap.yml, 2.4.x 이상은 application.yml 설정)에 따라 구성이 달라지므로 의존성과 설정 파일 형식을 정확히 맞춰야 한다.

원문 읽기