JPA

JPA 로그에서 파라미터 값 보는 방법에 대한 연구

쿠카이든 2022. 2. 14. 11:28
728x90
  1. hibernate가 제공하는 방법 ← 현재 주다타운(moon-app-api)에서 로그백을 사용하고 있으므로 이 방법이 적합함

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>

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) 이런식으로요.

<dependency>
    <groupId>com.github.gavlyukovskiy</groupId>
    <artifactId>p6spy-spring-boot-starter</artifactId>
    <version>${version}</version>
</dependency>
  • 참고: 쿼리 파라미터를 로그로 남기는 외부 라이브러리는 시스템 자원을 사용하므로, 개발 단계에서는 편하게 사용해도 된다. 하지만 운영시스템에 적용하려면 꼭 성능테스트를 하고 사용하는 것이 좋다.

 

출처 : https://www.inflearn.com/questions/59014

728x90