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

+ Recent posts