My Blog

즉시로딩 지연로딩 실제 차이 본문

스프링부트/스프링부트 인프런 김영한님

즉시로딩 지연로딩 실제 차이

JAESG 2023. 6. 10. 23:34
public class RecruitmentArticle {
    @Id
    @GeneratedValue(strategy = IDENTITY)
    private Long id;
    @ManyToOne
    private Member member;
    private int typeValue;
    private String articleName;
    @CreatedDate
    private LocalDateTime createDate;
    private String content;
    private LocalDateTime deadLineDate;
    private Long views;

    @OneToMany(mappedBy = "recruitmentArticle", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    @OrderBy("id desc")
    private List<Comment> comment;

    @OneToOne(cascade = CascadeType.REMOVE, mappedBy = "recruitmentArticle")
    private RecruitmentArticleForm recruitmentArticleForm;

    @OneToMany(mappedBy = "recruitmentArticle", fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
    private List<RecruitmentPeople> recruitmentPeople;
    }

게시글에 엔티티이다. 게시글과 댓글은 1대다, 게시글과 모집 공고 인원을 1대다로 설정해놨다.

게시글을 조회할 때 댓글을 무조건 조회할 것 같아서 즉시 로딩으로 설정해놨다.

근데 생각해보니 모집 공고 인원은 게시글을 조회할 때 필수는 아니여서 지연 로딩으로 바꿔야 할 것 같다.

위 코드는 recruitmentPeople(모집 공고 인원)을 LAZY로 아래는 EAGER로 한 상태이고 게시글을 클릭했을 때 차이를 보면 

게시글을 조회할 때는 모집 인원이 조회가 안되어서 recruitmentPeople에 관한 쿼리를 찾아볼 수 없다.

근데 밑에는 EAGER로 해놨기때문에 모집 공고 인원을 쓰지 않아도 게시글을 조회할 때 recruitmentPeople을 조회하는 쿼리가 나타나는 걸 볼 수 있다.

728x90
Comments