띄어쓰기 중요!!
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
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에서 데이터를 확인 할 수 있다.
그러나 롤백하지 않을 경우, 테스트 간에 영향을 미칠 수 있는 단점이 존재한다.
@SpringBootTest
@Transactional
@Commit
class QuerydslApplicationTests {
...
}
위와 같이 테스트 클래스에 @Commit을 추가하고 test 재실행했다.
commit했다는 로그를 확인할 수 있었다.

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

참고
공부할 때는 Test 실행 후 DB에서 실제로 데이터 보고 싶으니까
@Commit을 사용하면 된다.
단, 자동화된 테스트를 할 때는 다 메모리에서 돌려야한다.
테스트 종료 후 DB에 데이터가 남아있으면 안된다.
지금은 쿼리문을 확인하면 ?가 있다.

우리는 ?가 궁금하다!!
logging.level.org.hibernate.type: trace
이렇게 파라미터 마다 한 줄씩 나오게 말고, 한번에 묶어서보고 싶다 -> 방법 2 사용
스프링 부트 사용시 build.gradle dependencies에 아래 한 줄 추가
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'
Gradle 탭에서 p6spy 의존성 추가 확인

쿼리 파라미터 확인

참고
쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다.
하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다!