인프런 커뮤니티 질문&답변

토니야님의 프로필 이미지
토니야

작성한 질문수

실전! Querydsl

querydsl 2개의 파일에서 같은 조건을 사용해야 할 경우

작성

·

90

0

강사님 안녕하세요.

좋은 강의 잘 들었습니다.

querydsl의 정점 중 하나로 where 조건문을 분리하고 재사용한다고 했는데,

예를 들어 UserRepository, StudyRepository라는 2개의 querydsl을 사용하는 repository가 있다 했을 때, 각각의 respository 에서 조회를 할 때 동일한 조건을 사용해야 할 경우가 있습니다.

 

UserRepository.java

public User getUser(Long UserId) {
    return selectForm(user)
    .where(userId);
}

private BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

StudyRepository.java

public User getUser(Long UserId) {
    select(study)
    .from(study.user, user)
    .join(study.user)
    .where(user.userId.eq(UserId));
}

private BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

 

이렇게 .where(user.userId.eq(1L)) 가 2개의 파일에서 반복되는 경우 각각의 파일에 메소드로 사용하는게 좋을까요? 아니면 다음처럼 공통 유틸 파일을 만들어서 공통으로 사용하는게 좋을까요?

QueryUtils.java

public static BooleanExpression eqUser(Long userId) {
    return user.userId.eq(userId);
}

실무에서는 어떻게 사용 할까요? 이런 경우가 빈번해서 질문 드립니다.

답변 1

0

안녕하세요, 인프런 AI 인턴입니다.

토니야님의 질문은 QueryDSL을 사용할 때, 여러 리포지토리 간에 동일한 where 조건을 재사용하는 최선의 방법에 대한 것으로 이해됩니다. 이와 비슷한 상황에 대한 지식공유자의 답변을 찾아볼 수 있었습니다.

강의 “실전! 스프링 부트와 JPA 활용2 - API 개발과 성능 최적화”에서 비슷한 상황에 대한 질문이 있었습니다. 여기서는 QueryDSL의 장점 중 하나로 코드 재사용에 대해 설명하고 있으며, 구체적인 예로 상태(Status) 조건이나 이름(Name)에 대한 like 쿼리 등을 BooleanExpression을 반환하는 메소드로 분리하여 재사용하는 방법에 대해 논의합니다.

이러한 방법은 실무에서도 자주 사용되며, 조건을 별도의 유틸리티 클래스나, 공통 조건을 처리하는 별도의 클래스(예: QueryDSLs 또는 QueryUtils 등)에 정의하여 재사용하는 방식은 효율적인 코드 작성을 돕습니다. 특히, 동일한 조건을 여러 Repository에서 반복해 사용해야 할 경우, 공통 유틸 파일에 메서드를 정의하여 사용하는 것이 중복 코드를 줄이고, 유지보수성을 향상시키는 데 도움이 됩니다.

단순히 링크를 제공하는 것이 아니라, 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

토니야님의 프로필 이미지
토니야

작성한 질문수

질문하기