BULK 처리 Write에 집중해서 개선해보기
유형환 컬리 · 컬리 기술 블로그
AI 핵심 요약
대량 쓰기에서 행별 INSERT가 애플리케이션과 DB에 부담을 주는 문제를 해결하기 위해, 글은 JPA와 JDBC의 쓰기 방식을 비교합니다. JPA `saveAll()`은 엔티티별 ID 매핑 등의 이유로 대개 개별 INSERT를 실행하므로, 단순 데이터는 JDBC `batchUpdate`로 묶어 처리하는 방법을 제시합니다. 부모·자식 테이블처럼 외래 키가 필요한 경우에는 부모 데이터를 먼저 벌크 삽입하고 첫 자동 증가 PK를 바탕으로 키를 계산해 자식 데이터를 구성한 뒤 함께 삽입합니다. 테스트에서는 회원 1만 건과 게시글 약 3만 건 처리에 JPA 78초, JDBC 1.7초가 걸렸으며, 성능과 구현 복잡도 사이에서 상황에 맞는 도구를 선택해야 한다고 설명합니다.
- JPA의 `saveAll()`은 이름과 달리 보통 행마다 INSERT를 실행하므로, 실제 SQL 로그로 동작을 확인하세요.
- JDBC `batchUpdate`는 여러 행을 묶어 DB 왕복과 쓰기 부하를 줄이는 데 활용할 수 있습니다.
- 자동 증가 PK를 연속적으로 추론하는 방식은 DB의 키 생성 규칙과 동시성 조건을 확인한 뒤 적용해야 합니다.
- JPA와 JDBC를 함께 쓰면 JDBC 변경 사항이 영속성 컨텍스트에 반영되지 않을 수 있으므로 상태 동기화에 주의하세요.
소개
애플리케이션, DB 모두 행복한 BULK 처리
비슷한 학습 자료
컨퍼런스 if kakao
Spring Batch 애플리케이션 성능 향상을 위한 주요 팁 (김남윤, Yun)
컨퍼런스 if kakao
[2023.07.18. 제2회 kakao tech meet 발표] 배치 애플리케이션이 어느 구간에서 쉽게 느려지는지 파악하고, 이를 해결하기 위한 방법에 대해 다룹니다. 특히, IO 작업이 처리 시간에 큰 영향을 주는데, 이를 해결하기 위해 병렬 처리 및 벌크 IO 처리를 활용하여 IO 작업의 효율성을 높이는 성능 최적화 방법에 대해 다루게 됩니다. 배치 애플리케이션 개발자, 대량 처리에 관심있는 분이 듣길 추천합니다. 발표자: @yun.cheese(김남윤) 카카오페이 정산팀 Yun 입니다. Yun Blog를 운영하고 있으며, 서버 개발자로서 좋은 코드 설계와 아키텍처에 관심이 많습니다. #springbatch #대량처리성능최적화 💬 발표자 인터뷰: https://tech.kakao.com/2023/08/01/techmeet-spring-batch/ ✨ 카카오테크 페이스북: https://www.facebook.com/kakaotech ✨ 카카오테크 톡채널: http://pf...
백엔드 데이터베이스
문서 호선우
데이터가 있었는데요, 아니 없어요
문서 박제희
JPA 덕분에 DB에서 삽질한 이야기
문서 허재진