올리브영 알림톡, SQS 데드락을 넘어선 비결

by DD
5개월 전
조회수 33

SQS 기반 알림톡 발송 시스템에서 DB 커넥션 데드락 발생

SQS 폴링 방식HikariCP 설정의 부적절한 조합이 원인

REQUIRES_NEW 제거SQS 최대 메시지 수 조절로 문제 해결

SQS 폴링과 데드락의 상관관계

SQS는 폴링 방식으로 메시지를 가져오며, 각 메시지 처리 시 별도 스레드를 생성한다. 따라서, MaxNumberOfMessages 설정은 동시에 처리되는 스레드 수를 결정한다. 구체적으로, HikariCPmaximum-pool-size보다 SQS의 MaxNumberOfMessages가 클 경우 데드락 위험이 증가한다.

REQUIRES_NEW 트랜잭션의 함정

REQUIRES_NEW는 항상 새로운 트랜잭션을 생성하여 별도 커넥션을 점유한다. 따라서, 알림톡 발송이력 저장에 REQUIRES_NEW를 사용하면, 알림 1건당 2개의 커넥션이 필요하다. 반면, SQS의 병렬 처리와 결합 시 커넥션 부족으로 데드락이 발생할 수 있다.

데드락 해결을 위한 핵심 전략

데드락 해결을 위해 REQUIRES_NEW 옵션을 제거하여 커넥션 요구량을 줄였다. 따라서, SQS 최대 폴링 메시지 수DB 커넥션 풀 크기 이하로 설정하여 병렬 처리량을 제어했다. 결과적으로, 커넥션 경합을 방지하고 시스템 안정성을 확보했다.

SQS 기반 알림톡 처리에서 발생한 DB 커넥션 데드락 분석기