JPA 쿼리 파라미터 체크

OH JU HYEON·2022년 8월 14일
1

Java

목록 보기
4/6
post-thumbnail

JPA 쿼리 파라미터 로그 체크

1. JPA 쿼리 파라미터..?

JPA를 실행할 때 생성되는 쿼리 중에서 아래와 같이 ? 로 체크되는 쿼리 파라미터의 값이 있는데 이 값이 뭔지 궁금할 때가 많다. 이때 이 쿼리 파라미터가 어떤 값을 가지고 있는지 확인할 수 있는 2가지 방법에 대해 체크해 본다.

2022-08-14 23:24:47.949 DEBUG 3377 --- [           main] org.hibernate.SQL                        : 
    insert 
    into
        member
        (username, id) 
    values
        (?, ?)

위 코드는 JPA를 실행시키고 자동으로 생성된 쿼리이다. (?, ?)에 어떤 값이 들어오는지 이렇게 보면 확인할 수가 없다.

2. 로그를 사용한 쿼리 파라미터 값 체크

로그를 사용한 쿼리 파라미터 값 체크하는 방법은 간단하게 application.yml에 설정만 추가해 주면 된다. 코드는 아래와 같다.

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

org.hibernate.typetrace로 설정해 주면 된다. 이때 쿼리 파라미터 값이 바로 보이는 게 아니라 로그로 알려지게 된다.

2022-08-14 23:24:47.953 TRACE 3377 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [1] as [VARCHAR] - [memberA]
2022-08-14 23:24:47.953 TRACE 3377 --- [           main] o.h.type.descriptor.sql.BasicBinder      : binding parameter [2] as [BIGINT] - [1]

위와 같이 JPA로 자동 생성된 쿼리 아래 쿼리 파라미터 값이 로그로 남게 된다.

3. 라이브러리를 활용한 쿼리 파라미터 값 체크

라이브러리는 외부 라이브러리를 사용하는데 여기에서 확인이 가능하다. 간단하게 사용을 원하면 의존성을 추가해 주면 되는데 코드는 아래와 같다.

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

사용할 때 버전은 위에 연결된 깃 허브에서 체크해 보면 좋을 것 같다. 이렇게 라이브러리를 간단하게 추가하는 것만으로 쿼리 파라미터 값 체크를 위한 준비는 끝이 난다.

2022-08-14 23:24:47.954  INFO 3377 --- [           main] p6spy                                    : #1660487087954 | took 0ms | statement | connection 3| url jdbc:h2:tcp://localhost/~/jpashop
insert into member (username, id) values (?, ?)
insert into member (username, id) values ('memberA', 1);

이렇게 p6spy가 로그에 찍히면서 쿼리의 값이 로그에 표시가 된다.

다만, 이 외부 라이브러리는 시스템 자원을 사용하기 때문에 개발 중에는 문제가 없으나 운영 시스템에 배포를 하게 된다면 성능 테스트를 사용하고 하는 것이 좋다. 왜냐하면 병목 현상의 원인이 될 수 있기 때문이다.

참고

라이브러리 깃

profile
읽기만 해도 이해가 되는 글을 쓰기 위해 노력합니다.

0개의 댓글