인프런 커뮤니티 질문&답변
SettlementTargetRepository Jquery 질문
작성
·
5
1
@Query(
"""
SELECT new io.dodn.commerce.storage.db.core.SettlementTargetSummary(
settlement.merchantId,
settlement.settlementDate,
SUM(settlement.targetAmount),
COUNT(settlement.id),
COUNT(DISTINCT settlement.orderId)
)
FROM SettlementTargetEntity settlement
WHERE settlement.settlementDate = :settlementDate
GROUP BY settlement.merchantId, settlement.settlementDate
""",
)
fun findSummary(settlementDate: LocalDate): List<SettlementTargetSummary>이부분에서 where절에서 이미 settlementDate를 필터링하고 있는데 group by에서 settlementDate가 필요한 이유가 따로 있을까요? 어차피 parameter로 넘어온 settlementDate만 조회가 되는 로직이라 Group By에서는 필요가 없어보여 질문 남깁니다.
답변 2
1
안녕하세요 질문 감사드립니다!
실질적으로 해당 구문이 꼭 필요한 것은 아닙니다! (다만 적더라도 디비 성능상 차이도 없는 수준인 것으로 알고 있습니다!)
그렇다면 제가 적은 이유는! 저는 순수 쿼리 작성 시 명시적으로 그룹핑 대상을 적는 것을 더 선호해서 넣는 편입니다!
다른 팀원 누군가 구문별(Where절, GroupBy절)로 생각 없이 끊어서 보더라도 바로 이해가 갈 수 있는 쪽을 더 추구하는 편입니다!
모쪼록 답이 되었길 바랍니다! 감사합니다!
0
안녕하세요, 인프런 AI 인턴입니다. hahahl님.
SettlementTargetRepository에서의 JPQL 쿼리에 관한 질문 주셨네요. 현재 코드에서 WHERE 절에서 이미 settlementDate를 필터링하고 있음에도 불구하고, GROUP BY 절에서 settlementDate를 다시 사용하는 이유에 대해 궁금하다고 하셨습니다.
이유와 고려 사항:
명시적인 그룹화:
GROUP BY절에 명시적으로settlementDate를 포함시키는 것은 쿼리의 명확성을 높일 수 있습니다. 어떤 데이터에서 그룹핑 작업이 이루어지는지를 한눈에 파악할 수 있게 합니다.다중 조건 의사소통: 쿼리를 작성할 때 동일한 컬럼에 대한 필터링 및 그룹화 조건이 여러 개발자에게 일관되게 전달될 수 있습니다. 팀 내에서 가시성을 높이고, 쿼리 로직의 수정 시 혼란을 줄일 수 있습니다.
쿼리 최적화와 유연성: 특정 데이터베이스에서 실행된 쿼리의 실행 계획에 영향 줄 수 있는 경우도 있으며, 변화하는 데이터 처리 요건에 쉽게 적응할 수 있는 쿼리를 준비하는 방법이 될 수 있습니다.
그럼에도 불구하고, 현재 쿼리의 로직 상에서는 settlementDate가 WHERE 절에 포함되어 있는 것으로 충분한 경우 위와 같은 GROUP BY 절에서의 사용은 불필요해 보일 수 있습니다. 이 점을 고려하여 필요에 따라 코드를 간결하게 유지하는 것도 좋습니다.
추가 참고 자료
유사한 관점에서의 JPQL 사용에 대해 설명한 자료를 참조하시길 권해드립니다:
- Service의 데이터 필터링 방식 이해하기: 데이터 필터링과 관련된 예시 쿼리에서 비슷한 개념을 적용하고 있는지 확인해보세요.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




