인프런 김영한 강의 정리/실전! Querydsl

프로젝트 환경설정 (SpringBoot 3.x 버전), Querydsl 설정

백엔드 개발자 - 젤리곰 2024. 7. 27. 00:07
728x90

강의는 스프링부트 2.x 버전이라 3.x버전으로 세팅하는 법을 정리해보려 한다.

강의 자료에 3.x 버전 설명이 있지만 중간 중간 설명이 달라서 환경설정하는데 예상보다 오래걸렸다;;

 

1. 프로젝트 생성

접속 >> https://start.spring.io/

 

이렇게 선택하고 GENERATE 버튼을 누르면 zip 폴더가 다운로드 된다.

원하는 폴더로 옮긴 뒤 압축을 풀어준다.

 

2. IntelliJ 설정

프로젝트 시작

File -> Open -> querydsl  -> build.gradle

 

프로젝트 JDK 17 이상으로 맞추기

File -> Project Structure -> Project

 

Gradle 설정

File -> Settings -> Build, Execution, Deployment -> Build Tools -> Gradle

 

lombok 플러그인 

File -> Settings -> Plugin 

 

Lombok 플러그인을 받아준다.

 

lombok 사용 설정

File -> Settings -> Annotation Processors

Enable annotaion processing을 체크해준다.

 

build.gradle 설정

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.2.8'
	id 'io.spring.dependency-management' version '1.1.6'
}

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

java {
	toolchain {
		languageVersion = JavaLanguageVersion.of(17)
	}
}

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'
	testRuntimeOnly 'org.junit.platform:junit-platform-launcher'

	//Querydsl 추가
	implementation 'com.querydsl:querydsl-jpa:5.0.0:jakarta'
	annotationProcessor "com.querydsl:querydsl-apt:${dependencyManagement.importedProperties['querydsl.version']}:jakarta"
	annotationProcessor "jakarta.annotation:jakarta.annotation-api"
	annotationProcessor "jakarta.persistence:jakarta.persistence-api"

	//쿼리 파라미터 로그 남기기
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
}

tasks.named('test') {
	useJUnitPlatform()
	jvmArgs '-Xshare:off'
}

//Querydsl 추가, 자동 생성된 Q클래스 gradle clean으로 제거
clean {
	delete file('src/main/generated')
}

 

⭐jvmArgs '-Xshare:off'

: Querydsl 검증테스트 할 때 아래와 같은 오류가 떠서 추가해준 코드다.

OpenJDK 64-bit Server VM warning: Sharing is only supported for boot loader classes because bootstrap classpath has been appended

 

3. Querydsl 환경설정 검증

Querydsl이 잘 설정됐다면, 검증용 엔티티 생성 후 재빌드 했을 때  Q타입이 생성되어야한다.

 

검증용 엔티티 생성

 

package study.querydsl.entity;
import lombok.Getter;
import lombok.Setter;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.Id;

@Entity
@Getter @Setter
public class Hello {

    @Id @GeneratedValue
    private Long id;
}

 

검증용 Q타입 생성

인텔리제이 우측에 Gradle 탭이 있다.

Gradle -> Tasks -> build -> clean 

Gradle을 clean해준 뒤, 새로고침 아이콘을 눌러서 재빌드 해준다.

(⭐스프링부트 3.x 버전부터 other 밑에 compileQuerydsl이 없다.)

 

Q타입 생성 확인

build -> classes 밑으로 쭉쭉 열어보면 QHello.java 파일이 생성되어있다.

(강의에서는 build -> generated 경로지만, 이건 강사님이 스프링부트 2.x버전으로 강의를 찍으신거라 경로를 직접 설정해줬기 때문임. 경로가 꼭 강의와 같지 않아도 된다. QHello.java가 만들어졌다면 성공이다.)

 

4. JPA, DB 설정 - application.yml

원래 이 설정 전에 H2 데이터베이스를 설치하고 DB접속까지 마친 상태여야 한다.

H2는 2.1.214 버전 이상을 다운 받으면 된다.

DB접속까지 마쳤다면, resources 하위에 application.properties 파일을 지우고 application.yml 파일을 새로 만들어준다.

 

⭐들여쓰기가 중요하다! 틀리면 오류난다.

spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/querydsl
    username: sa
    password:
    driver-class-name: org.h2.Driver

  jpa:
    hibernate:
      ddl-auto: create
    properties:
      hibernate:
  #      show_sql: true
        format_sql: true
logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace

 

5. Querydsl 테스트 케이스로 실행 검증

package study.querydsl;

import com.querydsl.jpa.impl.JPAQueryFactory;
import jakarta.persistence.EntityManager;
import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.annotation.Commit;
import org.springframework.transaction.annotation.Transactional;
import study.querydsl.entity.Hello;
import study.querydsl.entity.QHello;

@SpringBootTest
@Transactional
@Commit
public class QuerydslApplicationTests {

	@Autowired
	EntityManager em;

	@Test
	void contextLoads() {
		Hello hello = new Hello();
		em.persist(hello);

		JPAQueryFactory query = new JPAQueryFactory(em);
		QHello qHello = QHello.hello; //Querydsl Q타입 동작 확인
		Hello result = query
				.selectFrom(qHello)
				.fetchOne();
		Assertions.assertThat(result).isEqualTo(hello);
//lombok 동작 확인 (hello.getId())
		Assertions.assertThat(result.getId()).isEqualTo(hello.getId());
	}
}

 

강의 자료에는 javax라고 되어있는데 그대로 붙여넣기하면 오류난다.

javax로 써있는 것은 모두 jakarta로 바꿔줘야한다. 

728x90