[QueryDSL] 프로젝트 환경설정

윤경·2021년 12월 2일
0

QueryDSL

목록 보기
1/11
post-thumbnail

[1] 프로젝트 생성

➡️ 제대로 세팅이 되었는지 확인하기

[2] Querydsl 설정과 검증

강사님을 잘 따라하자!!

⚠️ Unable to load class 'com.mysema.codegen.model.Type'.
강사님의 코드로 했더니 나는 이런 에러가 발생해서 찾아보니 아래와 같이 코드를 추가 작성하면 에러가 나지 않는다. (gradle 5.0 이상부터는 옵션을 이렇게 넣어주어야 함)

build.gradle 설정하기

buildscript {
	ext {
		queryDslVersion = "5.0.0"
	}
}

plugins {
	id 'org.springframework.boot' version '2.6.1'
	id 'io.spring.dependency-management' version '1.0.11.RELEASE'
	// querydsl 추가
	id "com.ewerk.gradle.plugins.querydsl" version "1.0.10"
	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'
	// querydsl 추가
	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
	implementation "com.querydsl:querydsl-apt:${queryDslVersion}"

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

test {
	useJUnitPlatform()
}

// querydsl 추가 시작
def querydslDir = "$buildDir/generated/querydsl"

querydsl {
	jpa = true
	querydslSourcesDir = querydslDir
}

sourceSets {
	main.java.srcDir querydslDir
}

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
	querydsl.extendsFrom compileClasspath
}

compileQuerydsl {
	options.annotationProcessorPath = configurations.querydsl
}
// querydsl 추가 끝

검증용 Q 타입 생성

Gradle IntelliJ 사용법

  • Gradle → Tasks → build → clean
  • Gradle → Tasks → other → compileQuerydsl

Gradle 콘솔 사용법

  • ./gradlew clean compileQuerydsl

Q타입 생성 확인

  • build → generated → querydsl
    study.querydsl.entity.QHello.java (예제를 Hello로 만들었기 때문) 파일이 생성되어 있어야 한다.

참고로, Q 타입은 컴파일 시점 자동 생성되므로 버전관리(GIT)에 포함하지 않는 것이 좋다. 앞서 설정에서 생성 위치를 gradle build 폴더 아래 생성되도록 했기 때문에 이 부분도 자연스럽게 해결된다. (대부분 gradle build 폴더를 git에 포함하지 않는다.)


[3] 라이브러리 살펴보기

Querydsl 라이브러리

  • querydsl-apt: Querydsl 관련 코드 생성 기능 제공
  • querydsl-jpa: Querydsl 라이브러리

springboot 라이브러리 + Test 라이브러리

예전 게시물 참고


[4] H2 데이터베이스 설치

예전 게시물 참고

⚠️ 처음 접속할 때 에러가 나면 그냥 터미널에서 H2 껐다가 다시 접속해보기


[5] 스프링 부트 설정 - JPA, DB

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
  • ddl-auto: create: 어플리케이션 실행 시점에 다 drop 하고 새로 테이블을 create 하겠다는 것.
    (create-drop도 있는데 그러면 어플리케이션 종료 시점 다 없애버리기 때문에 남는 게 없어서 우리가 확인할 수가 없음)
  • show_sql: true, format_sql: true: 쿼리를 예쁘게(?) 볼 수 있음
    show_sql 옵션은 System.out에 하이버네이트 실행 SQL을 남김
    org.hibernate.SQL 옵션은 logger를 통해 하이버네이트 실행 SQL을 남김
    (근데 둘 다 있으면 쿼리가 두 번 나오는 것처럼 보이므로 format_sql: true만 냅둘것)

쿼리 파라미터 로그 남기기

(숨겨진 쿼리 보이게 하기)

로그에 org.hibernate.type 옵션으로 SQL 실행 파라미터를 로그로 남길 수 있는데 이건 불편하니까 아래와 같이 추가해 외부 라이브러리를 사용하기

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

⚠️ 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용하되 운영 시스템에 적용하기 위해서는 꼭 성능 테스트를 하고 사용하기!!


profile
개발 바보 이사 중

0개의 댓글