Skip to main content
duksoo.dev
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

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로 관리하고 있었다.

Read full post gdoc_arrow_right_alt