openfeign2 @Retry를 붙였는데 재시도가 0회였다? Resilience4j에서 4xx와 5xx를 가르는 법 FeignClient에 @Retry와 @CircuitBreaker를 붙여놓고 "이제 복원력은 챙겼다"고 생각하기 쉽다. 나도 그랬다. 그런데 막상 장애 상황을 들여다보니, 재시도는 한 번도 안 돌고 있었고, 외부 서버는 멀쩡한데 우리 회로가 OPEN으로 넘어가 우리 정상 호출까지 막고 있었다. 원인은 단 하나의 사실에서 출발했다. Resilience4j는 던져진 예외의 "직접 타입"만 본다. cause는 까보지 않는다. 이 글은 그 한 문장에서 파생되는 함정들과, 4xx/5xx를 제대로 갈라서 self-DoS를 막는 패턴을 정리한 기록이다.IntroResilience4j의 @Retry와 @CircuitBreaker는 던져진 예외 인스턴스의 직접 타입만 instanceof로 매칭한다. e.cause는 보지.. 2026. 6. 1. Spring Cloud OpenFeign의 child context가 내 ErrorDecoder를 조용히 죽이고 있었다 Spring Cloud OpenFeign 4.x + Spring Boot 3.x 환경에서 Feign Client별 ErrorDecoder가 예고 없이 무력화되는 문제를 만났다. 원인은 child ApplicationContext의 빈 오버라이딩 정책이었고, 해결은 단순했지만 "왜 그런지"를 이해하는 데 시간이 걸렸다. 같은 길을 걷는 분들을 위해 기록을 남긴다.Spring Cloud OpenFeign은 Feign Client마다 격리된 child ApplicationContext를 만든다.Spring Boot 3.x부터 allowBeanDefinitionOverriding = false가 기본값이라, default 설정의 ErrorDecoder가 먼저 올라오면 per-client ErrorDecoder가.. 2026. 4. 19. 이전 1 다음