즉시로딩 vs 지연로딩

Shaun·2021년 10월 31일
1

JPA

목록 보기
20/31

테이블을 만들다보면 맵핑관계에 대해 고민하게 됀다.

  • 이 테이블들은 서로 연관이 있지만 같이 사용되지 않을때와 같이 자주 사용될때

  • 같이 자주사용하지 않는데 맵핑으로 인해 A라는 테이블을 불러올떄마다 B라는 테이블을 자동으로 불러오면 그만큼 쿼리가 나가니 성능이 저하 된다.

지연로딩

  • 연관된 테이블이 자주 함꼐 사용 x

  • fethc = FetchType.LAZY


  • 연관된 테이블을 즉시 불러오지 않고 프록시 객체를 불러온다.그 객체의 메서드나 데이터를 건드리는 순간 진짜 객체를 불러온다

즉시로딩

  • 연관된 테이블이 자주 함께 사용

  • 하지만 실무에서는 지연로딩을 권장

  • 연관된 테이블을 즉시 불러온다(프록시 x)

즉시로딩의 문제점

  • 즉시 로딩을 적용하면 예상하지 못한 SQL이 발생
    -> 수많은 쿼리를 보내 성능저하 유발

  • JPQL 사용시 N+1 문제 발생
    -> EX) select m from Member m 라는 쿼리를 하나 보냈지만(1) team 이라는 객체를 불러옴(N)

-> 지연로딩을 기본으로 한다. 자주 같이 사용하는 테이블 일때만 즉시로딩 설정,
-> 지연로딩설정 + 테이블 같이 불러오고싶다 = Fetch join 을 활용하자!

profile
호주쉐프에서 개발자까지..

0개의 댓글