리프레시 스코프(Refresh Scope)는 Spring Cloud에서 사용되는 개념으로, Spring Cloud Config와 관련이 있습니다. 주로 동적 속성 갱신에 사용되며, 애플리케이션이 실행 중에 외부 설정 값을 자동으로 갱신할 수 있도록 도와주는 기능입니다.
1. Spring Cloud Config
- Spring Cloud Config는 분산 시스템에서 중앙 집중식 설정 관리를 지원하는 Spring 프로젝트입니다.
- 애플리케이션의 설정 정보를 Git 또는 파일 시스템 등에 저장하고, 애플리케이션이 실행 중에도 이 설정을 동적으로 변경할 수 있습니다.
2. 리프레시 스코프(Refresh Scope)
- 리프레시 스코프는 설정 값을 변경했을 때, 애플리케이션 컨텍스트의 일부 빈을 동적으로 갱신할 수 있는 기능을 제공합니다.
- 주로 애플리케이션이 실행 중일 때 속성이나 빈을 변경하고, 이를 즉시 애플리케이션에 반영하려는 경우에 사용됩니다.
- 리프레시 스코프는 Spring Cloud Config와 함께 사용되며, 외부 설정이 변경되었을 때 변경된 값을 애플리케이션에 자동으로 반영합니다.
3. 리프레시 스코프의 동작 원리
- 리프레시 스코프는
@RefreshScope
어노테이션을 사용하여 특정 빈에 적용됩니다. @RefreshScope
어노테이션이 적용된 빈은 Spring Cloud Config Server에서 설정 값이 변경될 때마다 새로운 값으로 빈을 재생성합니다.@RefreshScope
를 사용하면/actuator/refresh
엔드포인트를 호출하거나,spring.cloud.refresh
를 이용하여 설정을 동적으로 갱신할 수 있습니다.
4. @RefreshScope
사용 예
- 애플리케이션에서 특정 빈을 리프레시 스코프에 적용하면, 해당 빈의 속성 값이 외부에서 변경되었을 때 이를 동적으로 갱신할 수 있습니다.
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;
@Component
@RefreshScope
public class SomeConfig {
@Value("${my.custom.property}")
private String property;
public String getProperty() {
return property;
}
}
- 위 코드에서
@RefreshScope
어노테이션을 적용한SomeConfig
빈은,my.custom.property
값이 변경될 때마다/actuator/refresh
엔드포인트를 호출하면 해당 값이 갱신됩니다.
5. /actuator/refresh
엔드포인트
Spring Boot Actuator의
/actuator/refresh
엔드포인트를 호출하여 애플리케이션 설정을 동적으로 갱신할 수 있습니다.이 엔드포인트는 애플리케이션에서 리프레시 스코프가 적용된 빈들을 다시 초기화하고, 새로운 설정 값을 반영합니다.
예를 들어, POST 요청을 통해
/actuator/refresh
엔드포인트를 호출하면, Spring은 설정 값이 변경된 부분을 자동으로 적용합니다.
curl -X POST http://localhost:8080/actuator/refresh
이 요청을 보내면, @RefreshScope
가 적용된 빈들이 새로운 설정 값으로 갱신됩니다.
6. 리프레시 스코프의 활용
- 실시간 환경 설정 변경: 애플리케이션의 재시작 없이 설정 값을 변경할 수 있어 운영 중에 실시간으로 애플리케이션의 동작을 수정할 수 있습니다.
- 클라우드 기반 애플리케이션: 여러 서비스가 중앙에서 관리되는 설정을 동적으로 갱신해야 할 때 유용합니다.
- 외부 설정 값 갱신: Spring Cloud Config와 함께 사용되어 외부 설정 서버에서 값을 변경할 때 애플리케이션에 즉시 반영할 수 있습니다.
7. 리프레시 스코프의 제한 사항
- 리프레시 스코프는 빈의 상태를 갱신하지만, 애플리케이션 전체를 다시 로드하는 것은 아닙니다. 따라서 일부 상태나 리소스가 유지될 수 있습니다.
- 복잡한 의존 관계를 가진 애플리케이션에서는 전체 시스템에 영향을 주지 않도록 설계해야 합니다.
결론
리프레시 스코프(Refresh Scope)는 Spring Cloud에서 설정 값을 동적으로 갱신할 수 있게 도와주는 기능입니다. @RefreshScope
어노테이션을 사용하여 설정 변경을 즉시 반영할 수 있으며, 이는 /actuator/refresh
엔드포인트를 통해 제어할 수 있습니다. 이 기능은 주로 클라우드 환경에서 실시간으로 애플리케이션의 설정을 변경할 때 유용하게 사용됩니다.
'MSA' 카테고리의 다른 글
allow-bean-definition-overriding (1) | 2024.12.11 |
---|---|
@ConfigurationProperties (0) | 2024.12.11 |
HashiCorp의 Vault (+raft) (0) | 2024.12.11 |
상관관계 ID(Correlation ID) (0) | 2024.12.09 |
온프레미스(On-premises), IaaS(Infra-as-a-Service), CaaS(Container-as-a-Service) (0) | 2024.12.09 |