작성
·
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개의 파일에서 반복되는 경우 각각의 파일에 메소드로 사용하는게 좋을까요? 아니면 다음처럼 공통 유틸 파일을 만들어서 공통으로 사용하는게 좋을까요?
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에서 반복해 사용해야 할 경우, 공통 유틸 파일에 메서드를 정의하여 사용하는 것이 중복 코드를 줄이고, 유지보수성을 향상시키는 데 도움이 됩니다.
단순히 링크를 제공하는 것이 아니라, 저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.