JPA
-
N+1 문제란? 그리고 해결방법 (feat. fetch join)개발/JPA & Hibernate 2021. 7. 18. 15:19
N+1 문제란? 객체 조회(1회)의 결과로 n개의 결과가 나온다고 했을 때, 조회된 객체안에 또 다른 객체가 있을 수 있다. 그렇다면 객체안의 객체를 조회하기 위해 또 다른 쿼리가 발생하는 경우가 있는데, 그러면 처음 조회된 n개의 결과만큼 새로운 쿼리가 발생한다. 즉, 첫 조회 1회 + 첫 조회 결과 n개 만큼의 결과가 증가하는 현상을 놓고 n+1 문제라고 한다. JPA에서 N+1 문제 해결 Fetch Join 사용 가장 일반적인 방법이다. Fetch Join에 관한 설명은 이 글 마지막에 정리했다. 애초에 사용될 데이터라면 지연로딩을 하지않고, 첫번째 쿼리때 Fetch Join 해서 가져오는 것이 좋다. Fetch Join에서도 설명하겠지만, Join이 아닌 Fetch Join의 차이는 Project..
-
JPA의 쓰기지연 기능 확인해보기 (transactional write-behind)개발/JPA & Hibernate 2021. 7. 16. 19:00
JPA의 특징중 하나는 영속성 컨텍스트 (Persistence Context)내에서 쓰기지연(transactional write-behind)이 발생한다는 것입니다. 이 글에서는 JPA와 Mybatis를 이용해 쓰기지연을 했을때와 안했을 때를 비교해보려고 합니다. (Mybatis는 쓰기지연을 하지 않습니다.) 쓰기지연이란? (transactional write-behind) 영속성 컨텍스트에 변경이 발생했을 때, 바로 데이터베이스로 쿼리를 보내지 않고 SQL 쿼리를 버퍼에 모아놨다가, 영속성 컨텍스트가 flush 하는 시점에 모아둔 SQL 쿼리를 데이터베이스로 보내는 기능입니다. 사전 지식 - 영속성 컨텍스트는 동일성(Identity)를 보장한다. - 영속성 컨텍스트는 1차 캐시의 역할을 한다. 즉 객체..