You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[ Core ] Redis 장애 시 rate limit 이 fail-open 하지 못하고 민감 경로 설정이 무효다 #87
전 구간 기본 rate limit 인 RateLimitInterceptor 에 두 가지 결함이 있다.
1. fail-open 이 절반만 적용된다
DataAccessException 을 잡는 try 블록이 increment 만 감싸고 있고, redisTemplate.getExpire(key) 는 보호 밖에 있다.
Redis 장애가 그 경로에서 나면 그대로 500 이 되어, 카운터를 못 세는 것 때문에
서비스 전체가 멈춘다. DataAccessException 이 아닌 실패(opsForValue() 가 null 인 경우 등)도
마찬가지로 새어 나간다.
이 애플리케이션에는 /api/v1 로 매핑된 컨트롤러가 하나도 없다. BaseController 의 @RequestMapping("/api/v1") 은 하위 클래스가 전부 덮어쓴다.
즉 로그인·가입이 낮은 한도(30/분)가 아니라 일반 한도(120/분)로 처리돼 왔다.
3. 엔드포인트별 상한 부재
POST /chatbot/chat 은 요청 한 건이 곧 유료 LLM 호출인데 전역 300/분만 적용된다. @RateLimit 어노테이션은 잘 구현돼 있으나 사용처가 /auth/login 한 곳뿐이다.
또 perUser=true 인데 키를 IP 로 만들어, NAT 뒤 사용자들이 한도를 나눠 쓰고
반대로 IP 를 바꾸면 우회된다.
✅ To Dos
TTL 조회를 포함해 카운터 관련 런타임 실패 전체를 fail-open 처리
민감 엔드포인트 목록을 실제 /auth/* 경로로 교체
챗봇·가입·인증코드 발송/검증에 @RateLimit 부착
AOP 키를 IP 대신 인증 principal 우선으로
운영 프로파일에서 RATE_LIMIT_TRUST_XFF 검토 (프록시 뒤라 IP 집계가 무의미)
Activity