5. DB, JPA 설정, 쿼리 파라미터 로그 설정

민정·2023년 1월 5일

QueryDSL

목록 보기
5/18
post-thumbnail

✨ application.yml

띄어쓰기 중요!!

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

  jpa:
    hibernate:
      ddl-auto: create // 애플리케이션 로딩 시점에 테이블 모두 drop하고 다시 create
      # 참고로 create-drop: 애플리케이션 종료할 때, 테이블 모두 drop. 애플리케이션 종료 후, 데이터 확인 불가능.
    properties:
      hibernate:
        # show_sql: true
        format_sql: true

logging.level:
  org.hibernate.SQL: debug
# org.hibernate.type: trace

🧐 실행하는 쿼리 문을 System.out / 로거 중 어디로 출력할까!?

hibernate가 실행하는 쿼리들이
spring.jpa.properties.hibernate.show_sql: System.out으로 출력
logging.level.org.hibernate.SQL: 로거로 출력

로그는 가급적 System.out보다는 로거를 통해서 출력하는 것이 좋다.

✨ 실행되는 쿼리문을 확인해보자

QuerydslApplicationTests 실행

쿼리문들이 보인다!

h2 DB에서 확인

그러나 데이터 없다!!

그 이유는 기본적으로 Test에서 @Transactional테스트 종료 후 rollback을 한다.

테스트 클래스 혹은 테스트 함수 앞에 @Commit 붙이면 롤백을 하지 않고, 테스트 종료 후 h2 db에서 데이터를 확인 할 수 있다.

그러나 롤백하지 않을 경우, 테스트 간에 영향을 미칠 수 있는 단점이 존재한다.

✔ @Commit 추가 후 테스트 재실행

@SpringBootTest
@Transactional
@Commit
class QuerydslApplicationTests {
	...
}

위와 같이 테스트 클래스에 @Commit을 추가하고 test 재실행했다.

commit했다는 로그를 확인할 수 있었다.

다시 h2 DB확인하니! 데이터가 들어있는 것을 확인할 수 있다.

참고

공부할 때는 Test 실행 후 DB에서 실제로 데이터 보고 싶으니까 @Commit을 사용하면 된다.

단, 자동화된 테스트를 할 때는 다 메모리에서 돌려야한다.

테스트 종료 후 DB에 데이터가 남아있으면 안된다.



✨ 쿼리 파라미터 로그 남기기

지금은 쿼리문을 확인하면 ?가 있다.


우리는 ?가 궁금하다!!

방법 1) logging.level.org.hibernate.type: trace

이렇게 파라미터 마다 한 줄씩 나오게 말고, 한번에 묶어서보고 싶다 -> 방법 2 사용

방법 2) 외부 라이브러리 사용

외부 라이브러리 - p6spy 사용

스프링 부트 사용시 build.gradle dependencies에 아래 한 줄 추가
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

Gradle 탭에서 p6spy 의존성 추가 확인

쿼리 파라미터 확인

참고

쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다.

하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다!



출처

김영한 강사님 - 인프런 실전! Querydsl

0개의 댓글