
빌링 3.0 성능 이슈 개선 기록 - Part 1
두줄요약
대량 인보이스 발송에서 발생한 쿼리 지연과 커넥션 고갈 원인을 분석했습니다. 복합 인덱스·풀 설정·누수 수정·분할 처리로 안정성을 개선했습니다.
문제 상황
- 월별 인보이스 약 200건 일괄 발송 시 DB 쿼리 타임아웃, SMTP 전송 지연, DB 커넥션 고갈 발생
- 체크박스 선택마다 세부 조회 API를 호출하고 PDF 생성·발송을 동시 처리하는 프론트엔드 중심 흐름
원인 분석
KeyId그룹화와 최신batchDate조회에 필요한 복합 인덱스 부재- MySQL 최대 커넥션 초과와 IAM 서비스의
rows.Close()누락에 따른 커넥션 누수 - SMTP 서버 전송 제한과 대량 동시 요청 집중
해결 방법
KeyId ASC,batchDate DESC순서의 복합 인덱스 생성- MySQL
max_connections상향, 백엔드MaximumPoolSize제한, Go 조회 로직의rows.Close()보완 - 결과 미사용 쿼리의
db.Query를db.Exec로 전환하고 생성형 AI로 유사 누수 패턴 탐색
적용해볼 점
- 세부 조회를 체크 시점이 아닌 실제 발송 시점으로 이동
- 인보이스 조회·PDF 생성·발송 작업을 50건 단위로 분할 처리
- 향후 백그라운드 작업 기반 발송 구조와 관측성·부하 테스트 체계 검토



