인프런 커뮤니티 질문&답변
사용자가 상품을 선택하고 쿠폰을 고를 때 가장 혜택이 큰 쿠폰을 고르는 상황
작성
·
22
·
수정됨
0
강사님 안녕하세요. 쿠폰 조회 로직 구조 관련해서 의견 여쭤봅니다.
현재 제 구현은 findBestBenefitCoupons에서 DB(Querydsl) 쿼리 하나로
- 대상 필터링(INCLUDE/EXCLUDE, 기간, 상태),
- 할인금액 계산,
- 적용가능 여부 정렬,
- 페이지네이션(Slice)
까지 전부 처리하고 있습니다.
그런데 쿼리가 너무 복잡해져서,
“DB에서는 가능한 필터링/후보 추출만 하고, 복잡한 적용 규칙/최종 정렬은 애플리케이션 레이어에서 처리”하는 방식으로 바꿔도 괜찮을지 고민 중입니다.
제 가정은 사용자별 쿠폰 수가 많아도 수천 장 수준이라 앱 처리도 감당 가능하다는 점입니다.
강사님 코틀린 예제CouponTargetReader)는 DB는 타겟 조회 중심이고 조합은 앱에서 하는 패턴으로 보였는데,
제 케이스(최적 쿠폰 + 페이징)에도 이 방향이 실무적으로 타당할까요?
아니면 정렬/페이징 일관성 때문에 핵심 랭킹 로직은 DB에 유지하는 게 더 맞을까요?
추가로 궁금한 점이 있습니다.
대규모 커머스 회사에서는 이런 “최적 쿠폰 목록” 문제를 보통 어떻게 처리하나요?
쿠폰 목록은 조건(회원/주문금액/대상/기간)이 많아서 캐싱도 쉽지 않아 보이는데,
실무에서는 어떤 식으로 분리(DB/애플리케이션/배치/사전계산)하고 어떤 기준으로 설계 결정을 내리는지 궁금합니다.
저는 지금 소규모 서비스에서 개발 중이라,
대규모 트래픽/대량 데이터 환경에서의 실무 관점 인사이트를 얻고 싶습니다.
판단 기준(데이터 건수, 성능 임계치, 페이지 정합성, 운영 복잡도)도 함께 조언 부탁드립니다.
답변 1
0
안녕하세요, 인프런 AI 인턴입니다. 우으어으님.
현재 복잡한 쿠폰 조회 로직에 대한 고민과 대규모 커머스 환경에서의 실무적 접근에 대해 좋은 질문 주셨습니다. 크게 두 가지 내용을 다루겠습니다: 먼저 findBestBenefitCoupons의 쿼리 로직에 대한 부분이고, 두 번째는 대규모 커머스 환경에서 쿠폰 처리에 대한 전반적인 내용입니다.
1. 복잡한 쿼리의 처리
findBestBenefitCoupons 쿼리에서 많은 로직을 한 번에 처리하고 있는 현재 상황에서, 다음의 방법을 고려해볼 수 있습니다:
DB 필터링 우선: DB에서는 기본적인 필터링 작업, 예를 들어 상태, 기간 등을 필터링하는 데 집중하도록 해주세요. 이렇게 함으로써 실제로 관련 없는 데이터를 미리 배제하여 애플리케이션이 처리해야 할 부담을 줄입니다.
애플리케이션 로직: 필터링된 데이터를 가져온 후, 복잡한 할인 계산과 최종 정렬은 애플리케이션 레이어에서 처리하면 좋습니다. 코틀린 예제의
CouponTargetReader가 이 방향으로 구현되어 있는 것으로 보입니다.비즈니스 로직의 유연함: 복잡한 할인 규칙이 자주 바뀌거나, 추가될 가능성이 있다면 애플리케이션에서 처리함으로써 로직의 유연성을 높일 수 있습니다.
2. 대규모 커머스 환경에서의 실무적인 처리
대규모 환경에서는 특히 트래픽 부담과 데이터 복잡성을 고려하여 다양한 기술적 선택이 필요합니다.
캐싱 활용: 최대한 캐싱을 활용해 자주 변하지 않는 데이터를 빠르게 접근할 수 있도록 합니다. 정상적인 쿠폰이 빠르게 캐시되지 않도록 TTL(Time To Live)을 신중히 설정하세요.
사전 계산: 자주 사용되는 쿠폰은 미리 사전 계산하여 저장해 두면 실시간 처리 부담을 줄일 수 있습니다.
배치 작업: 복잡한 계산이 필요한 경우는 배치 작업을 통해 미리 처리해 놓고, 필요한 시점에 조회하여 사용하는 방법도 있습니다.
API 설계: 쿠폰 조건마다 서로 다른 API를 설계하여 캐싱 효율성을 높이고, API 응답 시간을 줄이는 것도 좋은 방법입니다.
성능 임계치 설정과 모니터링: 쿼리 성능이나 애플리케이션 처리의 임계치를 미리 설정해두고, 리소스가 한계에 다다르기 전에 미리 대응합니다.
추가 참고 자료
이미 제기하신 질문에 대해 유사한 토픽이 다루어진 자료가 있습니다. 도움이 될 수 있는 답변입니다:
- CouponService에서 이미 다운로드 한 쿠폰 안 내려주기: 쿠폰 관련 로직에서 성능과 설계에 대한 고민을 다룹니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.




