
BULK 처리 Write에 집중해서 개선해보기
두줄요약
JPA의 건별 INSERT 한계를 JDBC 배치 INSERT로 개선한 사례를 소개했습니다. PK 추론으로 1:N 외래키를 연결해 처리 시간과 DB 부하를 줄였습니다.
문제 상황
- 대량 INSERT 시 애플리케이션·DB 리소스 급증과 장애 위험
- JPA
saveAll()의 건별 Write 쿼리 발생 - 부모·자식 1:N 데이터의 PK·외래키 연결 제약
해결 방법
- JDBC
batchUpdate()기반 다중 VALUES INSERT 적용 last_insert_id()와 Auto Increment 순차 PK를 이용한 부모 PK 추론- 추론한 PK로 자식 데이터의 외래키 설정 후 별도 BULK INSERT
성능/운영 포인트
- member 1만 건과 article 약 3만 건 기준 JPA 78초, JDBC 1.7초 결과
- INSERT 쿼리 횟수 감소에 따른 처리 속도 및 DB 부하 개선
- PK 증가 규칙과 생성 전략에 의존하는 방식
트레이드오프
- 복잡한 외래키 관계일수록 애플리케이션 로직 복잡도 증가
- JPA 영속성 컨텍스트와 JDBC 혼용 시 상태 불일치 주의
- 객체 추상화 편의성과 직접 쿼리 성능 간 선택


