Spring Boot 2 → 3 마이그레이션 후 로그가 출력되지 않는 문제
Spring Boot 3으로 마이그레이션한 후 바인딩된 값이 로그에 찍히지 않는 문제를 겪었습니다.
SQL 쿼리는 정상적으로 출력되지만, ?에 어떤 값이 들어갔는지 확인할 수 없었습니다.
예를 들어, 다음과 같은 JPA 쿼리를 실행한다고 가정해 보겠습니다.
List<Product> products = productRepository.findByPriceLessThan(5000);
Spring Boot 2에서는 로그가 이렇게 출력되었습니다.
select product0_.id, product0_.name, product0_.price from products product0_ where product0_.price<?
binding parameter [1] as [INTEGER] - [5000]
Spring Boot 3에서 기존 설정을 유지하면 바인딩된 값이 아예 출력되지 않습니다.
select product0_.id, product0_.name, product0_.price from products product0_ where product0_.price<?
이렇게 ? 안에 어떤 값이 들어가는지 확인할 수 없어서 쿼리 디버깅이 매우 불편해졌습니다.
Spring Boot 2에서 JPA 로그 파라미터 바인딩 설정
Spring Boot 2에서는 JPA 쿼리 로그를 자세히 확인하려면 application.properties 또는 application.yml에 다음과 같이 설정하면 되었습니다.
logging:
level:
org.hibernate.type: trace
Spring Boot 3에서 변경된 JPA 로그 파라미터 바인딩 옵션
하지만 Spring Boot 3로 업그레이드한 후, 기존 설정(logging.level.org.hibernate.type=trace)이 더 이상 동작하지 않는 문제가 발생했습니다.
이는 Hibernate 6.x로 업그레이드되면서 로그 설정 방식이 변경되었기 때문인데요.
이제는 아래와 같이 설정을 변경해야 합니다.
logging:
level:
org.hibernate.orm.jdbc.bind: trace
위와 같이 설정하면 아래 예시와 같이 로그에서 파라미터를 확인할 수 있습니다.
select product0_.id, product0_.name, product0_.price from products product0_ where product0_.price<?
binding parameter [1] as [INTEGER] - [5000]
이제 ?에 바인딩된 값 [5000]이 정상적으로 표시되는 것을 확인할 수 있습니다.
핵심 정리
Spring Boot 2: logging.level.org.hibernate.type=trace
Spring Boot 3: logging.level.org.hibernate.orm.jdbc.bind=trace
저도 처음에는 "왜 로그가 안 찍히지?" 하면서 원인을 찾느라 시간을 허비했는데요.
같은 문제를 겪는 개발자분들이 시간을 절약할 수 있도록 이번 내용을 공유합니다.
Spring Boot 3로 마이그레이션을 진행 중이라면, 위 설정을 꼭 확인하고 적용해 보세요!
'Spring > JPA' 카테고리의 다른 글
JPA 기본키 생성 전략, MySQL @GeneratedValue AUTO 사용시 SEQ 테이블 생성 문제 (0) | 2025.01.24 |
---|