Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[BE] refactor: 리뷰 랭킹 알고리즘 개선 #737

Merged
merged 12 commits into from
Oct 18, 2023
Merged

Conversation

Go-Jaecheol
Copy link
Collaborator

@Go-Jaecheol Go-Jaecheol commented Oct 10, 2023

Issue

✨ 구현한 기능

  • 시간에 대한 가중치 추가

    $$ Score = \frac{ReviewFavorite}{(age + 1)^{gravity}} $$

    • age : 현재 시간 - 리뷰 작성 시간 (ChronoUnit.DAYS.between으로 비교해서 day 단위)
    • gravity : 시간에 대한 중력 상수 (높을 수록 시간이 지남에 따라 급격하게 점수 낮아짐) => 0.5로 선정
      • 0.5 (좋아요 10개 & 14일 ~= 좋아요 7개 & 7일 ~= 좋아요 5개 & 3일)

📢 논의하고 싶은 내용

  • 현재 모든 ReviewfindAll로 받아와서 각 리뷰에 대해 점수를 계산한 뒤 상위 3개 리뷰를 반환하도록 구현했습니다.

    • 전체 리뷰가 많아지면 성능 상 문제가 생기지 않을까요??
    • 근데 랭킹 점수 계산은 Review 도메인 로직으로 처리하는 게 맞는 것 같아요.
    • 어떻게 해야 될까요~?
    • 리뷰 좋아요가 하나 이상인 리뷰만 find 하도록 해볼까요??
  • 그리고 위에 gravity도 임의로 저렇게 설정해봤는데 적당한지 한 번 봐주세용

🎸 기타

X

⏰ 일정

  • 추정 시간 : 4h
  • 걸린 시간 : 3h

Copy link
Member

@70825 70825 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

고생하셨어요 망고!

현재 모든 Review를 findAll로 받아와서 각 리뷰에 대해 점수를 계산한 뒤 상위 3개 리뷰를 반환하도록 구현했습니다.
전체 리뷰가 많아지면 성능 상 문제가 생기지 않을까요??
근데 랭킹 점수 계산은 Review 도메인 로직으로 처리하는 게 맞는 것 같아요.
어떻게 해야 될까요~?
리뷰 좋아요가 하나 이상인 리뷰만 find 하도록 해볼까요??

저는 좋아요가 하나 이상인 데이터만 가져오면 더 효과적일 것 같긴한데, 내일 더 이야기해보면 좋을 것 같아요!

그리고 위에 gravity도 임의로 저렇게 설정해봤는데 적당한지 한 번 봐주세용

만약 엄청나게 시간이 많다면 A/B 테스트를 해서 사용자가 어떤걸 더 많이 클릭하는지 보거나, 옆에 따봉, 역따봉을 붙여서 데이터를 확인해보면 될 것 같은데, 그런 상황이 아니라서 더 어렵네요

저는 0.5도 좋고, 만약 기본값으로 하는 국룰값이 있으면 그걸로 하는 것도 좋아보여요

Copy link
Collaborator

@wugawuga wugawuga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

전체 리뷰가 많아지면 성능 상 문제가 생기지 않을까요??
근데 랭킹 점수 계산은 Review 도메인 로직으로 처리하는 게 맞는 것 같아요.
어떻게 해야 될까요~?
리뷰 좋아요가 하나 이상인 리뷰만 find 하도록 해볼까요??
그리고 위에 gravity도 임의로 저렇게 설정해봤는데 적당한지 한 번 봐주세용

도메인에서 처리하는거 너무 좋아요👍
중력상수는 소수 아무거나면 다 괜찮을 거 같습니당
좋아요가 몇개이상인것만 가져올지 얘기해서 정하면 좋을 것 같아요

나머지 코드는 깔끔해서 어푸릅하겠습니다.

Copy link
Collaborator

@hanueleee hanueleee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

현재 모든 Review를 findAll로 받아와서 각 리뷰에 대해 점수를 계산한 뒤 상위 3개 리뷰를 반환하도록 구현했습니다.
전체 리뷰가 많아지면 성능 상 문제가 생기지 않을까요??
근데 랭킹 점수 계산은 Review 도메인 로직으로 처리하는 게 맞는 것 같아요.
어떻게 해야 될까요~?
리뷰 좋아요가 하나 이상인 리뷰만 find 하도록 해볼까요??

랭킹 점수 계산은 지금처럼 Review가 처리하는게 좋은 것 같아요!

findAll 성능 관련해서는
일단은 말씀하신대로 리뷰 좋아요가 하나 이상인 리뷰만 find하도록 해두고..!
추후에 리뷰가 쌓이고 + 리뷰가 주기적으로 작성된다는게 보장이된다면
find하는 리뷰의 기간 제한을 두는게 어떤지?!
(시간에 대한 가중치로 계산하는 로직은 그대로 유지하되 대상이 되는 기간을 정하기)

그리고 위에 gravity도 임의로 저렇게 설정해봤는데 적당한지 한 번 봐주세용

0.5 괜찮아보입니다!! 로건말처럼 국룰 값이 있다면 그거도 좋을 것 같아요

@Go-Jaecheol
Copy link
Collaborator Author

좋아요가 하나 이상인 리뷰만 랭킹에 들어가도록 수정했습니다.

그리고 그 과정에서 ReviewRepositoryfindReviewsByFavoriteCountGreaterThanEqual() 메서드 만들었고, 해당 메서드에 대한 테스트도 추가했습니다~~

@Go-Jaecheol Go-Jaecheol changed the title [BE] 리뷰 랭킹 알고리즘 개선 [BE] refactor: 리뷰 랭킹 알고리즘 개선 Oct 12, 2023
Copy link
Member

@70825 70825 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Conflict 해결하고, 다시 코드 봐야 할 것 같아요~
다른 부분은 리뷰할 게 없네요 👍👍

@github-actions
Copy link

github-actions bot commented Oct 18, 2023

Test Results

265 tests   265 ✔️  23s ⏱️
133 suites      0 💤
133 files        0

Results for commit c773444.

♻️ This comment has been updated with latest results.

Copy link
Collaborator

@wugawuga wugawuga left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

테스트도 통과를 잘해서, 충돌해결 잘된 것 같아요!!!
너무 고생하셨습니당!!

@Go-Jaecheol Go-Jaecheol merged commit 9467d94 into develop Oct 18, 2023
3 checks passed
@Go-Jaecheol Go-Jaecheol deleted the feat/issue-719 branch October 18, 2023 02:59
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[BE] 리뷰 랭킹 알고리즘 개선
4 participants