강의

멘토링

로드맵

Inflearn Community Q&A

hyunzxn's profile image
hyunzxn

asked

Real-world! Developing a library management application with Kotlin and Spring Boot (Refactoring a Java project)

Lesson 38. Using Querydsl - Method 1

N + 1 문제 해결 fetch join 관련해서 질문드릴 것이 있습니다!

Written on

·

505

3

안녕하세요. 38강의 N + 1 문제를 해결하기 위한 fetch join 문제 해결과 관련해서 제가 발견(?)한 것을 질문드리고자 합니다!

수업 내용 중 N + 1 문제를 querydsl을 사용해서 해결하는 것을 보여주셨는데요. 코드가 다음과 같았습니다.

class UserRepositoryCustomImpl(
    private val queryFactory: JPAQueryFactory
) : UserRepositoryCustom {

    override fun findAllWithHistories(): List<User> {
        return queryFactory
            .select(user)
            .distinct()
            .from(user)
            .leftJoin(userLoanHistory).on(userLoanHistory.user.id.eq(user.id)).fetchJoin()
            .fetch()
    }
}

그러고 테스트를 돌렸을 때 쿼리가 찍히는 걸 보면 다음과 같습니다.

fetch join!.png

N + 1 문제가 아직 발생하고 있는 것 같습니다.

조금 이상해서 구글링을 해보니 querydsl에서 on 절을 사용하면 두 엔티티가 연관관계라는 것을 인식하지 못 한다고 하네요! 그래서 코드를 다음과 같이 좀 바꿔봤습니다.

class UserRepositoryCustomImpl(
    private val queryFactory: JPAQueryFactory
) : UserRepositoryCustom {

    override fun findAllWithHistories(): List<User> {
        return queryFactory
            .select(user)
            .distinct()
            .from(user)
            .leftJoin(user.userLoanHistories, userLoanHistory).fetchJoin()
            .fetch()
    }
}

이렇게 바꾸고 쿼리를 찍히는 것을 확인하니까

페치 조인 굿!.png

한 번에 fetch join 되면서 가져오는 것 같습니다!

 

한 번 확인해주시면 감사하겠습니다!

javaspringkotlinspring-boot리팩토링

Quiz

JPQL이나 Spring Data JPA의 메서드 이름을 이용한 쿼리 작성 방식의 주된 단점은 무엇일까요?

데이터베이스 종류에 따라 쿼리 문법이 달라진다.

컴파일 시점에는 오류를 감지하기 어렵다.

성능 최적화가 어렵다.

복잡한 조인 쿼리를 작성할 수 없다.

Answer 1

1

lannstark님의 프로필 이미지
lannstark
Instructor

안녕하세요, JUNN님!! 좋은 질문 감사드립니다!

말씀해주신 내용이 정확합니다! 관련해서 38강 강의실 안내 문구에 해당 내용이 기술되어 있습니다!

(스크롤을 해야만 보이더라고요 ㅠㅠㅠㅠ 인프런 측에서 개선해주면 더 좋을 것 같습니다 ㅠㅠ)

image

정말 꼼꼼하게 봐주셔서 감사드립니다.

앞으로도 더 꼼꼼하게 준비할 수 있도록 노력하겠습니다.

감사합니다!! 🙏🙏

 

hyunzxn님의 프로필 이미지
hyunzxn
Questioner

아하 그렇군요! 선생님 역시 꼼꼼하시게 미리 다 업데이트를 해두셨군요👍🏻 감사합니다 ^^

lannstark님의 프로필 이미지
lannstark
Instructor

크흑... 이해해주셔서 감사합니다!! 🙏🙏

hyunzxn's profile image
hyunzxn

asked

Ask a question