목록 보기
대용량 데이터 등록
백엔드

대용량 데이터 등록

넥스트리
넥스트리
2023년 7월 13일

두줄요약

대용량 메타데이터 등록 시간을 줄이기 위해 saveAll, 배치 인서트, 비동기 병렬 처리를 단계적으로 적용했습니다. 그 결과 등록 시간을 2분 내외로 단축했습니다.

문제 상황

  • monolithic + SQL mapping 구조에서 XML SQL을 파싱해 메타데이터로 저장할 필요
  • 프로젝트당 5만 건 이상, 클라우드 등록 10분 소요, 프로젝트 수 증가 시 시간 예측 어려움
  • 기존 save 기반 중첩 등록으로 커넥션, 인덱싱, 커밋 비용 증가

해결 방법

  • saveAll 적용으로 여러 save 호출을 하나의 트랜잭션으로 묶어 등록 비용 절감
  • 연관 ID를 미리 발행하는 채번 방식과 Cdo의 genId 도입으로 선등록 구조 전환
  • Persistable와 creation 플래그로 isNew 검사 생략, 배치 인서트와 배치 사이즈 설정으로 추가 개선
  • @Async와 CompletableFuture, ExecutorService를 활용한 병렬 배치 등록으로 최종 속도 개선

다음 읽기

#JPA 주제를 이어서 읽기

JPA 배치 인서트 vs JDBC배치 인서트

대용량 데이터 등록에서 JPA 배치와 JDBC 배치를 직접 비교해 성능을 확인했습니다. 단일 MySQL 환경에서는 JDBC 템플릿 배치를 선택해 생산성과 속도를 함께 높였습니다.

넥스트리
넥스트리
백엔드

댓글 0

댓글을 작성하려면 로그인이 필요합니다.

댓글을 불러오는 중...