Spring Cloud Alibaba Sentinel: Boot 3 연동, 규칙 영속화와 장애 경계
기준 구성: Spring Boot 3, Spring Cloud 202x.x, 대응하는 Spring Cloud Alibaba BOM, Sentinel 1.8.x 및 Nacos 2.x. 버전은 공식 호환성 매트릭스에 맞춰 조합해야 합니다.
1. Sentinel이 해결하는 문제
Sentinel은 리소스에 대한 트래픽 제어, 서킷 브레이킹 및 디그레이드, 시스템 보호, 핫 파라미터 레이트 리미팅을 지원합니다. Sentinel이 해결하는 것은 서비스 과부하와 장애 전파이며, 데이터 일관성, 메시지 신뢰성 또는 비즈니스 재시도가 아닙니다.
일반적인 호출 체인:
HTTP / RPC / 方法调用
-> Sentinel 资源入口
-> Slot 链
-> 规则检查
-> 放行或 BlockException
2. Spring Boot 3 연동
의존성은 Spring Cloud Alibaba BOM으로 관리하세요. starter 버전을 개별적으로 조합하지 마세요. Boot 3은 Jakarta 네임스페이스를 사용하므로 이전 버전의 Boot 2 의존성을 함께 사용할 수 없습니다.
spring:
application:
name: order-service
cloud:
sentinel:
enabled: true
eager: false
transport:
dashboard: <SENTINEL_DASHBOARD_HOST>:8719
port: 8719
실제 속성명은 현재 starter의 구성 메타데이터를 기준으로 합니다. Dashboard 포트와 클라이언트 하트비트 포트는 모두 내부망 또는 보호된 네트워크에 두어야 합니다.
3. 비즈니스 리소스 보호
@SentinelResource(
value = "order.create",
blockHandler = "blocked",
fallback = "fallback")
public Order create(CreateOrderCommand command) {
return service.create(command);
}
public Order blocked(CreateOrderCommand command, BlockException ex) {
throw new TooManyRequestsException();
}
public Order fallback(CreateOrderCommand command, Throwable ex) {
throw new ServiceUnavailableException(ex);
}
blockHandler는 Sentinel의 레이트 리미팅 또는 디그레이드 예외를 처리하고, fallback은 비즈니스 실행 중 발생한 예외를 처리합니다. 모든 예외를 “레이트 리미팅”으로 변환하면 실제 장애를 감출 수 있으므로 변환하지 마세요.
4. 규칙 영속화
규칙을 Dashboard 메모리에만 생성하면 클라이언트를 재시작한 뒤 규칙이 사라질 수 있습니다. 운영 환경에서는 Nacos 같은 외부 데이터 소스를 사용해 트래픽 제어, 디그레이드, 핫스팟 및 시스템 규칙을 영속화하고, namespace, group, dataId, 인증 및 롤백 정책을 명확히 구성해야 합니다.
규칙 변경에는 감사, 그레이드 롤아웃 및 버전 관리가 필요합니다. Dashboard 자체는 완전한 운영용 구성 거버넌스 시스템이 아닙니다.
5. Web 및 Feign 연동
Spring MVC, WebFlux, RestTemplate 및 Feign의 리소스 명명 규칙과 인터셉터 처리는 관련 어댑터 모듈이 담당합니다. 연동을 활성화한 후에는 다음을 확인해야 합니다:
- URL이 정규화되어 ID마다 별도의 리소스가 생성되지 않는지 확인합니다.
- HTTP 메서드가 리소스 이름에 포함되는지 확인합니다.
- BlockException이 올바른 상태 코드를 반환하는지 확인합니다.
- Feign 재시도와 Sentinel fallback이 부작용을 중복 실행하지 않는지 확인합니다.
6. 운영 경계
모든 의존성과 이미지 버전을 고정해야 합니다. Dashboard와 Actuator를 보호하고, 규칙 변경 권한을 제한하세요. 블록 수, 거부 수, 예외율, RT, 스레드 풀 및 다운스트림 연결 풀을 모니터링해야 합니다. Sentinel은 타임아웃, 연결 풀 상한, 멱등성 보장 및 비즈니스 수준의 디그레이드를 대신할 수 없습니다.
소스 코드를 분석할 때는 실제 의존성 버전을 기준으로 삼아야 합니다. 자동 구성 진입점은 spring.factories에서 AutoConfiguration.imports로 마이그레이션될 수 있으므로, 클래스명과 초기화 순서를 다른 버전에 그대로 복사해 적용하면 안 됩니다.