- hibernate가 제공하는 방법 ← 현재 주다타운(moon-app-api)에서 로그백을 사용하고 있으므로 이 방법이 적합함
org.hibernate.type의 로그 레벨을 trace로 잡으면 됩니다.
그런데 먼저 로그라이브러리를 설정해야 해서 좀 일이 있습니다.
- pom.xml에 다음을 추가해줍니다.
<!-- logback -->
<dependency>
<groupId>ch.qos.logback</groupId>
<artifactId>logback-classic</artifactId>
<version>1.2.3</version>
</dependency>
2. resources 아래에 logback.xml 파일을 만들어서 둡니다. 여기에 잘 보시면 org.hibernate.type이 trace로 설정되어 있습니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<layout class="ch.qos.logback.classic.PatternLayout">
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</layout>
</appender>
<logger name="org.hibernate.type" level="trace" />
<root level="info">
<appender-ref ref="STDOUT" />
</root>
</configuration>
3.그리고 실행하면 다음과 같은 추가로그를 볼 수 있습니다.
/* insert hellojpa.Member
*/ insert
into
Member
(team_id, USERNAME, MEMBER_ID)
values
(?, ?, ?)
21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [1] as [BIGINT] - [1]
21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [2] as [VARCHAR] - [member1]
21:34 TRACE o.h.type.descriptor.sql.BasicBinder - binding parameter [3] as [BIGINT] - [2]
위에 보시면 binding parameter가 보입니다.
2. 외부 라이브러리를 사용하는 방법 → 로그백과 같이 적용 X
구글에 p6spy로 검색해보시면 관련 라이브러리가 있습니다.
이 라이브러리를 사용하면 매우 편리하게 정말 ?에 넣은 값 자체가 보입니다!
insert into ... values(1,member1,2) 이런식으로요.
- https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
- 스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.
<dependency>
<groupId>com.github.gavlyukovskiy</groupId>
<artifactId>p6spy-spring-boot-starter</artifactId>
<version>${version}</version>
</dependency>
- 참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.
'JPA' 카테고리의 다른 글
Q클래스 인스턴스 사용 방법 두가지 (0) | 2022.02.14 |
---|---|
JPAQueryFactory를 필드에서 제공하자(feat. 동시성 문제는 스프링이 해결) (0) | 2022.02.14 |
JPQL과 QueryDSL의 차이 (0) | 2022.02.14 |
쿼리 힌트란? (feat. 예제) (0) | 2022.02.14 |
JPA Auditing으로 생성시간/수정시간 자동화하기 (0) | 2022.02.14 |