본문 바로가기
Backend/Springboot

[Springboot] 쿼리 최적화를 위한 fetch join

by psihyeong 2023. 5. 15.

프로젝트 중 쿼리 최적화를 위해 fetch join을 수행했다.

- 최초 FetchType EAGER로 작성된 /api/v1 코드

 

- 멤버 정보를 조회할 때 Member, Authority, Token 3개의 테이블에서 3번의 Select 쿼리를 날리는 걸 fetch join을 적용해 1번의 쿼리로 조회하려고 한다.  

// v2 fetch join
@Query(value = "select m from Member m " +
   "join fetch m.token " +
   "join fetch m.roles " +
   "where m.email = :email")
Optional<Member> findAllByEmail(@Param("email") String email);

한 번의 쿼리로 잘 조회됐다

상황에 따라 다르겠지만, 데이터 여러개를 조회할 때 좋은 성능이 나온다.

또한 지연로딩을 고민하지 않아도 되고, 코드를 거의 수정하지 않고 옵션만 약간 변경해서 다양한 성능 최적화를 시도할 수 있다는 게 큰 매력이니, fetch join은 적극적으로 활용해야한다.