김태오

Hibernate Slow Query logging 및 yaml, properties 파일 동작 방식에 관하여 본문

Spring Boot

Hibernate Slow Query logging 및 yaml, properties 파일 동작 방식에 관하여

ystc1247 2024. 7. 15. 18:51

느린 데이터베이스 쿼리를 콘솔에 로깅하려는 시도를 했다. 

HTTP intercepter과 비슷한 방식으로 데이터베이스에 쿼리가 처리되는 순간 hibernate 혹은 hikariCP 관련하여 설정파일 구현이 필요하지 않을까 싶었는데 생각보다 간단히 해결할 수 있다.

 

그냥 application.properties 에 

spring.jpa.properties.hibernate.generate_statistics=true

logging.level.org.hibernate=INFO

hibernate.session.events.log.LOG_QUERIES_SLOWER_THAN_MS=원하는 단위 시간 MS (0초과)

 

를 추가하면 된다. yaml 로 설정하는 경우도 마찬가지로 늘 그랬듯 . -> : 로 해주면 된다.

 

당연히 로깅 레벨에 차등을 두거나 statistics 관련만 INFO 로 설정해도 문제없다.

 

그런데 로깅이 되지 않는다.

 

혹시나 해서 application.yaml 이 아닌 직접적인 설정 파일인 hibernate.properties 에 저 설정들을 추가하여 실행해보니 정상적으로 로깅됨을 확인할 수 있었다.

 

우선 명확히 할 것은, .yaml/.yml 파일과 .properties 파일을 혼용해서 쓰는 경우를 Spring Boot 개발사에서 고려하지 않았다는 것이다.

 

우선 https://docs.spring.io/spring-boot/docs/2.4.2/reference/htmlsingle/#boot-features-external-config 을 읽어보자.

 

환경 변수 등 설정파일에 담기는 configuration 들에 대한 우선순위가 명세화되어 있는데, .yaml format 과 .properties format 의 우선순위에 대한 것은 찾을 수 없다. 다만 테스트들을 통해 (위 경우와 같은) .properties 파일이 우선순위로 읽힘을 알 수 있다.

 

또 하나 눈여겨볼 것은, application-{ENV}.yml 이 application.yml 에 우선순위로 읽힌다는 것이다. 많은 프로젝트에서 환경관리를 위해 application.yml 을 공통으로 두고 develop, release, main 등의 환경을 별도로 정의하는 것을 흔하게 볼 수 있는데, 작동 방식이 문서화되어 있음을 확인할 수 있다.