본문 바로가기
MSA

리프레시 스코프(Refresh Scope)

by xogns93 2024. 12. 11.

리프레시 스코프(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 엔드포인트를 통해 제어할 수 있습니다. 이 기능은 주로 클라우드 환경에서 실시간으로 애플리케이션의 설정을 변경할 때 유용하게 사용됩니다.