[개발 일기] 2025.04.06 - 즉시로딩을 피해야 하는 이유

2025. 4. 6. 12:59·개발 일기

💡 개요

 

오늘은 JPA에서 즉시로딩 사용을 피해야 하는 이유에 대해 정리해 보자.

 

 

 

📕 즉시로딩의 문제점

 

즉시로딩이란, 연관된 엔티티를 사용하든 안 하든 일단 조회를 하는 것이다.

 

 

만약에 해당 엔티티가 필요한 로직이라면 즉시로딩이 유리할 것이다.

 

 

하지만 만약 연관된 매핑된 엔티티를 사용하지 않는 로직이라면 즉시로딩으로 조회한 게 헛수고가 된다.

 

 

즉, 불필요한 데이터 조회가 발생하는 것이다.

 

반드시 필요한 데이터를 조회함으로써 발생하는 지연시간도 골치 아픈데, 불필요한 데이터 조회로 인해 지연시간이 더 늘어난다..?

최악이다..

 

 

이렇게 성능 측면에서 뿐만 아니라 JPA의 고질병인 N+1 문제도 발생할 가능성이 커진다.

 

 

그리고 연관된 엔티티에 또 다른 엔티티가 즉시로딩으로 연관되어 있다면..?

 

 

연쇄적으로 즉시 로딩이 발생해, 단순한 데이터 조회 쿼리가 말도 안 되게 커지게 된다.

 

 

그렇기 때문에 많은 개발자들은 기본적으로 연관된 엔티티는 지연로딩으로 설정한다.

 

 

그리고 만약 연관된 엔티티가 필요한 로직이라면 Fetch Join이나 @EntityGraph와 같은 기술을 사용해 명시적으로 필요한 데이터만 조회하는 게 올바른 방식이다.

'개발 일기' 카테고리의 다른 글

[개발 일기] 2025.04.08 - 리퍼러 정책  (1) 2025.04.08
[개발 일기] 2025.04.07 - Offset  (0) 2025.04.07
[개발 일기] 2025.04.05 - N+1 문제 (JPA)  (0) 2025.04.05
[개발 일기] 2025.04.04 - isBlank() vs isEmpty()  (0) 2025.04.04
[개발 일기] 2025.04.03 - @DataJpaTest vs @SpringBootTest  (0) 2025.04.03
'개발 일기' 카테고리의 다른 글
  • [개발 일기] 2025.04.08 - 리퍼러 정책
  • [개발 일기] 2025.04.07 - Offset
  • [개발 일기] 2025.04.05 - N+1 문제 (JPA)
  • [개발 일기] 2025.04.04 - isBlank() vs isEmpty()
오도형석
오도형석
  • 오도형석
    형석이의 성장일기
    오도형석
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • MSA 모니터링 서비스
        • DB
      • 스파르타 코딩클럽
        • SQL
        • Spring
      • 백엔드
        • Internet
        • Java
        • DB
      • 캡스톤
        • Django
        • 자연어처리
      • Spring
        • JPA
        • MSA
      • ETC
        • ERROR
      • 개발 일기 N
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 인기 글

  • 태그

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
오도형석
[개발 일기] 2025.04.06 - 즉시로딩을 피해야 하는 이유
상단으로

티스토리툴바