java/jpa

[JPA] 쿼리 파라미터 로그 남기기

danuri 2021. 5. 23. 16:30

기본적으로 JPA에서 쿼리를 화면에 출력할 때, 쿼리 파라미터가 '?'로 찍힌다.

insert 
    into
        member
        (username, id) 
    values
        (?, ?)

 

파라미터 값을 로그로 남기는 법을 알아보자.

 

1. 설정 정보

간단한 방법으로 application.yml 파일에 다음 값을 추가하면 된다.

logging.level:
  org.hibernate.SQL: debug
  org.hibernate.type: trace

org.hibernate.SQL 옵션은 로거를 통해 하이버네이트 실행 SQL을 남긴다.

 

중요한 것은 org.hibernate.type 옵션 이다. 이 옵션을 통해 SQL 실행 파라미터 로그를 남길 수가 있다.

 

<쿼리 예시>

insert 
    into
        member
        (username, id) 
    values
        (?, ?)
        
... binding parameter [1] as [VARCHAR] - [memberA]
... binding parameter [2] as [BIGINT] - [1]

이와 같이 각 파라미터에 어떤 값이 들어가는지 확인할 수 있다.

 

2. 외부 라이브러리 - p6spy

https://github.com/gavlyukovskiy/spring-boot-data-source-decorator

 

스프링 부트를 사용하면 이 라이브러리만 추가하면 된다.

implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.7'

 

<쿼리 예시>

insert 
    into
        member
        (username, id) 
    values
        (?, ?)
        
insert into member (username, id) values (?, ?)
insert into member (username, id) values ('memberA', 1);

이렇게 보다 깔끔하게 파라미터 값을 볼 수 있다.

 

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