기존 엑셀 업로드에 사용하는 insert 방식은 saveAll()인데
프로젝트를 진행하며 최대 1,000건 정도의 insert를 테스트 했기때문에 조금 느리더라도 그러려니 했다.
하지만 10만건, 30만건, 100만건을 테스트 해본 결과 실행 시간이 너무 느리게 느껴졌고
리팩토링을 하는 김에 insert방식을 최적화 해보기로 했다.
현재 saveAll() 방식으로 엑셀 업로드를 했을때 실행 시간을 정리한 표이다.
saveAll() | 수행 시간 |
10만건 | 37초 |
30만건 | 103초 |
100만건 | 325초 |
다양한 대량의 데이터 insert 방식
- 순수 JDBC 기반 : JDBC Batch, JdbcTemplate.batchUpdate()
- MyBatis 기반 : for-each + Mapper, SqlSession + ExecutorType.BATCH
- JPA 기반 : saveAll(), bulk insert (native query)
- 네이티브 SQL 기반 : JdbcTemplate, nativeQuery in JPA
- 외부 라이브러리, Spring Batch, jOOQ, QueryDSL (native)
많은 방식 중에서 이번 프로젝트에서 엑셀 다운로드때 집계함수를 사용해서 mybatis를 사용했기 때문에
saveAll(), for-each + Mapper,SqlSession + ExecutorType.BATCH 3개의 성능을 비교해보려고 한다.
'프로젝트' 카테고리의 다른 글
엑셀 100만건 업로드(엑셀 파싱 문제) 트러블 슈팅 (2) (0) | 2025.04.23 |
---|---|
엑셀 100만건 업로드(100MB 레코드 제한) 트러블 슈팅 (1) (0) | 2025.04.17 |