소소한개발팁
article thumbnail
반응형

Proxy 란 무엇인가?

프록시는 객체 지향 프로그래밍에서 다른 객체에 대한 접근을 제어하거나 추가적인 동작을 수행하는 데 사용되는 중간 객체입니다.
JPA에서 프록시는 엔티티 객체를 대신하여 데이터베이스에서 필요한 정보를 지연 로딩하거나 추가적인 작업을 수행합니다.

 

프록시의 주요 사용 사례

엔티티 로딩: JPA는 엔티티를 로딩할 때 프록시를 사용하여 성능을 최적화합니다. 엔티티가 실제로 필요할 때까지 로딩을 지연할 수 있습니다.


지연 로딩 (Lazy Loading): 프록시를 사용하여 엔티티의 연관 관계를 지연 로딩으로 설정할 수 있으며, 실제로 접근할 때 로딩됩니다.

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "부서_id")
private 부서 부서;

 


프록시 초기화: 프록시를 강제로 초기화하려면, 엔티티의 프록시 속성에 접근하면 됩니다.

부서 부서 = 사용자.get부서(); // 프록시 초기화

 

프록시 사용 예시

// 사용자 엔티티 조회 (프록시 사용)
사용자 사용자 = entityManager.find(사용자.class, 1L);

// 부서 엔티티는 프록시로 로딩됨 (지연 로딩)
부서 부서 = 사용자.get부서(); // 실제 접근할 때 로딩

 

어떤 상황에서 어떤 전략을 사용해야 하는지 안내: 

프록시 사용 (지연 로딩):
연관된 엔티티가 필요한 경우에만 로딩해야 할 때.
연관된 엔티티가 많거나 큰 규모의 데이터인 경우 성능을 최적화하려는 경우.

 

Eager Loading(즉시 로딩) 사용:
연관된 엔티티가 항상 필요한 경우.
연관된 엔티티 수가 적고, 성능 저하 없이 모든 데이터를 함께 로딩할 수 있는 경우

 

반응형

 

연관 어노테이션

@ManyToOne, @OneToOne, @OneToMany 및 @ManyToMany

@ManyToOne, @OneToOne, @OneToMany, @ManyToMany 어노테이션을 사용하여 다대일(N:1) 및 일대일(1:1) 관계를 설정할 때 프록시로의 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.

@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "부서_id")
private 부서 부서;


@OneToMany(mappedBy = "사용자", fetch = FetchType.LAZY)
private List<주문> 주문들;

 

@Basic(fetch = FetchType.LAZY), @ElementCollection(fetch = FetchType.LAZY):

@Basic 어노테이션을 사용하여 엔티티의 기본 속성에 대한 프록시 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.

 

@ElementCollection 어노테이션을 사용하여 값 타입 컬렉션을 매핑할 때 프록시 로딩을 활성화할 수 있습니다.
fetch 속성을 FetchType.LAZY로 설정하여 지연 로딩을 사용하도록 설정할 수 있습니다.

 

@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
profile

소소한개발팁

@개발자 뱅

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!