작성
·
1.4K
답변 2
4
안녕하세요. iam2010님^^
크게 2가지 방법이 있습니다.
1. hibernate가 제공하는 방법
org.hibernate.type의 로그 레벨을 trace로 잡으면 됩니다.
그런데 먼저 로그라이브러리를 설정해야 해서 좀 일이 있습니다.
1. 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>
그리고 실행하면 다음과 같은 추가로그를 볼 수 있습니다.
Hibernate:
/* 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. 외부 라이브러리를 사용하는 방법
구글에 p6spy로 검색해보시면 관련 라이브러리가 있습니다.
이 라이브러리를 사용하면 매우 편리하게 정말 ?에 넣은 값 자체가 보입니다!
insert into ... values(1,member1,2) 이런식으로요.
그런데 설정하기가 좀 까다롭니다.
스프링 부트에서는 설정하기가 좀 쉬운데요.
관련해서 활용1편
섹션1. 프로젝트 환경설정 -> JPA와 DB설정, 동작확인 편에서 자세히 소개를 해드립니다^^
관련해서 활용1편 메뉴얼에 있는 내용을 남겨드립니다.
### 쿼리 파라미터 로그 남기기
* 로그에 다음을 추가하기`org.hibernate.type`: SQL 실행 파라미터를 로그로 남긴다.
* 외부 라이브러리 사용
* https://github.com/gavlyukovskiy/spring-boot-data-source-decorator
스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.
```
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
```
> 참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.
1