Redis Connection Pool이 끊긴 연결을 계속 내주는 이유
Connection Pool은 연결을 재사용해서 성능을 올려주지만, 풀 안의 연결이 죽었는지 살았는지는 별개 문제다.
EKS 업그레이드 중 Redis pod가 재시작되면서 Pool 안의 연결이 전부 끊겼는데, Pool이 유효성 검증 없이 끊긴 연결을 그대로 반환했다. Lettuce에 auto-reconnect이 있는데도 복구가 안 된 이유와, testOnBorrow/testWhileIdle 설정의 차이를 정리한다.
| 항목 | 내용 |
|---|---|
| 증상 | RedisSystemException, pod restart 전까지 복구 불가 |
| 원인 | Connection Pool의 testOnBorrow 미설정 |
| 스택 | Spring Boot 3.5.0 + Lettuce 6.5.5 + Commons Pool2 |
| 해결 | testOnBorrow=true 또는 testWhileIdle=true 추가 |
| 재발 조건 | Redis pod와 앱 pod가 동시에 재생성되는 경우 |
order-api는 Redis 연결을 Lettuce + Commons Pool2 기반 Connection Pool로 관리하고 있었다.