2024/07 3

[JPA] 즉시로딩과 지연로딩, JPQL에서의 N+1 문제와 해결 방법

JPA에서 데이터를 조회할 때 즉시 로딩(EAGER)과 지연 로딩(LAZY) 두가지 방식이 있다. 이 두가지 방식을 간단하게 설명하면 즉시 로딩은 데이터를 조회할 때 연관된 데이터까지 한 번에 불러오는 것이고, 지연 로딩은 필요한 시점에 연관된 데이터를 가져오는 것이다.Fetch Type이란Fetch Type이란, JPA가 하나의 Entity를 조회할 때, 연관관계에 있는 객체들을 어떻게 가져올 것이냐를 나타내는 설정 값이다. JPA는 ORM 기술로, 사용자가 직접 SQL를 생성하지 않고 JPA에서 JPQL을 이용하여 쿼리문을 생성하기 때문에 객체와 필드를 보고 쿼리를 생성하게 된다. 따라서, 다른 객체와 연관관계가 매핑이 되어있으면 그 객체들까지 조회하게 되는데, 이때 이 객체를 어떤 시점에 불러올 것..

JPA 2024.07.21

[JPA] 연관관계 매핑 - 연관 관계를 매핑할 때 어떻게 해야하는 가(단방향, 양방향)

JPA를 공부하면서 학습 했던 내용을 정리해보고자 한다. 일단, RDB에서의 연관관계 매핑은 FK(외래키)로 이루어진다. 그치만 객체에서의 관계는 참조로 이루어진다. (연관관계의 주인이 꼭 있어야한다.) 여기서 RDB와 ORM의 패러다임의 불일치가 발생한다. 객체와 테이블의 연관관계에 대한 차이가 분명하게 있기 때문에, JPA에서는 이러한 연관관계를 매끄럽게 이용할 수 있도록 다양한 어노테이션를 제공해준다. RDB에서에의 관계는 일대일, 일대다, 다대다가 존재한다. 테이블간의 연관관계가 1:1이냐, 1:N이냐, N:M이냐에 따라 외래키를 필드를 추가하여 사용한다. 객체를 테이블에 맞추어서 모델링을 하게 되는 경우를 보면 참조 대신에 외래 키를 직접 필드에 주입을 하게 된다. Member라는 엔티티 안에 ..

JPA 2024.07.20

JPA와 영속성 컨텍스트 이해하기

JPA는 간단하게 말하자면 자바 ORM(Object-Relatinal Mapping) 기술 표준으로 사용되는 인터페이스의 모음이다.즉, 실제적으로 구현된 것이 아니라 구현된 클래스와 매핑을 해주기 위해 사용되는 프레임워크인 것이다.JPA를 구현한 대표적인 오픈소스는 Hibernate가 있다. 주로 사용해 왔던 JPA지만 지나간 이론적인 내용들을 다시 한번 살펴보겠다. JPA에서 가장 중요한 2가지는 다음과 같다객체와 관계형 데이터베이스를 어떻게 매핑할 것인가? (Object Relational Mapping)영속성 컨텍스트그럼 여기서 영속성 컨텍스트가 무엇이냐? 영속성 컨텍스트를 이해하기전 엔티티 매니저 팩토리와 엔티니 매니저를 알아야 한다. (그림)영속성 컨텍스트란?JPA를 이해하는데 가장 중요한 용어..

JPA 2024.07.05