목록hibernate (2)
훈훈훈
Springboot와 JPA를 사용하는 서비스에서 Hibernate SQL 쿼리 로그를 확인해보니 insert 쿼리가 단 건씩 발생하는 것을 보았다. 분명 saveAll() 메서드를 사용하고 있는 함수였지만 의도한 대로 동작하지 않았던 것이다. 발생한 쿼리는 아래와 같았다. Hibernate: insert into user (name) values (?) Hibernate: insert into user (name) values (?) Hibernate: insert into user (name) values (?) Hibernate: insert into user (name) values (?) Hibernate: insert into user (name) values (?) Hibernate: ins..
이번에는 스프링 부트와 Kotlin 그리고 JPA(Hibernate) 사용하면서 겪었던 N+1 이슈를 정리해보려고 한다. 여러 연관관계가 매핑되어 있는 테이블의 전체 데이터를 조회하는 API를 호출하였을 때, 한방 쿼리가 발생할 것으로 예상을 했지만.... 결과는 몇천만 건 이상 쿼리가 발생하는 이슈가 발견되었다. 해당 글에서는 문제를 해결하면서 알게된 사용한 기술들에서 발생한 문제점과 해결방안을 공유하려고 한다. Hibernate 하이버네이트는 지연로딩(Lazy Loading)을 할 때 Entity를 프록시 객체로 조회한다고 한다. 그리고 공식 문서를 확인해보면 Entity Class를 final 속성으로 선언하면 프록시 객체를 생성할 수 없기 때문에 지연로딩을 사용할 수 없다고 명시되어 있다. 코틀린..