[22/03/09] JPA 지연로딩(LAZY LOADING)

Que Lin·2022년 3월 9일
0

1day 1commit

목록 보기
47/63

프록시
: 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해 주는 컴퓨터 시스템이나 응용 프로그램을 가리킨다. 서버와 클라이언트 사이에 중계기로서 대리로 통신을 수행하는 것을 가리켜 '프록시', 그 중계 기능을 하는 것을 프록시 서버라고 부른다.

엔티티를 조회할 때 연관된 엔티티들이 항상 사용되는 것은 아니다 .

예를 들어 회원 객체를 조회하면 연관관계 매핑을 한 팀 정보도 함께 조회된다.

연관관계 매핑이 되어있다고해서 데이터베이스에서 함께 조회해 두는 것은 효율적이지 않기때문에,

엔티티가 실제 사용될 때까지 데이터베이스 조회를 지연하는 방법을 제공하는데 이것을 지연 로딩이라고 한다.

그리고 지연 로딩 기능을 사용하려면 실제 엔티티 객체 대신에 데이터베이스 조회를 지연할 수 있는 가짜 객체가 필요한데 이것을 프록시 객체라고 한다.

즉시 로딩(EAGER LOADING)

: 엔티티를 조회할 때 연관된 엔티티도 함께 조회한다.

설정 방법:
@ManyToOne(fetch = FetchType.EAGER)

연관된 객체까지 조회하려고 한번더 쿼리를 실행하기 보다는 JPA에서는 즉시 로딩을 최적화하기 위해 가능하면 조인 쿼리를 사용.
@ManyToOne, @OneToOne 과 같이 연관된 엔티티가 하나인 경우에 디폴트 패치 전략이다.

지연 로딩(LAZY LOADING)

: 연관된 엔티티를 실제 사용하는 시점에 데이터베이스에서 조회한다.

설정 방법:
@ManyToOne(fetch = FetchType.LAZY)

연관된 객체에 프록시 객체를 넣어둠. 실제 데이터가 필요한 순간이 되어서야 데이터베이스를 조회해서 프록시 객체를 초기화함.
@OneToMany, @ManyToMany와 같이 연관된 엔티티가 여러개일 때 디폴트 패치 전략이다.
참고 : https://programmer-chocho.tistory.com/81

profile
1일 1커밋 1일 1벨로그!

0개의 댓글