728x90
반응형
728x90
JPA 프록시
- EntityManager의 getReference()를 사용하여 엔티티 객체의 프록시를 반환
- getReference()는 엔티티의 ID를 기준으로 해당 엔티티의 프록시를 생성
- 실제 클래스를 상속받아서 만들어짐
- 프록시 객체는 실제 객체의 참조를 보관
- 프록시 객체를 호출하면 프록시 객체는 실제 객체의 메소드 호출
프록시 객체 초기화
- 프록시 객체 반환 시 실제 데이터베이스에 조회 쿼리가 실행되지 않음
- 프록시 객체를 처음 사용하는 시점 초기화 되며 쿼리가 실행
- 프록시 객체가 초기화되어도 실제 엔티티 객체로 변경되지는 않음
- 영속성 컨텍스트에 이미 찾을 엔티티가 존재한다면 getReference()를 사용해도 프록시 대신 실제 엔티티 반환
- 준영속 상태에서 프록시를 초기화할 시 오류 발생
즉시 로딩 & 지연 로딩
즉시 로딩
- 엔티티 조회 시 모든 연관 엔티티를 같이 로드하는 방식
- fetch = FetchType.EAGER 사용
- 장점
- 추가적인 쿼리 발생은 없음
- 단점
- 초기 로딩 시 많은 데이터를 함께 로드하여 성능 저하
지연 로딩
- 엔티티를 조회 시 연관된 데이터가 실제로 필요할 때까지 로드하지 않는 방식
- 엔티티와 연관된 엔티티는 프록시 객체로 생성됨
- fetch = FetchType.LAZY 사용
- 장점
- 초기 로딩 시 필요한 데이터만 로드하여 성능이 좋음
- 단점
- 데이터 접근이 빈번할 경우 추가 쿼리가 발생하여 성능이 저하 -> JPQL의 JOIN FETCH를 사용하여 한 번의 쿼리로 필요한 연관된 데이터를 로드하여 사용
영속성 전이 CASCADE
- 엔티티 간의 관계에서 특정 작업을 연쇄적으로 수행
- 데이터베이스 cascade 옵션을 자바 코드에서 사용하는 것
- 옵션
- CascadeType.PERSIST: 부모 엔티티가 저장될 때 연관된 자식 엔티티도 자동으로 저장
- CascadeType.MERGE: 부모 엔티티가 병합될 때 연관된 자식 엔티티도 자동으로 병합
- CascadeType.REMOVE: 부모 엔티티가 삭제될 때 연관된 자식 엔티티도 자동으로 삭제
- CascadeType.REFRESH: 부모 엔티티가 새로 고쳐질 때 연관된 자식 엔티티도 자동으로 새로 고침
- CascadeType.DETACH: 부모 엔티티가 분리될 때 연관된 자식 엔티티도 자동으로 분리
- CascadeType.ALL: 모든 옵션 적용
자바 ORM 표준 JPA 프로그래밍 - 기본편 강의 | 김영한 - 인프런 (inflearn.com) 강의 내용 참고
728x90
'백엔드 > Spring' 카테고리의 다른 글
[Spring] JPA - JPQL(Java Persistence Query Language) (1) | 2024.09.13 |
---|---|
[Spring] JPA 값 타입 (0) | 2024.09.12 |
[Spring] 연관관계 매핑 (0) | 2024.09.10 |
[Spring] JPA 엔티티 매핑 (0) | 2024.09.09 |
[Spring] 영속성 컨텍스트 (Persistence Context) (0) | 2024.09.08 |