[Querydsl] 소개 및 프로젝트 환경설정

Dev_Sanizzang·2023년 5월 22일
0

Querydsl

목록 보기
1/3

📕 개요

프로젝트를 진행하면서 Querydsl이라는 기술이 너무 궁금했고 적용시켜보고싶어서 김영한님의 Spring Data JPA 강의에 이어 Querydsl 강의를 듣게 되었다.
이번 포스팅부터 김영한 님의 Querydsl 강의를 듣고 정리하고 프로젝트에 적용시켜보고자 한다!

🏃 Querydsl 시작!

최신 자바 백엔드 기술은 스프링 부트 + 스프링 데이터 JPA를 조합해서 사용한다.
그러나 이런 기술 조합으로 해결하지 못하는 한계점이 있다.
바로 복잡한 쿼리와 동적 쿼리 문제이다.

실무에서는 보통 복잡한 쿼리를 주로 다룬다. 거기에 복잡한 동적 쿼리를 생성해야할 일도 많이 있다.

우리의 비즈니스 업무에 따라서 쿼리를 작성하는 일이 전체 개발의 절반 이상인 경우도 있다. 이런 문제들을 깔끔하게 해결해주는 기술이 바로 Querydsl이다!

Querydsl은 자바 언어의 한계를 넘어서 쿼리를 문자가 아니라 진짜 자바 코드로 작성할 수 있도록 도와준다.

💡 자바 코드로 쿼리를 작성하기 때문에 문법 오류를 컴파일 시점에 잡아준다.

Querydsl 설정

Querydsl이 gradle에 설정하고 gradle build 과정 속에서 "q타입이라는 파일"을 뽑아내야된다.

build.gradle

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

group = 'study'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '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'
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
	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: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"
}

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

clean {
	delete file('src/main/generated')
}

위 설정은 Spring Boot 3.x 기준 설정이다.
이전 버전 설정에서는 compileQuerydsl을 실행해줘야 Q파일이 생성됐지만 이 설정 같은 경우에는 main()만 실행하면 Q파일이 자동으로 만들어 진다.

  • 세팅같은 경우 버전에 따라 자주 바뀌기 때문에 구글링이 필요할 수 있다..

💡 Q파일 같은 경우는 git에 올리면 안된다. (ignore 처리를 해주자!)

Querydsl 사용 예시

@SpringBootTest
@Transactional
class QuerydslApplicationTests {

	@PersistenceContext
	EntityManager em;

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

		JPAQueryFactory query = new JPAQueryFactory(em);
		QHello qHello = new QHello("h");

		Hello result = query
				.selectFrom(qHello)
				.fetchOne();

		assertThat(result).isEqualTo(hello);
	}

}
  • Querydsl 같은 경우는 JPAQueryFactory를 사용해야한다.
  • Query와 관련된 것은 다 Q타입을 넣는다.

라이브러리 살펴보기

  • querydsl-apt: Q타입을 만드는 용도
  • querydsl-jpa: 실제 querydsl core가 있는데, Application 작성할 때 필요한 라이브러리
  • web: Tomcat 내장
  • jdbc: 데이터베이스 커넥션 풀링 HikariCP 사용
  • starter: 로그로 Slf4j 사용

H2 데이터베이스 실행

  1. h2.bat 실행

  2. 파일모드로 실행

    이렇게 해야 DB가 생성이 된다.

  3. TCP 모드로 접근

스프링 부트 설정 - JPA, DB

application.yml

spring:
  profiles:
    active: local
  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

🚪 마무리

Querydsl 공부를 위한 설정을 마쳤다.
다음 포스팅 부터는 Querydsl의 문법에 대해 본격적으로 진행하고자 한다.

profile
기록을 통해 성장합니다.

0개의 댓글