Backend/JPA
[JPA] OSIV(Open Session In View)
[JPA] OSIV(Open Session In View)
2023.05.09OSIV(Open Session In View)? OSIV는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 뷰까지 유지된다면 엔티티가 영속 상태로 유지되어 있어, 뷰에서도 지연 로딩을 사용할 수 있다. 즉 OSIV가 활성화 된 상태에서는 다음과 같이 영속성 컨텍스트 생존 범위가 요청이 끝나는 시점까지 유지된다. OSIV가 활성화 상태일 때 동작은 다음과 같다. 클라이언트의 요청이 들어오면 서블릿 필터나, 스프링 인터셉터에서 영속성 컨텍스트를 생성한다. 트랜잭션을 시작할 때 미리 생성해둔 영속성 컨텍스트를 찾아와서 트랜잭션을 시작한다. 서비스 계층이 끝나면 트랜잭션을 commit하고 영속성 컨텍스트를 flush한다. 이 시점에 트랜잭션은 끝나지만 영속성 컨텍스트는 종료되지 않는다. 컨트롤러..
[JPA] N+1 문제
[JPA] N+1 문제
2023.04.03N+1 문제? N+1 문제란 연관 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n) 만큼 연관관계의 조회 쿼리가 추가로 발생하는 현상을 말한다. 예를 들어, Member와 여러 Member를 가지는 MemberGroup의 관계가 있다고 하자. Member와 MemberGroup Entity는 다음과 같이 구성되어 있다. @Getter @Entity @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; @ManyToOne @JoinColumn(name ..