# bumped\_at를 (남용)하여 Reddit과 유사한 정렬 구현하기

**URL:** https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003
**Category:** Development
**Created:** [3월 22, 2021, 8:25오전 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003 "2021-03-22T08:25:18Z")
**Posts on this page:** 7
**Page:** 1

<div class="post-metadata">

### Author: ![hyd504](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hyd504/32/177122_2.png) [@hyd504](https://meta.discourse.org/u/hyd504)
#### Post date: [3월 22, 2021, 8:25오전 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/1 "2021-03-22T08:25:18Z")

</div>

저는 discourse에서 뉴스/정치 토론 포럼을 운영 중입니다. 현재 겪고 있는 문제는 discourse의 기본 정렬 방식이 제 사용 사례에서 완전히 혼란을 야기한다는 점인데, 이는 주제(topic)의 경과 시간이 매우 중요하기 때문입니다. 제 포럼과 같은 경우 Reddit 스타일 정렬이 가장 적합하지만, 이를 달성하는 직접적인 방법이 없다는 것이 제 이해입니다.

Reddit 정렬을 구현하기 위해 bumped\_at을 (남용)할 수 있는지 궁금합니다. 예를 들어 다음과 같은 방식으로요:

```plaintext
def topic_hotness(created_at, like_count)
   /**
      이 함수는 created_at과 like_count를
      Reddit에서 사용되는 것과 유사한 수학적 공식을 사용하여
      bumped_at 날짜로 변환합니다. bumped_at은
      주제의 생성 날짜와 좋아요 수를 고려할 때
      상위 10개에 머물러야 하는 시점까지의
      날짜로 간주합니다.
   */
end

add_model_callback(Topic, :before_save) do
   self.bumped_at = topic_hotness(self.created_at, self.like_count)
end

```

이것이 작동할까요? 그리고 어떤 기능이 깨질 수 있으며, 이를 어떻게 해결해야 할까요? discourse 코드베이스 어딘가에서 bumped\_at이 미래 날짜인 경우 예외가 발생한다는 것을 보았습니다. 공식에 따라 이 방식을 사용하면 bumped\_at이 미래 날짜가 될 수 있습니다. 어떤 생각이 있으신가요?

---

<div class="post-metadata">

### Author: ![hyd504](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hyd504/32/177122_2.png) [@hyd504](https://meta.discourse.org/u/hyd504)
#### Post date: [3월 23, 2021, 4:35오전 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/2 "2021-03-23T04:35:17Z")

</div>

누군가 있을까요?

갑자기 올린 것에 대해 죄송합니다.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [3월 23, 2021, 9:25오전 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/3 "2021-03-23T09:25:28Z")

</div>

아니요. 레딧을 원하신다면 수많은 레딧 클론 중 하나를 사용하세요.

---

<div class="post-metadata">

### Author: ![hyd504](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hyd504/32/177122_2.png) [@hyd504](https://meta.discourse.org/u/hyd504)
#### Post date: [3월 23, 2021, 4:35오후 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/4 "2021-03-23T16:35:17Z")

</div>

불행히도 현재 discourse의 품질과 비교할 만한 것은 아무것도 없기 때문에 discourse가 제 유일한 선택지입니다. 사실 discourse는 해당 사용 사례에 필요한 거의 모든 기능을 갖추고 있으며, 다만 홈페이지 정렬 기능이 빠져 있을 뿐입니다. 과거에도 비슷한 질문을 몇 번 보았으니, 이 글이 앞으로 더 많은 분들에게 도움이 되기를 바랍니다.

---

<div class="post-metadata">

### Author: ![codinghorror](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/codinghorror/32/110067_2.png) [@codinghorror](https://meta.discourse.org/u/codinghorror)
#### Post date: [3월 23, 2021, 8:39오후 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/5 "2021-03-23T20:39:25Z")

</div>

정말 감사한 말씀이네요 😉

하지만 우리는 대화에서 시간순 정렬을 엄격하게 적용하고 있으며, 스레딩은 아주 얇은 층으로만 지원됩니다. [Solved 플러그인](https://meta.discourse.org/t/discourse-solved-accepted-answer-plugin/30155)을 한번 살펴보는 건 어떨까요?

---

<div class="post-metadata">

### Author: ![riking](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/riking/32/170938_2.png) [@riking](https://meta.discourse.org/u/riking)
#### Post date: [3월 23, 2021, 8:44오후 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/6 "2021-03-23T20:44:16Z")

</div>

한 가지 대안은 사이트의 홈 페이지를 `/top` 또는 `/top/daily`로 설정하는 것입니다.

---

<div class="post-metadata">

### Author: ![hyd504](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/hyd504/32/177122_2.png) [@hyd504](https://meta.discourse.org/u/hyd504)
#### Post date: [3월 23, 2021, 9:16오후 UTC](https://meta.discourse.org/t/ab-using-bumped-at-to-achieve-reddit-like-sorting/184003/7 "2021-03-23T21:16:15Z")

</div>

> [@codinghorror](#):
>
> 아, 그렇게 말씀해 주시다니 정말 감사하네요 😉

하하. 내 커뮤니티에서 아주 좋은 반응을 얻고 있어서 그렇게 말할 수 있는 거예요. 밖에 나와 있는 레딧 클론들은 시도해 볼 가치조차 없어요.

> [@codinghorror](#):
>
> [the Solved 플러그인](https://meta.discourse.org/t/discourse-solved-accepted-answer-plugin/30155)을 한번 살펴보시는 건 어떨까요?

Solved 플러그인이 이 문제와 어떻게 관련이 있는지 잘 이해가 되지 않습니다. bumped\_at(최종 업데이트 시각)을 조작하는 건가요?

> [@riking](#):
>
> 한 가지 대안은 사이트의 홈 페이지를 `/top` 또는 `/top/daily`로 설정하는 것입니다.

이 방식에도 자체적인 문제가 있습니다. 사용자의 참여를 유지하려면 타임라인이 무한 스크롤이어야 합니다. 제 사용자 대부분은 카테고리로 내비게이션하는 것보다 이탈해 버립니다.

다음으로, devo에서 bumped\_at을 오버라이드했을 때 어떤 문제가 발생할지 실험해 보고, 그 문제들을 트레이드오프로 받아들일 수 있는지 확인해 볼 생각입니다. 아직 코드를 살펴보지는 않았지만, 마지막 방문 마커가 혼란스러워질 것 같아서 이를 억제해야 할 것 같습니다. 또한 “새 주제 또는 업데이트된 주제” 표시도 엉망이 될 것 같으니, 이것도 오버라이드하거나 억제해야 할 수 있습니다.

다른 분들도 관심이 있을 수 있으니, 이 스레드에서 제 경험을 공유하겠습니다. 여러분이 바로 떠올릴 수 있는 다른 문제가 있는지 알려 주세요.
