[쿼리 파라미터 로그 남기기]
JPA를 쓰면 답답한 점이 존재하는데, SQL quary 날리는 과정, DB connection 가져오는 게
어느 타이밍에 일어나는지 궁금하다.
그림처럼 quary parameter가 (?, ?)처럼 남음.
application.yml, application.propertics에서 해결가능하다.
쿼리를 확인해야 할 상황은 2가지를 잡을 수 있다.
- 의도한대로 작동되지 않아서 쿼리가 의심되는 상황
- N+1 문제가 발생된 지 의심되는 상황
# 1. 화면으로 확인하기
jpa:
hibernate:
ddl-auto: create
properties:
hibernate: # properties는 hibernate와 관련된 특별한 함수들을 사용할 수 있다.
show_sql: true
dialect: org.hibernate.dialect.H2Dialect
format_sql: true
에서 show_sql은
화면에
로 화면에 하하이버네이트 sql구문을 찍어준다.
일단 그러면
이런식으로 쿼리문을 확인할 수 있지만 hibernate가 날리는 내부로직은 (?,?)되어있다.
# 2. logging으로 확인하기
logging:
level:
org.hinbernate.SQL: debug *# sql모드를 디버거로 쓴다는 뜻*
org.hibernate.type: trace
org.hibernate.SQL : 옵션은 logger를 통해 하이버네이트 실행 SQL을 남긴다.
org.hibernate.type: trace
trace는 추적하며 파라미터 넘어오는 거 확인가능
# 3. spring-boot-data-source Decorator로 내부까지 확인하기
DB connection을 매핑해서 왔다 갔다 하며 SQL statemet의 로그를 출력해 주는 라이브러리가 있다.
깃허브 주소: https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-proxy, flexy-pool and s
Spring Boot integration with p6spy, datasource-proxy, flexy-pool and spring-cloud-sleuth - GitHub - gavlyukovskiy/spring-boot-data-source-decorator: Spring Boot integration with p6spy, datasource-p...
github.com
P6Spy, Datasource Proxy, FlexyPool 등이 있는데
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
p6spy를 사용해서 쿼리문내부를 확인해 보자.
build.gradle에 가서
해당구문추가하기.
이때 버전도 같이 적어주어야 함.
대부분의 의존성들은 spring boot가 버전 매핑을 자동화해두었다.
따라서 버전 모른 채로 추가만 해도 알아서 부트가 버전을 찾아서 세팅해 준다.
P6Spy를 넣고 test를 재빌드하면
실제 내부 쿼리 보여주며, 커넥션도 모니터링 가능.
그 외에 옵션들은 설정을 통해 가능하다.
스프링 부트 3.0이상이라면?!!
라이브러리 버전을 1.9.0이상을 사용해야 한다.
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0'
but
이런 라이브러리들은 개발단계에서는 편하지만
운영해서 배포할 때 고민해 보도록 한다!!
성능테스트를 진행해 보고, 이런 것들이 성능을 확 저하할 수 있기 때문이다. (병목 발생)
일단 잘 모른다면 개발단계에서만 쓰도록 하자.
'Back-end > Spring' 카테고리의 다른 글
[JPA] Entity에 JPA로 (생성시간, 수정시간)넣기 - Auditing (0) | 2023.11.26 |
---|---|
[lombok] lombok 어노테이션 정리 (0) | 2023.11.25 |
[spring] JPA 소개 (0) | 2023.09.03 |