[java] Querydsl을 사용하여 데이터베이스 테스트 작성하기

Querydsl은 자바 기반의 오픈 소스 라이브러리로, Fluent API 스타일로 직관적이고 안전한 쿼리 작성을 도와주는 도구입니다. 이번 글에서는 Querydsl을 사용하여 데이터베이스 테스트를 작성하는 방법을 알아보겠습니다.

1. Querydsl 설정

먼저, Querydsl을 프로젝트에 추가해야 합니다. Gradle을 사용하는 경우, build.gradle 파일에 다음 의존성을 추가합니다:

dependencies {
    ...
    implementation 'com.querydsl:querydsl-core:4.4.0'
    implementation 'com.querydsl:querydsl-jpa:4.4.0'
    ...
}

Maven을 사용하는 경우, pom.xml 파일에 다음 의존성을 추가합니다:

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

2. 테스트 작성

이제 Querydsl을 사용하여 데이터베이스 테스트를 작성해보겠습니다. 다음은 JPA와 Hibernate를 사용하는 예시입니다.

package com.example.myapp;

import static com.example.myapp.QUser.user;

import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.Transactional;

import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

@SpringBootTest
public class UserRepositoryTest {

    @PersistenceContext
    private EntityManager entityManager;

    @Test
    @Transactional
    public void testFindUserByName() {
        QUser qUser = QUser.user;

        User user = new User();
        user.setName("John Doe");
        entityManager.persist(user);

        User retrievedUser = new JPAQueryFactory(entityManager)
                .selectFrom(qUser)
                .where(qUser.name.eq("John Doe"))
                .fetchOne();

        Assertions.assertEquals(user.getName(), retrievedUser.getName());
    }
}

위 예시는 UserRepository의 findUserByName 메소드를 테스트하는 코드입니다. QUser 클래스는 Querydsl이 컴파일 시에 자동 생성하는 엔티티 클래스입니다. JPAQueryFactory를 사용하여 쿼리를 작성하고 실행할 수 있습니다.

3. 테스트 실행

테스트를 실행하기 위해 IDE에서 UserRepositoryTest 클래스를 실행하거나, 터미널에서 다음 명령어를 입력합니다:

./gradlew test

또는

mvn test

테스트는 데이터베이스와 상호작용하여 데이터를 저장하고 조회하므로, 테스트 전후에 자동으로 롤백되도록 @Transactional 어노테이션을 사용했습니다.

결론

이제 Querydsl을 사용하여 데이터베이스 테스트를 작성하는 방법을 알게 되었습니다. Querydsl은 간결하고 직관적인 쿼리 작성을 도와주며, 테스트 코드를 작성하는 데 유용한 도구입니다. 추가적으로 Querydsl의 다양한 기능에 대해 더 알아보시는 것을 추천합니다.

참고 자료