본문 바로가기

JPA3

[JPA] N+1 문제 발생 원인과 해결방법 [JPA] N+1 문제 발생 원인과 해결방법 💡 원인 [JPA] 영속성 관리, 준영속 상태와 지연 로딩, N+1 문제 발생 원인 JPA를 사용하여 개발할 때, 성능상 주의해야 할 것이 N+1 문제이다. 📌 즉시 로딩과 N+1 일반적으로 제공되는 find() 메소드 등을 사용할 때는 jpa가 내부적으로 join문에 대한 쿼리를 만들어서 반환을 하기 때문에 즉시 로딩이 큰 문제가 없어 보이기도 합니다. 그러나 JPQL을 사용할 때, 문제가 발생합니다. JPA는 JPQL을 사용할 때는 글로벌 페치 전략을 참고하지 않고 오직 JPQL 만 사용하기 때문에, 즉시 로딩 / 지연 로딩 구분 없이 쿼리문만 따르게 됩니다. List classrooms = em.createQuery("select c from Classr.. 2022. 8. 31.
[JPA] 영속성 관리, 준영속 상태와 지연로딩, N+1 문제 발생 원인 [JPA] 영속성 관리, 준영속 상태와 지연 로딩, N+1 문제 발생 원인 💡 들어가면서 스프링 환경에서 JPA를 사용할때, 트랜잭션 범위의 영속성 컨텍스트 전략이 기본으로 사용된다. 이름 그대로, 트랜잭션의 범위가 영속성 컨텍스트의 생존 범위가 같다는 의미이다. 트랜잭션을 시작할때, 영속성 컨텍스트가 생성되며, 끝날 때 종료한다. 그리고 같은 트랜잭션 안에서는 항상 같은 영속성 컨텍스트에 접근한다. 더보기 추가 그래서 트랜잭션이 다르면 다른 영속성 컨텍스트를 사용한다. 여러 스레드에서 동시에 요청이 와서 같은 엔티티 매니저를 사용한다고 해도, 트랜잭션에 따라 접근하는 영속성 컨텍스트가 다르기 때문에 멀티 스레드 상황에서 안전하다. 스프링에서는 트랜잭션과 멀티 스레드 상황을 컨테이너가 처리해주어, 개발자.. 2022. 8. 31.
[DB] JPA와 mapper 방식 비교 및 장단점 [DB] JPA와 mybatis, mapper 방식 비교 및 장단점 갈수록 JPA를 사용하는 곳이 늘어나고 있다. 최근에 진행한 프로젝트에서 jpa로 진행하는 경우가 많았는데, 사용할 수록 두 가지의 장단점이 뚜렷하여 mybatis를 사용한 mapper 방식과 여러가지로 비교가 될 수 밖에 없었다. 간단히 정리해보자면, 다음과 같다. 장점 💡 관리 및 유지보수가 쉽다 : SQL 쿼리문을 직접적으로 작성하지 않고 객체를 바탕으로 데이터베이스를 동작시키므로 유지보수가 간결하다. 쿼리가 수정되면 그를 담을 DTO 필드에 모두 변경이 일어나야하지만 JPA는 엔티티 클래스 정보만 변경하면 쉽게 관리가 가능하다. 💡 생산성 향상 : 기존에는 개발자가 CRUD용 쿼리를 하나하나 작성해야 하며, DB에서 컬럼이 추가되.. 2021. 5. 8.