[java] Querydsl을 사용하여 데이터베이스 스키마 자동 생성하기

Querydsl은 자바로 작성된 유연하고 타입 안전한 쿼리를 생성하기 위한 도구입니다. 이를 사용하면 복잡한 SQL 쿼리를 더 쉽게 작성하고 유지보수할 수 있습니다. 이번 포스트에서는 Querydsl을 사용하여 데이터베이스 스키마를 자동으로 생성하는 방법을 알아보겠습니다.

1. Querydsl 설정

먼저, 프로젝트에 Querydsl을 추가하기 위해 의존성을 선언해야 합니다. build.gradle 파일에 다음 의존성을 추가하세요:

dependencies {
    // Querydsl
    implementation 'com.querydsl:querydsl-core:X.X.X'
    implementation 'com.querydsl:querydsl-jpa:X.X.X'

    // JPA
    implementation 'javax.persistence:javax.persistence-api:X.X.X'
    implementation 'org.hibernate:hibernate-core:X.X.X'

    // 데이터베이스 드라이버 (예: H2 DB)
    implementation 'com.h2database:h2:X.X.X'
}

여기서 X.X.X는 사용하는 Querydsl 및 JPA 버전에 따라 바뀌어야 합니다. 필요한 의존성을 추가한 후, 프로젝트를 다시 빌드해주세요.

2. 엔티티 클래스 작성

데이터베이스 스키마를 생성하기 위해 Querydsl은 JPA 엔티티 클래스를 사용합니다. 예를 들어, 간단한 User 엔티티를 작성해보겠습니다:

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "email")
    private String email;

    // getters and setters
}

위의 엔티티 클래스에서는 @Entity 어노테이션을 사용하여 JPA 엔티티임을 표시했습니다. @Id@GeneratedValue 어노테이션을 사용하여 주키를 정의하고, @Column 어노테이션을 사용하여 각 속성들의 데이터베이스 컬럼명을 지정했습니다.

3. Querydsl 코드 생성 설정

이제 Querydsl 코드 생성을 설정해야 합니다. 이를 통해 데이터베이스 스키마에 대한 Querydsl 코드를 자동으로 생성할 수 있습니다.

src/main/resources 디렉토리에 querydsl.gradle 파일을 생성하고 다음 내용을 추가하세요:

ext {
    querydslVersion = "X.X.X"
    packageName = "com.example.entities" // 엔티티 클래스가 위치한 패키지명으로 변경해주세요
}

apply plugin: 'java'
apply plugin: 'idea'

dependencies {
    compileOnly "com.querydsl:querydsl-apt:${querydslVersion}:jpa"
}

def generateQuerydslSourcesTask() {
    sourceSets {
        main {
            java {
                srcDir 'src/generated/java'
            }
        }
    }

    compileJava {
        dependsOn generateQuerydslSources
        source generateQuerydslSources.destinationDir
    }

    task generateQuerydslSources(type: JavaCompile, group: 'build') {
        description = 'Generates Querydsl query types'
        source = sourceSets.main.java
        classpath = configurations.compilePlus
        destinationDir = file("src/generated/java")
        options.annotationProcessorPath = configurations.compileClasspath
        options.compilerArgs = [
                "-proc:only",
                "-processor", "com.querydsl.apt.jpa.JPAAnnotationProcessor"
        ]
    }
}

generateQuerydslSourcesTask()

위의 packageName 변수를 엔티티 클래스가 있는 패키지명으로 변경해주세요.

마지막으로, build.gradle 파일에 다음 코드를 추가하여 Querydsl 코드 생성 태스크를 설정해주세요:

apply from: 'src/main/resources/querydsl.gradle'

4. Querydsl 코드 생성 및 데이터베이스 스키마 자동 생성

이제 Querydsl 코드를 생성하고 데이터베이스 스키마를 자동으로 생성할 차례입니다. 다음 명령어를 사용하여 Gradle 태스크를 실행해주세요:

./gradlew generateQuerydslSources

위의 명령어를 실행하면 src/generated/java 디렉토리에 Querydsl과 관련된 코드가 생성됩니다.

마지막으로, 애플리케이션을 실행하여 데이터베이스 스키마를 생성하세요. 이를 위해 spring.jpa.hibernate.ddl-auto 프로퍼티를 create 값으로 설정해야 합니다. 예를 들어, 스프링 부트 애플리케이션의 application.properties 파일에 다음 내용을 추가해주세요:

spring.jpa.hibernate.ddl-auto=create

이제 애플리케이션을 실행하고 데이터베이스 스키마가 자동으로 생성되는지 확인해보세요.

마무리

이제 Querydsl을 사용하여 데이터베이스 스키마를 자동으로 생성하는 방법을 알게 되었습니다. 이를 통해 쿼리 작성 및 유지보수가 더욱 편리해지며, 개발 생산성을 향상시킬 수 있습니다.

더 자세한 내용은 Querydsl 공식 문서를 참고하세요.