"벌크 인서트(Bulk Insert)"는 한 번에 여러 개의 데이터를 데이터베이스에 삽입하는 작업일반적으로 SQL에서 INSERT INTO 구문을 반복적으로 여러 번 실행하는 대신, 한 번에 많은 데이터를 넣어서 성능을 높이고 실행 시간을 줄이는 데 사용
Bulk Insert의 장점
1. 성능 향상
- 여러 건을 한 번에 삽입하기 때문에 DB 연결 횟수가 줄고, 트랜잭션 오버헤드가 감소합니다.
- 특히 수천 건 이상의 데이터를 처리할 때 효과가 큼.
2. 처리 시간 단축
- 반복적인 INSERT보다 전체 소요 시간이 훨씬 짧아짐.
3. 리소스 절약
- CPU, 메모리, 네트워크 자원 소모가 줄어듦.
4. 배치 처리에 적합
- 배치 작업, 데이터 마이그레이션, 로그 저장 등에 유리함.
Bulk Insert의 단점
1. 에러 처리 어려움
- 하나의 레코드라도 에러가 나면 전체 삽입이 실패할 수 있음.
- 예: 제약조건 위반, 데이터 타입 오류 등
- 일부 DB에서는 에러가 난 레코드만 건너뛰는 옵션이 없거나 복잡함.
2. 트랜잭션 제어 어려움
- 너무 많은 데이터를 한 트랜잭션에 담으면 롤백이 느리거나 부담이 큼.
- 중간 커밋을 하거나 나눠서 넣는 로직이 필요할 수 있음.
3. JPA 같은 ORM과의 궁합
- JPA에서는 saveAll()로 벌크 인서트를 해도 실제로는 한 건씩 insert 될 수 있음.
- JPA는 영속성 컨텍스트를 사용하기 때문에 벌크 연산 시 동기화 문제가 생길 수 있음 (예: flush, clear 필요).
4. 인덱스와 트리거 성능 저하
- 대량 삽입 시 인덱스 갱신, 트리거 실행이 전체 성능을 저하시킬 수 있음.
- 이럴 땐 인덱스를 미리 껐다가 다시 켜는 방식도 고려됨.
대안 또는 보완책
- 대용량이면 여러 건씩 나눠서 (chunk) insert하기
- 에러 로깅 로직 추가 (어떤 row가 실패했는지 추적)
- JPA 대신 JDBC batch update, MyBatis foreach, Native Query 사용
- COPY, LOAD DATA, BULK INSERT 등 DB에서 제공하는 고성능 import 기능 활용
'Etc' 카테고리의 다른 글
운영중 테이블에 PK 추가 전략 (0) | 2025.04.27 |
---|---|
CTI란 ? (0) | 2025.04.20 |
BXM 장단점 (0) | 2025.04.13 |
OOP - Strategy pattern (0) | 2025.04.13 |
[Oracle] Delete 속도 보다 빠른 Truncate (0) | 2025.04.13 |