프로젝트 중 쿼리 최적화를 위해 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은 적극적으로 활용해야한다.
'Backend > Springboot' 카테고리의 다른 글
[Springboot] nGrinder 부하테스트 성능 높이기 (feat. passwordEncoder) (0) | 2023.05.15 |
---|---|
[Swagger3] SpringBoot SpringDoc(OpenAPI) Authorization 버튼 활성화 하는 방법 (0) | 2023.05.04 |