성능 개선일지 2: Bulk Insert로 DB 성능 향상
AI Store에서 AI코딩으로 만들어진 앱을 만나보세요!
지금 바로 방문하기

OneTime] 🚀 성능 개선일지 2 (feat. Bulk Insert)

카테고리

프로그래밍/소프트웨어 개발

서브카테고리

웹 개발

대상자

  • *백엔드 개발자** (Spring 프레임워크 사용자, 대규모 데이터 삽입 작업 필요자)
  • *난이도**: 중간 (JDBC, Hibernate, MySQL 설정 이해 필요)

핵심 요약

  • saveSchedules 단계에서 28,800개의 INSERT 연산으로 성능 병목 발생
  • rewriteBatchedStatements=true 설정 없이 Bulk Insert 사용 시 성능 개선 효과 미적용
  • JdbcTemplate.batchUpdate() 활용으로 @GeneratedValue(strategy = IDENTITY) 제약 우회

섹션별 세부 요약

1. 문제 식별: 병목 지점 분석

  • StopWatch를 통해 saveSchedules가 전체 처리 시간의 99%를 차지함 확인
  • 30분 단위 스케줄 생성 시 28,800개의 INSERT 연산 발생
  • @GeneratedValue(strategy = GenerationType.IDENTITY)로 인한 Hibernate Batch Insert 제약

2. 해결 방안: `Bulk Insert` 도입

  • 일반 INSERT와 Bulk Insert의 SQL 쿼리 구조 비교
  • JdbcTemplate을 활용한 직접 삽입 방식으로 IDENTITY 전략 유지
  • BatchPreparedStatementSetter 구현을 통한 대량 삽입 처리

3. 성능 개선 결과

  • rewriteBatchedStatements=true 설정 전: 16.56s → 설정 후: 0.41s (97.5% 개선)
  • saveSchedules 단계 소요 시간: 17.35s → 0.09s (99% → 42%로 줄임)
  • createQrCode 단계도 개선 필요성 확인 (다만 미미한 성능 개선으로 우선순위 하락)

결론

  • 대량 데이터 삽입 시 Bulk Insert 활용 필수 (예: JdbcTemplate.batchUpdate() 사용)
  • MySQL JDBC 드라이버 설정에 rewriteBatchedStatements=true 명시
  • 성능 병목 분석을 위해 StopWatch 도구 활용 추천