이전 글 ( jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄! ) 에서 jpa, querydsl을 사용했을 때 불편한 점과 해결 방법(로깅) 및 로깅의 종류에 간략하게 알아보았습니다. 이번 글에서는 최종적으로 선택된 로깅 방법인 p6spy에 대해서 정리하겠습니다.
작성된 글의 소스 코드는 github에 올려두었습니다.
JPA, Querydsl 설정 방법은 아래 링크를 참조해주시면 됩니다!
JPA에 대해서 궁금하시면?
Querydsl에 대해서 궁금하시면?
- Querydsl란?
- Querydsl 사용해보자. ( 설정편 )
- Querydsl plugin 실행방법
- Querydsl 사용해보자. ( Entity 관계 매핑 편, 테스트 코드 포함 )
- Querydsl 사용해보자. ( Entity 관계 매핑 X편, 테스트 코드 포함 )
p6spy
실전에서 사용했을 때 가장 편리할 것 같은 SQL 로그입니다.
결과부터 살펴보겠습니다.
2020-11-11 11:36:49.316 INFO 50255 --- [ main] p6spy : #1605062209315 | took 16ms | statement | connection 2| url jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
select store0_.id as col_0_0_, createPrefix(store0_.name) as col_1_0_, store0_.address as col_2_0_ from store store0_ where store0_.name=? limit ?
select store0_.id as col_0_0_, createPrefix(store0_.name) as col_1_0_, store0_.address as col_2_0_ from store store0_ where store0_.name='스토어6' limit 1;
곧바로 DBMS에 붙혀넣기 했을 때 돌아가는 SQL문이 찍히는 것을 확인할 수 있습니다.
사용방법
디펜던시만 추가하면 간편하게 사용할 수 있습니다.
build.gradle
plugins {
id 'org.springframework.boot' version '2.3.5.RELEASE'
id 'io.spring.dependency-management' version '1.0.10.RELEASE'
id 'java'
id 'com.ewerk.gradle.plugins.querydsl' version '1.0.10'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jdbc'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-jdbc'
// 'p6spy:p6spy'
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.6.2'
runtimeOnly 'mysql:mysql-connector-java'
implementation 'com.querydsl:querydsl-jpa'
implementation 'com.querydsl:querydsl-apt'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
annotationProcessor 'org.projectlombok:lombok'
testImplementation('org.springframework.boot:spring-boot-starter-test') {
exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
}
}
test {
useJUnitPlatform()
}
def querydslSrcDir = "$buildDir/generated/querydsl"
querydsl {
jpa = true
querydslSourcesDir = querydslSrcDir
}
sourceSets {
main.java.srcDirs querydslSrcDir
}
// 여기부터 gradle 5.0 이후로 추가
configurations {
querydsl.extendsFrom compileClasspath
}
compileQuerydsl{
options.annotationProcessorPath = configurations.querydsl
}
여기서 주석으로 달아놓은 p6spy 한줄만 추가해주시면 위와같은 로그를 얻을 수 있습니다.
application.yaml
application.yaml 설정에서는 기존에 사용했던 로그 관련 프로퍼티들을 모두 제외하였습니다.
spring:
profiles:
active: local
--- #local
spring:
profiles: local
datasource:
url: jdbc:mysql://localhost:3306/testdb?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: root
password: vnfmsqka0727!
driver-class-name: com.mysql.jdbc.Driver
jpa:
database: mysql
generate-ddl: false
open-in-view: false
hibernate:
ddl-auto: none # 항상 조심!!
properties:
hibernate:
# show_sql: true
# format_sql: true
# use_sql_comments: true
database-platform: com.example.querydsl.configuration.MysqlCustomDialect
#logging:
# level:
# org:
# hibernate:
# SQL: DEBUG
# type:
# trace
결론
총 3가지의 SQL 로그 방식에 대해서 알아보았습니다.
3개 중 p6spy 로깅 방식이 상용에서 사용하기에 가장 적합하였습니다.
- SQL 로그를 DBMS에 복붙하여 바로 사용할 수 있음
그러나 아직 가독성이 떨어지고 alias가 달라붙고 있어서 DBMS에서 확인하려면 alias를 하나씩 delete해야하는 불편함이 있습니다.
그래서 추 후에 p6spy github를 클론받아 분석하여 정리하겠습니다.
Spring Data JPA, Querydsl 로깅처리. p6spy pretty하게 설정하기 에 로깅을 pretty하게 볼 수 있는 설정값을 정리하였습니다.
'Develop > spring-data' 카테고리의 다른 글
Spring Data JPA, Querydsl 로깅처리. p6spy 원하는 로그만 출력하기 (0) | 2020.11.16 |
---|---|
Spring Data JPA, Querydsl 로깅처리. p6spy pretty하게 설정하기 (6) | 2020.11.13 |
Querydsl 사용시 Mysql에서 생성한 Function 호출하는 방법 (0) | 2020.11.11 |
jpa, querydsl 적용 시 로깅 비교. querydsl로 작성한 쿼리 DBMS에서 쉽게 돌리는 방법. 1탄! (0) | 2020.11.10 |
Spring Data JPA 기반 Querydsl 사용해보자. ( Entity 관계 매핑 X편, 테스트 코드 포함 ) (2) | 2020.11.08 |