← 테크곳간 목록으로

tech.inflab.com · 2024. 09. 02.

JDBC setReadOnly 호출 이슈 해결기

AI 엔지니어링 브리핑

AWS Aurora용 JDBC 래퍼와 Spring의 읽기 전용 트랜잭션 설정이 충돌해 발생한 간헐적 오류를 내부 동작 분석과 읽기 전용 데이터 소스 분리로 해결한 사례입니다.

문제 & 배경
  • 문제 & 배경: 조회 트랜잭션을 끝내거나 시작하는 과정에서 AWS JDBC 래퍼가 데이터베이스 상태 확인 쿼리를 먼저 실행하면서 트랜잭션이 다시 진행 중인 상태가 되고, 그때 읽기 전용 설정을 바꾸려 해 간헐적으로 오류가 발생했습니다.
기술 & 해결책
  • 기술 & 해결책: 디버깅으로 Spring의 setReadOnly 호출과 AWS 래퍼의 topology 쿼리 실행 순서를 확인한 뒤, LazyConnectionDataSourceProxy의 setReadOnlyDataSource를 사용해 읽기 전용 데이터 소스를 별도로 지정하고 트랜잭션마다 읽기 전용 상태를 다시 바꾸지 않도록 구성했습니다.
교훈 & 주의점
  • 교훈 & 주의점: 드라이버와 프레임워크가 커넥션을 정리하고 장애 대응 정보를 조회하는 내부 동작까지 함께 살펴야 간헐적 오류의 원인을 찾을 수 있으며, 기능을 제거하기보다 기존 고가용성을 유지하면서 설정 충돌을 피하는 방법을 우선 검토해야 합니다.
원문 읽기 ↗
내용이 비슷해요

내용이 비슷한 글을 먼저 보여드려요. 같은 문제나 해결책을 다룬다는 뜻은 아니에요.