Hibernate 5

[SpringBoot] JPA 쿼리 성능 감시 가이드

개요 팀 내 JPA 쿼리 성능 감시 가이드를 작성하는 업무를 맡은 김에 간단하게 다음 항목을 정리해 보겠습니다. JPA slow 쿼리 검출 JPA N + 1 문제가 의심되는 api 검출 JPA N + 1 문제가 의심되는 api의 경우 범고래님 블로그를 많이 참고했습니다! 감사합니다. 프로젝트 환경 SpringBoot 2.6.3 Java 1.8 Jpa slow 쿼리 검출 application.yml에 다음과 같이 설정을 하면 Hibernate에서 slow query를 로깅해 줍니다. 테스트 삼아 100ms를 기준으로 잡았고 그 결과 실행시간이 205ms인 SELECT 쿼리가 아래와 같이 로깅되었습니다. 오래 걸린 쿼리를 로깅하는 것 자체는 좋았지만 구현한 JpaRepository가 워낙 많다 보니 검출된 ..

[DEV] 기록 2024.03.12

[SpringBoot] HibernateException: No CurrentSessionContext configured!

개요 HibernateItemWriter를 실행하려는데 아래와 같은 에러가 발생했습니다. No CurrentSessionContext configured! 해결 방법 아래와 같이 application.properties 혹은 application.yml에 설정을 추가하면 해결됩니다. 출처 https://stackoverflow.com/questions/33635453/hibernateexception-no-currentsessioncontext-configured-in-spring-boot HibernateException: No CurrentSessionContext configured! in spring boot I have the following configuration: @SpringBootAp..

[DEV] 기록 2023.12.19

[JPA] Hibernate MultipleBagFetchException

개요 JPA 쿼리를 통해 엔티티를 불러올 때 두 개 이상의 @OneToMany 관계를 갖는 엔티티를 함께 EAGER LOADING 할 때 아래와 같은 오류 메시지가 발생했습니다. 저 같은 경우 위와 같이 @OneToMany 관계가 다수인 엔티티를 FETCH JOIN을 통해 한 번에 불러오려고 할 때 MultipleBagFetchException 예외가 발생했습니다. * SampleInput과 SampleOutput을 모두 fetch type EAGER로 변환한다고 해도 동일한 에러가 발생합니다.) 원인 위와 같은 예외가 발생하는 원인을 파악하기 위해서는 우선 Bag의 정의를 살펴봐야 합니다. Bag은 중복된 요소를 허용하는 순서가 없는 컬렉션(MultiSet)이며 Java Collection에서는 Ba..

DB/JPA 2023.06.28

[SpringBoot] 컴파일 후 data.sql 오류가 발생할 경우

개요 ddl-auto를 create-drop으로 설정했기 때문에 resources 폴더 하위에 data.sql 파일을 생성하여 초기 데이터 값을 넣도록 설정했습니다. 위와 같이 설정했을 때 SpringBoot 2.4.X 버전에서는 정상적으로 작동했지만 2.5.0 버전 이상부터는 오류가 발생하여 찾아보니 application.properties 혹은 application.yml에 추가적인 설정이 필요했습니다. 문제 원인 SpringBoot 2.5.0 버전부터는 hibernate 초기화 과정보다 data.sql이 먼저 실행되어 문제가 발생했습니다. 해결 방법 application.yml 혹은 application.properties에 아래 내용 추가하면 됩니다. spring.jpa.defer-datasour..

[DEV] 기록 2022.05.02

Hibernate SQL 파라미터 값들을 로그에서 확인하는 방법

[개요] hibernate sql을 실행하는데 쿼리 파라미터 값이 보이지 않고 아래와 같이 '?'로 로그가 남았습니다. 굳이 워크벤치를 확인하지 않고 로그만 보더라도 값들이 잘 들어갔나 확인하기 위해 실제 파라미터 값들이 보였으면 해서 방법을 찾아봤습니다. [해결방법] 해결방법은 의외로 간단했습니다. log4j.properties 파일에 아래와 같이 작성을 해주면 됩니다. # Root logger option log4j.rootLogger=DEBUG, stdout # Redirect log messages to console log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j...

[DEV] 기록 2021.01.02