Spring Cloud 구성 동적 새로 고침: Config Data에서 RefreshScope까지
기준: Spring Boot 3.x, Spring Cloud 202x.x, Spring Cloud Alibaba 및 Nacos 2.x. 버전은 반드시 공식 호환성 매트릭스를 따라 조합해야 합니다.
1. 시작 시 로딩과 런타임 새로 고침
최신 Spring Boot 프로젝트에서는 Config Data Import를 기본으로 사용합니다.
YAML
spring:
application:
name: order-service
config:
import: optional:nacos:order-service.yaml
Config Data는 애플리케이션 컨텍스트가 생성되기 전에 초기 Environment를 구성하며, 기존 bootstrap.yml과는 동일하지 않습니다. Bootstrap은 레거시 프로젝트나 특정 초기화 시나리오에서 여전히 사용할 수 있지만, 신규 프로젝트의 기본 진입점으로 사용해서는 안 됩니다.
2. RefreshScope의 실제 의미
@RefreshScope는 scoped proxy를 사용해 대상 객체를 캐시합니다. 새로 고침할 때 대상 객체를 파괴하고, 다음 호출에서 다시 생성합니다. 즉, 임의의 Bean 필드가 즉시 변경되는 것은 아닙니다. 연결 풀, 스레드 풀, 원격 클라이언트 또는 로컬 캐시를 사용하는 Bean은 기존 리소스를 명확히 닫고 새 리소스를 생성해야 합니다.
3. Nacos 구성
YAML
spring:
cloud:
nacos:
server-addr: <NACOS_SERVER_ADDR>
username: <NACOS_USERNAME>
password: <NACOS_PASSWORD>
config:
file-extension: yaml
refresh-enabled: true
실제 속성 경로는 현재 starter의 구성 메타데이터를 기준으로 합니다. 계정, 비밀번호 또는 프로덕션 주소를 Git에 커밋하지 마세요.
4. 일반적인 새로 고침 흐름
TEXT
Nacos 발견 변경 -> 클라이언트가 새로 고침 이벤트 발행 -> Spring이 Environment 업데이트
-> ConfigurationProperties 재바인딩 -> RefreshScope가 대상 캐시 정리
-> 다음 호출에서 새 객체 생성
5. 프로덕션 경계
의존성과 이미지 버전을 고정하고, Actuator 새로 고침 엔드포인트를 보호하며, 구성 변경에 대한 감사, 승인, 카나리 배포 및 롤백을 마련하고, 새로 고침 실패와 Bean 재구성 실패를 모니터링하세요.