[java] Querydsl을 사용하여 데이터베이스 대량 삽입 작업 수행하기

이번 포스트에서는 Java의 Querydsl을 사용하여 대량의 데이터를 데이터베이스에 삽입하는 방법에 대해 알아보겠습니다. Querydsl은 Java로 작성된 타입 안전한 쿼리를 생성하는 도구로, 데이터베이스 연동 작업을 편리하게 수행할 수 있습니다.

1. Querydsl 설정

먼저, 프로젝트에 Querydsl을 설정해야 합니다. 다음은 Maven을 사용하는 경우의 예시입니다.

<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-core</artifactId>
    <version>5.0.0</version>
</dependency>
<dependency>
    <groupId>com.querydsl</groupId>
    <artifactId>querydsl-jpa</artifactId>
    <version>5.0.0</version>
</dependency>

2. 대량 삽입 작업 준비

대량 삽입 작업을 수행하기 이전에 데이터베이스 테이블과 엔터티 클래스를 준비해야 합니다. 예를 들어, Person 엔터티 클래스와 person 테이블이 있다고 가정해보겠습니다.

@Entity
@Table(name = "person")
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    private String name;
    private int age;
    
    // getters, setters, constructors
}

3. 대량 삽입 작업 수행

이제 Querydsl을 사용하여 대량의 데이터를 데이터베이스에 삽입해보겠습니다. 다음은 Person 엔터티의 리스트를 받아서 한 번에 데이터베이스에 삽입하는 메소드입니다.

public void insertData(List<Person> personList) {
    QPerson qPerson = QPerson.person;
    List<Person> batch = new ArrayList<>();
    
    for (Person person : personList) {
        batch.add(person);
        
        if (batch.size() % 1000 == 0) { // 1000개 단위로 삽입
            entityManager.persistAll(batch.toArray(new Person[0]));
            entityManager.flush();
            entityManager.clear();
            batch.clear();
        }
    }
    
    if (!batch.isEmpty()) { // 마지막에 남은 데이터 삽입
        entityManager.persistAll(batch.toArray(new Person[0]));
        entityManager.flush();
        entityManager.clear();
    }
}

위의 코드에서는 QPerson 클래스를 사용하여 쿼리를 생성하고, 1000개 단위로 데이터를 삽입합니다. entityManager를 사용하여 데이터를 저장하며, flushclear 메소드를 호출하여 성능을 최적화합니다.

4. 대량 삽입 작업 실행

실제로 대량 삽입 작업을 실행해보겠습니다. 예를 들어, 100000개의 Person 데이터를 삽입한다고 가정해보겠습니다.

public static void main(String[] args) {
    List<Person> personList = new ArrayList<>();
    
    for (int i = 0; i < 100000; i++) {
        Person person = new Person();
        person.setName("Person " + i);
        person.setAge(i % 100);
        personList.add(person);
    }
    
    insertData(personList);
}

위의 코드에서는 100000개의 Person 데이터를 생성하여 insertData 메소드를 호출합니다. 시간이 오래 걸릴 수 있으므로, 대량 삽입 작업을 수행할 때는 적절한 배치 사이즈를 설정하고 성능을 최적화하는 것이 중요합니다.

마무리

이번 포스트에서는 Java의 Querydsl을 사용하여 데이터베이스에 대량의 데이터를 삽입하는 방법을 알아보았습니다. Querydsl은 타입 안정성과 편리한 쿼리 작성을 제공하여 개발자들에게 많은 도움을 줄 수 있는 유용한 도구입니다. 대량 삽입 작업을 수행할 때는 성능을 고려하여 적절한 배치 사이즈를 설정하는 것을 잊지 마세요.