inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

실전! Querydsl

Querydsl 설정과 검증

QueryDsl SpringBoot 2.7의 gradle 설정을 공유합니다.

11505

박민호
20

plugins {
	id 'org.springframework.boot' version '2.7.4'
	id 'io.spring.dependency-management' version '1.0.14.RELEASE'
	id 'java'
}

group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'

	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'

	// queryDSL 설정
	implementation "com.querydsl:querydsl-jpa"
	implementation "com.querydsl:querydsl-core"
	implementation "com.querydsl:querydsl-collections"
	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jpa" // querydsl JPAAnnotationProcessor 사용 지정
	annotationProcessor "jakarta.annotation:jakarta.annotation-api" // java.lang.NoClassDefFoundError (javax.annotation.Generated) 대응 코드
	annotationProcessor "jakarta.persistence:jakarta.persistence-api" // java.lang.NoClassDefFoundError (javax.annotation.Entity) 대응 코드
}

tasks.named('test') {
	useJUnitPlatform()
}

// Querydsl 설정부
def generated = 'src/main/generated'

// querydsl QClass 파일 생성 위치를 지정
tasks.withType(JavaCompile) {
	options.getGeneratedSourceOutputDirectory().set(file(generated))
}

// java source set 에 querydsl QClass 위치 추가
sourceSets {
	main.java.srcDirs += [ generated ]
}

// gradle clean 시에 QClass 디렉토리 삭제
clean {
	delete file(generated)
}

 

해당 소스는 타사 강의 보다가 본 설정에서 가져왔습니다.

기존 영한님 강의와 다른 점이 3가지 있으니 주의하시기 바랍니다.

  1. Querydsl Q파일 생성 위치가 다릅니다. 기존 영한님 강의대로 $build 로 시작하는 설정을 사용하면 테스트 실행 시 Q파일의 위치를 찾지 못해서 테스트가 실패합니다.

  2. Gradle -> Tasks -> build -> clean

    Gradle -> Tasks -> build -> build 혹은 classes

    기존 영한님 교안에는 빌드 시 Gradle -> Tasks -> other -> compileQuerydsl 로 Q파일을 생성하지만, 이 방법의 경우 other에 해당 메뉴가 없습니다. 그래서 빌드 시에는 그냥 build 메뉴의 build 혹은 classes 로 빌드하시면 Q파일이 생깁니다.

  3. 영한님 강의에서는 gradle build 폴더가 대부분 git 버전관리에 포함되지 않으므로 따로 설정할 필요가 없지만, 이 경우 Q파일이 소스폴더에 들어가므로 .gitignore 에 아래와 같이 별도로 경로를 설정해 주어야 합니다.

    ### Querydsl
    /src/main/generated

     

     

 혹시 저같이 청개구리마냥 강의에 나온 버전 사용 안 하고 최신 버전 사용하시는 분들께 도움이 되었으면 좋겠습니다. 저도 타사 강의에서 가져온 것이고 기초 테스트만 통과한 것이라서 혹시 강의에 맞지 않는 경우 영한님이나 다른 분들이 추가 정보를 주시면 좋을 것 같습니다.

여담인데 QueryDSL은 쿼리 짜긴 확실히 편한데 설정이 버전마다 중구난방이라 불편합니다. 똑똑한 개발자분들이 이런 설정도 그냥 @Configuration 으로 빼버리는 거 만들어주지 않을까 하는 기대가 있긴 합니다.

java spring jpa querydsl

답변 5

6

김영한

박민호님 좋은 내용 공유 감사합니다^^

0

KR KHS

좋은 정보 감사합니다

0

감사합니두~

감사합니당!!

0

ilov-

감사합니다. spring boot 2.7에서 위처럼 적용하니 잘 되네요!

0

Kim Jeong Jin

/src/main/generated 에 Q 파일은 생성되었는데 아래와 같이 NullPointException을 발생시키는데 원인을 아시는 분 있으시나요?

java.lang.NullPointerException

at com.querydsl.jpa.impl.JPAProvider.getTemplates(JPAProvider.java:88)

at com.querydsl.jpa.impl.JPAQuery.<init>(JPAQuery.java:48)

at com.springboot.jpa.QueryDSLTest.queryDslTest(QueryDSLTest.java:18)

 

요기서 위와 같은 에러가 납니다.

public class QueryDSLTest {
    @PersistenceContext
    EntityManager entityManager;

    @Test
    public void queryDslTest() {
        JPAQuery<Product> query = new JPAQuery<>(entityManager);
        ...
    }

정처기2회실기를 마치고.

0

31

0

방산 SW 개발자가 되기 위한 조언을 부탁드립니다!

1

118

1

JAVA로 백엔드 프로젝트

0

87

1

26년1회 실기 합격할수 있을까??ㅠㅠ

0

184

1

자바 실무 단계

0

319

2

진로가 큰 걱정입니다...

0

308

1

MVC 패턴을 정확히 익힐려면 어떻게 해야할까요?

0

361

1

공부 방향

0

322

1

선생님 조언 부탁드립니다.

0

290

0

안녕하세요! 실무와 관련되서 질문드립니다!

0

341

1

함수형 인터페이스 활용

0

362

1

WebFlux를 실무에 적용하기 전에 고민이 있습니다.

0

311

0