피드로 돌아가기
Your circuit breaker stops at the service layer. Slow SQL needs one too.
Dev.toDev.to
Backend

SQL Fingerprint 기반 MyBatis 인터셉터로 DB 커넥션 풀 고갈 방지

Your circuit breaker stops at the service layer. Slow SQL needs one too.

lanyxp2026년 6월 17일15intermediate

Context

서비스 레이어의 Circuit Breaker는 Endpoint 단위로만 동작하여 특정 SQL 쿼리의 지연으로 인한 전체 서비스 장애를 막지 못함. 인덱스 누락 등의 사유로 발생한 Slow Query가 DB Connection을 점유하여 Connection Pool 고갈 및 서비스 전체의 Cascade Failure를 유발하는 구조적 한계 노출.

Technical Solution

  • MyBatis Interceptor 레이어에 Circuit Breaker를 구현하여 DB 요청 전 단계에서 Fast-fail 처리 수행
  • SQL Fingerprint 기법을 통해 파라미터를 제거한 쿼리 구조(Shape) 단위로 장애 상태를 관리
  • SELECT와 DML의 리스크 프로파일 차이를 반영하여 SQL 타입별 독립적인 Timeout 및 Failure Threshold 설정
  • MD5 해시 기반의 SQL 식별자를 생성하여 메모리 내 상태 캐시를 운영하는 효율적 매칭 구조 설계
  • 전역 공유 상태가 아닌 인스턴스별 로컬 상태 관리를 통해 분산 환경에서의 복잡도 제거 및 오버헤드 최소화
  • Timeout 발생 시에만 Breaker를 작동시켜 비즈니스 예외와 인프라 지연을 명확히 구분

- 서비스 레이어 외에 DB 인터페이스 레이어의 Circuit Breaker 도입 검토 - 쿼리별 개별 관리를 위해 SQL 텍스트가 아닌 Fingerprint 기반의 식별자 추출 로직 적용 - 데이터 변경(DML)과 조회(SELECT) 쿼리에 대해 서로 다른 장애 임계치 설정 - Connection Pool 고갈 방지를 위해 DB 전송 전 단계에서 차단하는 Fast-fail 메커니즘 구현

원문 읽기