SpringData JPA Bulk Insert

공승화
Sep 15, 2023

--

  1. JPA의 기본적인 save()

JPA의 기본적인 save(S s) 의 경우 먼저 select 를 하여 중복이 있는지 확인하고, 중복이 있을 경우 Update, 중복이 없으면 Insert 작업을 수행한다.

이 과정에서 입력되는 데이터의 수가 많을 수록 JDBC Insert와의 성능차이가 심하게 드러났다.

2. SELECT 하지 않고 무조건 저장하기

@Entity
@Table(name = "tb_battery")
@Getter
public class Battery implements Persistable<BatteryPK> {
@EmbeddedId
private BatteryPrimaryKey batteryPrimaryKey;

...
}

@Embeddable
@AllArgsConstructor
@NoArgsConstructor
public class BatteryPrimaryKey {
private String 고객아이디;
private String 장치아이디;
private String 날짜;
}

위 코드의 Persistable<ID> 상속 한 후 isNew함수를 수정하여 항상 참을 반환하게 하면 모든 해당 Entity의 모든 INSERT에 대하여 SELECT 없이 동작이 가능하다.

3. Bulk Insert

나는 saveAll() 함수가 bulk Insert 작동하길 기대하였으나,

실제로는 컬럼 당 한번씩 INSERT하는 방식으로 작동하였다.

3-1. saveAll 함수의 동작 로그

4. 그렇다면 한번에 많은 데이터를 Insert하려면?

JdbcTemplate의 batchUpdate() 를 활용하면 한번에 많은 데이터 INSERT가 가능하다.

해당 예제는 다음 포스트에 이어서 진행하도록 하겠다.

--

--