1. Proxy 란 무엇인가?
프록시는 객체 지향 프로그래밍에서 다른 객체에 대한 접근을 제어하거나 추가적인 동작을 수행하는 데 사용되는 중간 객체입니다.
JPA에서 프록시는 엔티티 객체를 대신하여 데이터베이스에서 필요한 정보를 지연 로딩하거나 추가적인 작업을 수행합니다.
1.1. 프록시의 주요 사용 사례
엔티티 로딩: JPA는 엔티티를 로딩할 때 프록시를 사용하여 성능을 최적화합니다. 엔티티가 실제로 필요할 때까지 로딩을 지연할 수 있습니다.
지연 로딩 (Lazy Loading): 프록시를 사용하여 엔티티의 연관 관계를 지연 로딩으로 설정할 수 있으며, 실제로 접근할 때 로딩됩니다.
<java />
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "부서_id")
private 부서 부서;
프록시 초기화: 프록시를 강제로 초기화하려면, 엔티티의 프록시 속성에 접근하면 됩니다.
<java />
부서 부서 = 사용자.get부서(); // 프록시 초기화
1.2. 프록시 사용 예시
<java />
// 사용자 엔티티 조회 (프록시 사용)
사용자 사용자 = entityManager.find(사용자.class, 1L);
// 부서 엔티티는 프록시로 로딩됨 (지연 로딩)
부서 부서 = 사용자.get부서(); // 실제 접근할 때 로딩
1.3. 어떤 상황에서 어떤 전략을 사용해야 하는지 안내:
프록시 사용 (지연 로딩):
연관된 엔티티가 필요한 경우에만 로딩해야 할 때.
연관된 엔티티가 많거나 큰 규모의 데이터인 경우 성능을 최적화하려는 경우.
Eager Loading(즉시 로딩) 사용:
연관된 엔티티가 항상 필요한 경우.
연관된 엔티티 수가 적고, 성능 저하 없이 모든 데이터를 함께 로딩할 수 있는 경우
2. 연관 어노테이션
2.1. @ManyToOne, @OneToOne, @OneToMany 및 @ManyToMany
@ManyToOne, @OneToOne, @OneToMany, @ManyToMany 어노테이션을 사용하여 다대일(N:1) 및 일대일(1:1) 관계를 설정할 때 프록시로의 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.
<java />
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "부서_id")
private 부서 부서;
@OneToMany(mappedBy = "사용자", fetch = FetchType.LAZY)
private List<주문> 주문들;
2.2. @Basic(fetch = FetchType.LAZY), @ElementCollection(fetch = FetchType.LAZY):
@Basic 어노테이션을 사용하여 엔티티의 기본 속성에 대한 프록시 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.
@ElementCollection 어노테이션을 사용하여 값 타입 컬렉션을 매핑할 때 프록시 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.
<java />
@Basic(fetch = FetchType.LAZY)
@Column(name = "프로필_이미지")
private byte[] 프로필이미지;
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "전화번호", joinColumns = @JoinColumn(name = "사용자_id"))
@Column(name = "전화번호")
private List<String> 전화번호목록;
'컴퓨터 언어 > Java' 카테고리의 다른 글
JPA - JPQL 사용 방법 (0) | 2023.09.12 |
---|---|
JPA - 값 타입 사용 방법 (0) | 2023.09.11 |
JPA - 상속 관계 및 MappedSuperclass (0) | 2023.09.07 |
JPA - 연관관계 (0) | 2023.09.01 |
JPA - 영속성 (0) | 2023.09.01 |