인프런 - 스프링/JPA 프로그래밍 - 기본편
-
[JPA] 즉시 로딩과 지연 로딩인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 28. 10:51
- 프록시 초기화 시점은 정확하게 그 객체의 메서드를 호출할 때이다. 단순히 그 객체를 가져오는 부분에서는 초기화가 안된다. - 즉시 로딩은 JPQL에서 N + 1 문제를 일으킨다. 예를 들어서 회원과 팀이 N:1 관계에서 즉시 로딩으로 설정되었을 때 회원을 조회했을 때 10명이 조회되면 최초 쿼리 1개와 회원 10명의 팀을 각각 세팅하는 쿼리 10개가 추가적으로 나가는 상황이 발생하여 N + 1 문제라고 지칭하는 것이다. (주의할 점은 JPQL이 아닌 em.find로 조회하는 경우 조인을 하여 한번에 가져온다.) - 지연 로딩으로 설정하여도 팀이 필요한 시점에 N개 만큼 추가적으로 쿼리가 날라가는 것은 동일하다. N+1 문제를 해결하는 대안은 일단 총 3가지 정도가 있다. N+1 문제 해결하는 방법 3..
-
[JPA] 프록시인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 16:26
- 상황에 따라 다르다. - 위의 getName() 메서드 호출과 같이 데이터가 실제로 필요한 시점에 프록시 객체의 Member 타입의 target이 영속성 컨텍스트를 이용하여 초기화되는 방식으로 작동한다. - 4번째 항목의 반대 상황 즉, 영속성 컨텍스트에서 em.getReference()를 호출하여 프록시 객체가 있는 상황이면 이후에 em.find()를 호출하면 프록시 객체를 반환한다. (영속성 컨텍스트에서 반복적으로 객체를 가져오면 무조건 같은 객체이다.) - 5번 항목 예시 코드 Member refMember = em.getReference(Member.class, member.getId()); System.out.println("refMember = " + refMember.getClass())..
-
[JPA] Mapped Superclass - 매핑 정보 상속인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 15:24
예시 코드 - JPA의 Auditing 기능은 아래 참고 https://prospective-developer-seo.tistory.com/47 [Spring Data JPA] JPA Auditing 기능 JPA Auditing이란? - Java에서 ORM 기술인 JPA를 사용하여 도메인을 관계형 데이터베이스 테이블에 매핑할 때 공통되는 필드나 컬럼이 존재한다. - 대표적으로 생성일자, 수정일자, 식별자 등 - Audit는 prospective-developer-seo.tistory.com 출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 https://www.inflearn.com/course/ORM-JPA-Basic 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강..
-
[JPA] 상속관계 매핑인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 15:12
- 어떤 전략을 사용하든 상위 타입은 abstract 클래스로 만드는 것이 좋다.(하위 타입 없이 상위 타입만 생성하는 경우는 없기 때문) - 추상 클래스는 생성자를 가질 수 있다.(하위 타입에서 호출함으로써 인스턴스 필드를 초기화 하는 과정이 필요할 수도 있기 때문) 단일 테이블 전략 예제 코드 @NoArgsConstructor(access = AccessLevel.PROTECTED) @Getter @Entity @Inheritance(strategy = InheritanceType.SINGLE_TABLE) @DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING) public abstract class Item ..
-
[JPA] 다양한 연관관계 매핑인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 12:13
다대일 [N:1] - 가장 많이 사용하는 연관관계로 연관관계의 주인과 외래키가 다쪽에 있는 경우 - 단방향 매핑을 우선적으로 하고 필요한 경우 양방향을 적용하면 된다. 일대다 [1:N] - 일쪽에 연관관계의 주인이 있는 경우 (테이블은 항상 다쪽에 외래키가 존재함) - 일대다(일이 연관관계의 주인인 경우)에서는 업데이트 쿼리가 추가적으로 나가야 하는 문제와 일쪽을 수정해도 다쪽에 외래키가 있기 때문에 내가 수정한 엔티티와 쿼리가 날라간 테이블이 맞지 않는다는 문제가 발생한다. - 업데이트 쿼리가 추가적으로 나가야 하는 이유는 연관관계 주인과 외래키가 있는 테이블이 다르기 때문이다. 예제 코드 Department(1) : Student(N) - 만약 여기서 @JoinColumn을 사용하지 않으면 조인 테이..
-
[JPA] 연관관계 매핑 기초인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 10:58
- 연관관계의 주인이라는 개념은 양방향 연관관계에서만 사용되는 개념이다. (테이블은 외래키로 테이블을 조인하기 때문에 방향이라는 개념이 없음) - 연관관계의 주인만이 외래 키를 관리(등록, 수정)하고 주인이 아닌 쪽은 읽기만 가능하다 - 주인이 아니면 mappedBy 속성으로 주인 지정 - 실제로 연관관계의 주인쪽만 세팅을 해도 db에 제대로 반영되지만 트랜잭션 커밋전에 연관관계의 주인이 아닌 쪽에서 데이터를 가져오는 경우 1차 캐시에서 데이터를 가져오게 되고 이 경우에는 데이터 세팅이 되어 있지 않기 때문에 양방향 연관관계 편의 메서드를 이용하여 양쪽 모두 세팅하는 것이 순수 객체 관점에서는 적합하다. (데이터를 변경하는 경우 리스트쪽에서는 기존 값을 삭제하고 새로운 값을 추가하는 등을 고려해야 한다...
-
[JPA] 엔티티 매핑인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 27. 09:16
출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 https://www.inflearn.com/course/ORM-JPA-Basic 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자 www.inflearn.com
-
[JPA] 영속성 관리 - 내부 동작 방식인프런 - 스프링/JPA 프로그래밍 - 기본편 2023. 11. 25. 18:28
영속성 컨텍스트 - 엔티티를 영구 저장하는 환경 - 논리적인 개념으로 엔티티 매니저를 통해 접근 출처: 인프런 김영한님의 자바 ORM 표준 JPA 프로그래밍 - 기본편 https://www.inflearn.com/course/ORM-JPA-Basic 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 초급자를 위해 준비한 [웹 개발, 백엔드] 강의입니다. JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자 www.inflearn.com