빈쿵바라기
좌충우돌 개발자의 기록
빈쿵바라기
전체 방문자
오늘
어제
  • 분류 전체보기 (53)
    • Programming (25)
      • JAVA (12)
      • Spring Boot (6)
      • JPA (7)
      • Python (0)
    • Database (12)
      • RDBMS (4)
      • NoSQL (7)
    • Server (11)
    • Elasticsearch (3)
    • ETC (2)

블로그 메뉴

    공지사항

    인기 글

    최근 댓글

    최근 글

    티스토리

    hELLO · Designed By 정상우.
    빈쿵바라기

    좌충우돌 개발자의 기록

    [Spring Data JPA] FetchType - 즉시 로딩(EAGER)과 지연 로딩(LAZY)
    Programming/JPA

    [Spring Data JPA] FetchType - 즉시 로딩(EAGER)과 지연 로딩(LAZY)

    2022. 8. 4. 00:41

    즉시 로딩 : @ManyToOne(fetch = FetchType.EAGER)
    지연 로딩 : @ManyToOne(fetch = FetchType.LAZY)

    JPA JOIN에는 두 가지 로딩 방법이 존재합니다. 연관관계를 가지는 객체를 조회할 때 즉시 로딩할지, 필요할 때 로딩할지에 따라 즉시로딩(EAGER), 지연로딩(LAZY)를 선택할 수 있습니다.


    이전 JPA 연관관계 매핑 포스팅에서 사용한 예제 코드로 fetch를 설명하겠습니다.

    시나리오
    1. 테이블은 회원(Member)와 팀(Team)이 있습니다.
    2. 회원(N) : 팀(1) 관계로 다대일 다중성을 가지고 있습니다.

    즉시 로딩(FetchType.EAGER)

    @Entity
    public class Team {
    
      @Id @GeneratedValue
      private Long id;
      private String name;
    
    }
      
    @Entity
    public class Member {
    
      @Id @GeneratedValue
      private Long id;
    
      private String name;
    
      // 다대일 조인 (즉시로딩)
      @ManyToOne(fetch=FetchType.EAGER)
      @JoinColumn(name="team_id")
      private Team team;
      
    }

    즉시 로딩은 회원(Member) 객체에 팀(Team)을 조인할 때 fetch를 FetchType.EAGER로 적용하면 됩니다. 그러면 회원을 조회할 때 팀과 바로 join하여 데이터를 가져옵니다.

    Member member = memberRepository.findById(1); // 이 때 Team과 조인하여 데이터 조회

     


    지연 로딩(FetchType.LAZY)

    @Entity
    public class Team {
    
      @Id @GeneratedValue
      private Long id;
      private String name;
    
    }
      
    @Entity
    public class Member {
    
      @Id @GeneratedValue
      private Long id;
    
      private String name;
    
      // 다대일 조인 (지연 로딩)
      @ManyToOne(fetch=FetchType.LAZY)
      @JoinColumn(name="team_id")
      private Team team;
      
    }

    지연 로딩은 FetchType.LAZY로 기입하면 됩니다. 지연 로딩은 회원을 조회할 때 팀과 같이 조회 하는 것이 아니라 회원을 조회 후 Member.getTeam()으로 팀을 조회할 때 join 쿼리 요청을 DB에 날려서 받아옵니다.

    Member member = memberRepository.findById(1); // 이 때는 회원(Member) 데이터만 조회
    Team team = member.getTeam(); // team을 호출할 때 팀(Team) 테이블과 조인하여 데이터 조회
    저작자표시 (새창열림)

    'Programming > JPA' 카테고리의 다른 글

    [Spring Data JPA] 유연한 조회 API만들기(Specification)  (0) 2022.08.17
    [Spring Data JPA] Query를 사용하는 여러가지 방법  (0) 2022.08.11
    [Spring Data JPA] 양방향 순환참조 문제 및 해결방법  (0) 2022.08.03
    [Spring Data JPA] JPA 연관관계 매핑(JOIN)  (0) 2022.08.02
    [Spring Data JPA] JPA 주요 어노테이션(Annotation)  (0) 2022.07.31
      'Programming/JPA' 카테고리의 다른 글
      • [Spring Data JPA] 유연한 조회 API만들기(Specification)
      • [Spring Data JPA] Query를 사용하는 여러가지 방법
      • [Spring Data JPA] 양방향 순환참조 문제 및 해결방법
      • [Spring Data JPA] JPA 연관관계 매핑(JOIN)
      빈쿵바라기
      빈쿵바라기
      삽질하는 개발자의 좌충우돌 개발기

      티스토리툴바