본문으로 이동
문서

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

[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...

백엔드 데이터베이스

문서 강민주

토스페이먼츠 정산 플랫폼에서 많은 양의 정산 데이터 처리 과정에서 생긴 지연 이슈를 처리한 방법을 소개해요.

백엔드 데이터베이스 네트워크

문서 호선우

COMMIT, MVCC 그리고 SET AUTOCOMMIT

데이터베이스

문서 박제희

DB에 저장을 했는데, 조회가 안 돼요

백엔드 데이터베이스

문서 김소라

Kafka Connect와 JDBC 커넥터를 이용해 DB 데이터를 쉽게 Kafka로 전송하는 방법과 발생 가능한 문제를 해결하는 방법을 공유합니다.

데이터베이스 데브옵스 · 인프라

문서 허재진

컬리 데이터 파이프라인의 BigQuery 도입 결과 및 효과

데이터베이스 데브옵스 · 인프라