Querydsl을 세팅하기 전에 무엇인지 먼저 알아봅시다. 

 

1. Querydsl이란?

타입에 안전한 방식으로 HQL(Hibernate Query Language)를 실행하기 위한 목적으로 만들어졌습니다. HQL를 작성하다 보면, String 연결 (ex= "select"+  ~~)을 이용하게 됩니다. 이는 가독성의 어려움으로 이어질 수 있습니다. 따라서 가독성과 타입에 안전하도록 도메인 모델로 변경했다. 도메인 모델로 변경함으로써, 도메인 변경이 직접적으로 쿼리에 반영되고, 쿼리 작성 과정에서도 자동완성 기능을 사용할 수 있습니다. 따라서 빠르고 안정적인 쿼리를 만들 수 있습니다.

 

1-1. Queryds 원칙

 

1. 타입 안정성(Type Safety): 도메인 타입의 프로퍼티를 반영해서 생성한 쿼리 타입을 이용해서 쿼리를 작성함으로써, 메서드 형태로 호출이 이루어져 타입에 안전합니다. 

 

2. 일관성: 기반 기술에 상관없이 쿼리 경로와 오퍼레이션이 동일합니다. Query 인터페이스는 공통의 상위 인터페이스를 가집니다. 

 

 

2. Springboot  Querydsl 세팅을 위한 build.gradle 수정  

 

2-1. Querydsl 버전 plugins 위에 추가

buildscript {
    ext {
        queryDslVersion = "5.0.0"
    }
}

 

2-2. querydls 플러그인 plugins에 추가

plugins {
    id 'org.springframework.boot' version '2.6.4'
    id 'io.spring.dependency-management' version '1.0.11.RELEASE'
    id 'java'
    // querydsl 플러그인 추가
    id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
}

 

2-3. dependencies에 querydsl 관련 디펜던시 추가

 

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    compileOnly 'org.projectlombok:lombok'
    runtimeOnly 'com.h2database:h2'
    annotationProcessor 'org.projectlombok:lombok'
    implementation 'mysql:mysql-connector-java'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    
    // querydsl 디펜던시 추가
    implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
    implementation "com.querydsl:querydsl-apt:${queryDslVersion}"
}

 

2-4. querydsl 추가 설정

 

가장 밑에 적어줍니다. 

// querydsl 사용할 경로 지정합니다. 현재 지정한 부분은 .gitignore에 포함되므로 git에 올라가지 않습니다. 
def querydslDir = "$buildDir/generated/'querydsl'"

// JPA 사용여부 및 사용 경로 설정
querydsl {
    jpa = true
    querydslSourcesDir = querydslDir
}

// build시 사용할 sourceSet 추가 설정
sourceSets {
    main.java.srcDir querydslDir
}


// querydsl 컴파일 시 사용할 옵션 설정
compileQuerydsl {
    options.annotationProcessorPath = configurations.querydsl
}

// querydsl이 compileClassPath를 상속하도록 설정
configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
    querydsl.extendsFrom compileClasspath
}

 

3. Build

위에서 Querydsl을 사용하기 위한 세팅은 모두 끝났습니다. 우측 gradle 탭에서 other -> compileQuerydsl을 누르시거나 애플리케이션을 실행시키면, Build가 됩니다. 위에서 지정한 querydslDir에 Q타입이란 것이 생깁니다. 

 

 

QMember의 모습

 

 

지금까지 Querydsl 설정 방법을 알아봤습니다. 다음은 QueryDsl 사용법에 대해서 하나씩 알아보겠습니다.