사라지는 북마크와 /bookmarks의 예상 동작

우리 커뮤니티에서는 약 2개월 전 Discourse 3.0으로 업데이트한 이후, 북마크가 가끔 이유 없이 사라지는 문제가 보고되고 있습니다. 불만을 제기하는 사용자는 주로 /bookmarks를 사용하는 사용자들(즉, /my/activity/bookmarks를 사용하지 않는 사용자)로 좁혀졌습니다. 두 경로 간에는 관련 사용성 문제가 있지만, 이 부분은 나중에 다루겠습니다.

현재 /bookmarks의 예상 동작에 대해 혼란을 겪고 있습니다. /my/activity/bookmarks에 나열된 모든 사용자의 북마크가 /bookmarks에 표시되지 않기 때문입니다. 왜 그런 걸까요? 제 계정을 기준으로 보면, 북마크가 약 1/3 정도 누락되어 있습니다. 두 섹션은 기본적으로 동일한 양의 북마크/토픽을 나열해야 하지 않나요?

/bookmarks가 북마크된 게시물(토픽이 아닌)만 지원하는 것은 아닐까 생각했지만, 그렇게 보이지 않습니다. 사용자들은 게시물/토픽에 일관되게 북마크를 달고, 몇 시간 또는 며칠 동안 /bookmarks에서 정상적으로 표시되다가 갑자기 사라집니다. :confused: 북마크를 삭제했다가 다시 달면 잠시 표시되다가 다시 사라집니다. 명확히 하자면, 북마크 자체는 존재하며 /my/activity/bookmarks에서는 항상 정상적으로 표시됩니다. 그러나 어떤 이유에서인지 /bookmarks에서는 시간이 지나면 표시되지 않습니다. 두 섹션의 콘텐츠 사이에 차이가 있을 수 있지만, 제가 그 차이를 찾지 못하고 있습니다. 무엇을 놓치고 있을까요? :thinking:


사용자들에게 이 문제가 특히 번거로운 이유는, /my/activity/bookmarks가 그들의 주요 사용 사례인 북마크한 토픽 중 어떤 것이 업데이트되었는지 찾는 데(특정 카테고리 내 또는 포럼 전체에서) 사용할 수 없기 때문입니다.

/my/activity/bookmarks 인터페이스에는 많은 유용한 기능이 있지만, 여전히 그들의 주요 목적을 충족하지 못합니다. 즉, 마지막 활동 기준으로 정렬하면서 동시에 어떤 토픽에 업데이트가 있는지(미읽음 수)를 확인하는 것입니다. 정렬 기능이在那里도 작동하고 각 토픽의 미읽음 게시물 수가 표시되면 좋겠지만, /my/activity/bookmarks에서 카테고리로 북마크를 필터링하는 기능이 어떻게 작동할지 확신이 서지 않아서, /bookmarks가 별도로 존재하는 것도 정당화될 수 있을 것입니다.

어쨌든, 여기에는 두 가지 별개의 문제(버그(?)와 UX 문제)가 있을 수 있지만, 서로 관련이 있습니다. 저는 커뮤니티에게 /my/activity/bookmarks를 사용하도록 권유하여 “사라지는 북마크” 문제를 피하도록 하고 있지만, 그들이 이를 사용하는 목적에 대해서는 실제로 작동하지 않습니다. “사라지는” 북마크의 원인을 파악하면 우회책을 찾을 수 있을 것입니다. 따라서: 왜 모든 북마크가 /bookmarks에 표시되지 않는 것일까요?

5개의 좋아요

이 차이의 일부가 /bookmarks에 북마크된 개인 메시지가 포함되지 않으며, 한 주제에 여러 북마크된 게시물이 있을 경우 /bookmarks에서 해당 주제가 한 번만 표시되기 때문임을 확인했습니다.

그러나 여전히 북마크가 누락되고 있습니다. 여러 멤버들의 경우, /my/activity/bookmarks에는 표시되지만 /bookmarks에는 항상 표시되지 않는 주제들이 있습니다. 여기서 _항상_이라는 단어에 중점을 두는 이유는, 처음에는 항상 표시되다가 몇 시간/일 후에 갑자기 사라지기 때문입니다. :anguished:

다시 말하지만, 이 문제는 Discourse 3.0으로 업데이트한 후에만 발생하기 시작했으므로 버그라고 의심합니다.

게시물은 북마크할 수 없고, 토ピック만 북마크할 수 있습니다 :thinking:

제 이해로는 특정 게시물을 북마크할 수 있으며, 같은 주제 내에서도 여러 게시물을 북마크할 수 있습니다:

4개의 좋아요

질문자님의 이해는 정말 타당하고 정확합니다. 제 이해는 그렇지 않네요.

도대체 언제 그런 기능이 생겼던 거죠?

이 기능과 채팅 메시지 북마크(채팅 플러그인이 활성화된 경우에만 작동함)는 이미 꽤 오래전부터 존재해 왔습니다. 적어도 FEATURE: Promote polymorphic bookmarks to default and migrate (#16729) · discourse/discourse@fcc2e7e · GitHub 부터 그렇습니다.

이것이 사실 이 문제의 핵심입니다. 여전히 이 오래된 /bookmarks 경로가 남아 있는데, 읽지 않은 항목/활동 순 정렬 덕분에 다소 유용하지만 새 경로에 있는 주요 기능들이 빠져 있고, 또한 사용하는 쿼리에 게시글/주제 북마크 관련 문제가 있을 가능성이 있으며 채팅 북마크는 전혀 표시되지 않습니다.

이는 단순히 주제 목록이지 게시글 목록이 아니기 때문에 기술적으로는 타당합니다. 이는 오래된 경로와 새 경로 사이의 주요 차이점 중 하나입니다.

여기서 무엇을 해야 할지 아직 명확하지 않으며, 더 조사해 보고 내부적으로 논의하겠습니다. 두 경로를 모두 유지하는 것은 이상적이지 않으며, 새 경로가 오래된 경로의 누락된 기능을 수행할 수 있다면 더 나을 것입니다.

1개의 좋아요

이제 와서 생각해보니, 제 주제를 둘로 나누는 것이 나았을지도 모릅니다. 하나는 Contribute > UX 채널에, 다른 하나는 Contribute > Bug 채널에 올리는 것이죠. 제 주요 문제인 (북마크가 사라지는 현상)이 사용성 문제로 인해 가려지고 있기 때문입니다.

그동안 북마크 기능을 직접 살펴보다가 또 다른 버그를 발견했지만, 왜 북마크가 /bookmarks에서 무작위로 사라지는지는 여전히 알 수 없습니다. 어떤 이유에서인지 특정 주제에서는 더 자주 발생하는 것 같지만, 공통된 패턴을 찾지 못했습니다. 제게 정말 이상한 점은 북마크를 등록한 후, 몇 시간에서 며칠이라는 임의의 시간 동안 /bookmarks에서 정상적으로 표시되다가, 갑자기 사라지는 것입니다. 북마크를 삭제했다가 다시 등록해야만 ‘고쳐지는’ 상태입니다.

정리하자면, 이는 북마크 리마인더 설정으로 인해 북마크가 삭제되는 문제가 아닙니다. 리마인더는 전혀 사용되지 않았고, 북마크 자체가 삭제되지도 않습니다(여전히 /my/activity/bookmarks에는 표시됨). 다만 시간이 지난 후 /bookmarks 목록에서만 누락되는 것입니다.

2개의 좋아요

#support는 이 두 가지 중 어느 쪽도 아니었으므로, 좀 더 많은 분들이 이 문제를 보시기를 바라며 #contribute:bug로 이동을 했습니다.

간접적인 알림(업)을 드려 죄송합니다. 하지만 이 문제로 인해 매우 불만을 품고 있는 사용자들이 꽤 많습니다. /bookmarks가 기본적으로 활성화(즉, UI에서 표시)되지 않는 것이 이 버그에 대한 노출을 어느 정도 줄여줄 수는 있겠지만, 이것이 우리 포럼에만 특이한 문제라고는 상상하기 어렵습니다.

1개의 좋아요

무시하는 게 아니라고 말씀드리고 싶어요. :slight_smile: 어떻게 처리하는 게 가장 좋은지 검토 중입니다. 곧 더 많은 소식을 전할 수 있기를 바랍니다. :crossed_fingers:

1개의 좋아요

이 문제는 답답하게 느껴지지만, 아직 재현하지 못했고 원인에 대한 좋은 추측도 아직 나오지 않고 있습니다.

지금은 UX 문제를 무시하고 버그에 집중하겠습니다.

문제를 다시 한번 정리하겠습니다:

100% 확신은 없지만, 이론적인 재현 단계는 다음과 같습니다:

  1. 북마크가 없는 상태에서 시작합니다.
    • /bookmarks로 이동하여 목록에 주제가 없는지 확인합니다.
    • /my/activity/bookmarks로 이동하여 목록에 북마크가 없는지 확인합니다.
  2. 일부 게시물과 주제에 북마크를 추가합니다. (예: 10개의 고유 주제에 걸쳐 15개의 북마크)
    • 여기에서 리마인더가 관련이 있다고 생각하지는 않지만, 관련이 있을 수도 있습니다.
    • 게시물을 북마크하든 주제를 북마크하든 차이가 나는지 아직 알지 못합니다.
  3. 북마크가 된 고유 _주제_의 수를 마음속에 기억해 둡니다.
  4. /bookmarks로 이동하여 목록에 10개의 주제가 있는지 확인합니다.
  5. /my/activity/bookmarks로 이동하여 10개 주제에서 15개 항목이 목록에 있는지 확인합니다.
  6. 기다립니다.
  7. /my/activity/bookmarks로 돌아가서 10개 주제에서 여전히 15개 항목이 목록에 있는지 확인합니다.
  8. /bookmarks로 이동하면 목록에 10개 미만의 주제가 있는 것을 볼 수 있습니다.

누군가 새로운 사이트에서 이 문제를 더 확실하게 재현할 수 있다면, 여기에서 문제를 파악하는 데 큰 도움이 될 것입니다.

그것이 불가능하다면, 누군가 이 단계만으로도 문제를 목격 한다면, 문제를 파악하는 데 도움이 될 디버깅 단계를 조금 조언해 드릴 수 있을 것입니다:

  1. /my/activity/bookmarks로 이동하여 맨 아래까지 스크롤합니다.
  2. 고유한 주제의 수(N)를 세어 봅니다.
  3. /bookmarks로 이동하여 맨 아래까지 스크롤합니다.
  4. 목록에 N개 미만의 주제가 있는 것을 확인합니다.
1개의 좋아요

이 문제를 시도해 주셔서 감사합니다 — 이 문제가 흥미로운 버그 목록에서 높은 순위를 차지하지는 않는다는 것을 잘 알고 있습니다. :sweat_smile:

네, 거기까지 도달하기 위한 올바른 단계들이며, 나중에 아래에서 언급할 작은 주의사항들이 있습니다.

그러나 이 문제는 무작위적인 성격을 가지고 있어(한 번에 무작위로 선택된 토픽에서 발생하고, 임의의 시간 후 사라짐) 일반적인 사용이 필요한 것으로 보이며 트리거가 무엇인지(시간일 수도 있음) 명확하지 않으므로, 해당 단계만으로 환경을 설정해 재현하기는 어려울 수 있습니다: 저는 원하는 시점에 버그를 재현하지 못했으며, 이 문제를 보고한 사용자들은 저보다 /bookmarks를 훨씬 더 활발하게 사용하는 사람들입니다.

그러나 저는 계정 임의(impersonation)를 통해 검증한 여러 다른 사용자가 이 문제에 영향을 받고 있다는 보고를 가지고 있습니다. 저는 /bookmarks에서 사라진 그 토픽 중 적어도 일부에 다시 북마크를 하지 말라고 몇몇에게 요청했습니다. 따라서 원하는 시점에 재현할 수는 없지만, 그런 일이 일어나고 있는 계정에 여전히 접근할 수 있으며, /bookmarks와 /my/activity/bookmarks를 비교하면 차이를 볼 수 있습니다.

저희 포럼에 대한 관리자 액세스를 제공할 수는 없지만, 도움이 된다면 SQL 쿼리를 실행하거나 저희 인스턴스의 Discourse API로 요청을 보내는 것(이 문제를 경험하는 사용자로서)에 기꺼이 응하겠습니다. 확인을 원하시면 포럼 세부 정보를 개인 메시지(PM)로 보내 주세요.

/bookmarks.json과 /my/activity/bookmarks.json 엔드포인트를 잠깐 살펴보았지만 큰 진전은 없었습니다: /bookmarks 페이지는 이미 결과의 첫 페이지를 로드하고, 더 많은 페이지에 대해서만 엔드포인트를 호출하는 반면, /my/activity/bookmarks는 엔드포인트에서 모든 북마크 데이터를 가져오는 것으로 보입니다. 따라서 API 응답을 정확히 비교할 수 없었습니다.

저는 Ruby 개발자가 아니지만, 코드에서 이 두 엔드포인트가 어디에 해당하는지 파악하여 차이를 이해하려고 시도해 보았지만, 기술 스택에 익숙하지 않아 컨트롤러에서 길을 잃었고 UsersController#bookmarks만 찾았습니다.

이제 단계에 대한 몇 가지 코멘트를 드리겠습니다. 매우 관련이 없을 수도 있지만, 명시적으로 하기 위해 작성합니다.

아마도 맞을 것입니다. 하지만 저희 포럼에서 영향을 받는 모든 사용자가 기존 북마크가 많은 장기 사용자이고, 3.0으로 업그레이드하면서 이 문제가 발생했기 때문에 이를 확인하지는 못했습니다. 그러나 북마크를 삭제하고 다시 추가할 때 문제가 반복되므로, 빈 상태에서 시작해도 같은 일이 일어날 것이라고 추정합니다. 한 보고자는 업그레이드 직후에 더 흔했으며, 이후에는 덜 빈번해졌다고 말했지만… 이는 단순히 북마크가 사라지는 것을 알아채지 못하고 있을 수도 있습니다. :sweat_smile:

이것을 이해하는 데 인내심을 가지고 도와준 몇몇 사용자와 확인해 보았으며, 그들은 다음과 같이 말했습니다:

  • 그들은 항상 게시글이 아닌 토픽에 북마크를 합니다.
  • 그들은 북마크에 리마인더를 절대 사용하지 않습니다.

이는 게시글과 리마인더의 경우에도 발생하지 않는다는 의미가 아니라, 단순히 그것이 의존하지 않는 것처럼 보인다는 뜻입니다.

단순히 /my/activity/bookmarks가 개인 메시지의 북마크도 표시할 수 있으므로, 다른 N 값은 그것 때문일 수도 있다는 점을 언급하기 위한 작은 주석입니다(이것이 어떤 시점에서 저를 혼란스럽게 만든 것이었습니다).


다시 한번, 도움이 된다면 SQL 쿼리, API 요청 또는 추가 정보를 제공하거나 실행하는 것에 기꺼이 응하겠습니다. 이것이 무작위적인 행동 때문에 디버깅하기가 까다롭다는 것을 잘 알고 있지만, 그것이 또한 사용자를 좌절시키는 이유이기도 합니다.

1개의 좋아요

한 가지 가설은 topic_users.bookmarked 필드가 어딘가에서 동기화가 깨져서 그런 것일 수 있다는 것입니다. 문제의 주제를 확인했다면, 해당 사용자/주제 조합에 대해 topic_users 테이블을 쿼리하여 bookmarked 값이 true인지 false인지 확인해 볼 수 있을까요?

또한, 새로운 실험적 /filter 기능이 in:bookmarked로 “누락된” 주제들을 표시하는지 궁금합니다. 예를 들어 Discourse Meta 처럼요. 이것도 시도해 보고 결과를 알려주시겠습니까?

1개의 좋아요

네, 그런 것 같습니다.

“누락된” 북마크 중 하나를 살펴보니 해당 항목의 topic_users.bookmarked가 false로 설정되어 있었습니다. 이 주제는 /bookmarks 하위에는 표시되지 않지만, /my/activity/bookmarks 하위에는 있습니다.

그리고 이것이 관련이 있는지 확실하지는 않지만, 해당 레코드의 topic_users.last_posted_at 값은 거의 한 달 전(주제가 사라진 시기) 날짜인 반면, 해당 주제에는 그 이후로 거의 매일 게시글이 올라오고 있습니다.

어쨌든 bookmarked 플래그를 수정하는 로직이 무엇인지 모르겠지만, 범인으로 추정됩니다.

확인해 볼 다른 것이 있을까요?

기꺼이 시도해 보겠지만, 우리는 스테이블 버전(3.0.3)을 사용 중이라 아직 해당 기능이 없습니다.

2개의 좋아요

매우 유용한 정보입니다. 감사합니다. 3.0.3으로 업데이트하기 직전의 버전을 알 수 있다면, 버그가 언제 도입되었는지 파악하는 데 도움이 될 것입니다.

이 문제를 언제 우선순위로 다룰 수 있을지는 보장할 수 없지만, 작업을 시작하게 된다면着手할 수 있는 단서를 갖게 된 것 같습니다.

2개의 좋아요

우리는 항상 stable 브랜치를 사용해 왔으므로, 이전에 2.8.14를 사용했을 가능성이 높습니다. 3월 11일에 업데이트를 진행했는데, 아마도 3.0.1로 업데이트했을 것입니다. 첫 불만이 3월 18일에 제기되었으므로, 이론적으로는 3.0.2까지의 범위일 수도 있습니다. 따라서 그 사이에 2.9 베타 릴리스가 꽤 많았을 것으로 보입니다.

파일 시스템 어딘가에 이전 버전을 추론할 수 있는 로그가 있다면 다시 확인해 볼 수 있지만, 2.8.14...3.0.2가 맞을 것입니다.


스키마에 익숙하지 않아 도움이 될지 확실하지 않지만, 아래 쿼리를 실행해 보았습니다:

SELECT
  topic_users.user_id,
  topic_users.topic_id
FROM
  bookmarks,
  topic_users
WHERE
  bookmarks.user_id = topic_users.user_id
  AND bookmarkable_type = 'Topic'
  AND bookmarks.bookmarkable_id = topic_users.topic_id
  AND topic_users.bookmarked = false;

그 결과 3,000개 이상의 매칭이 나왔습니다.

아마도 어떤 프로덕션 시스템에서든 이와 동등한 쿼리를 실행하여 몇몇 “누락된” 북마크를 찾을 수 있을 것이며, 이는 문제 재현에 한 걸음 더 다가가는 데 도움이 되기를 바랍니다. 자명한 사실을 말하고 있는 것 같아 죄송합니다. 그저 도움이 되고 싶었습니다. :sweat_smile:

2개의 좋아요

참고로, 현재 3.1.2 버전으로 업데이트했지만 문제가 여전히 남아 있습니다.

사용자들은 북마크가 하루에 최대 5번까지 ‘사라지는’ 현상을 보고하고 있습니다(매번 다시 북마크를 설정해야 함). 현재로서는 기능이 너무 불안정하여 사용할 수 없으며, 동일한 수준의 기능을 제공하는 좋은 대안도 없습니다.

이제 SQL 쿼리로 재현할 수 있는 방법이 있고, 버그가 도입된 버전 범위도 파악되었으니, 이 문제가 언젠가 해결될 수 있으리라는 희망을 가져도 될까요?

아, 3.1.2 버전을 사용 중이시군요. 다음에 이 문제가 발생하면 해당 토픽들이 /filter에서도 누락되는지, 아니면 거기에 정상적으로 표시되는지 확인해 주실 수 있을까요?

그 질문에 대한 답을 알면 우리가 여기서 어떻게 대응할지 결정하는 데 도움이 될 것 같습니다.

3개의 좋아요

/filter 기능을 사용해 테스트해 보았는데, 문제가 in:bookmarked 검색에서도 동일하게 발생하는 것 같습니다.

북마크가 사라지는 시점이 랜덤한 특성 때문에, 이전에 공유한 SQL 쿼리를 사용해 문제의 북마크를 찾아낸 후 해당 사용자로 임의의 사용자(impersonation)를 설정하여 테스트를 수행했습니다. 그 결과 다음과 같은 상태의 북마크를 성공적으로 발견했습니다.

  1. /my/activity/bookmarks에는 북마크가 존재합니다(예상된 결과).
  2. 그러나 /bookmarks에는 해당 북마크가 전혀 목록에 표시되지 않습니다(표시되어야 함).
  3. /filter?q=in%3Abookmarked에서도 표시되지 않습니다.

bookmarks 데이터베이스 테이블을 조회하면 당연히 해당 북마크가 존재합니다. 그러나 topic_users 테이블을 조회하면 bookmarked 컬럼이 false로 설정되어 있는데, 이것이 문제와 관련이 있을 것으로 추정됩니다.

정리하자면, 이 계정에는 위에서 언급한 3개 위치 모두에 정상적으로 표시되는 북마크들도 있었습니다. 하지만 이는 일시적인 상태이며, 결국에는 “사라집니다.” SQL 쿼리는 문제 있는 북마크만 반환하는 것으로 보입니다. 따라서 바쁜 프로덕션 시스템에서 이 쿼리를 실행하고 해당 사용자로 임의의 사용자 설정을 하면 문제를 재현할 수 있을 것입니다.

1개의 좋아요

감사합니다, @mentalstring. 이 새로운 정보를 가지고 다시 팀에 전달해서 다음 단계에서 어떤 대안이 나올지 확인해 보겠습니다.

2개의 좋아요

@mentalstring 그동안 저희를 인내해 주셔서 감사합니다. 이 문제의 근본 원인을 파악하는 데 오랜 시간이 걸린 점 사과드립니다. 오늘 제공해 주신 데이터와 Meta의 Data Explorer 보고서를 바탕으로 원인을 찾아내고 재현하는 방법을 발견했습니다. 재현 방법:

  • 주제를 북마크하되, 해당 주제 내의 게시물은 북마크하지 않습니다.
  • 해당 주제 내의 게시물을 삭제하거나 복원합니다.

이 문제는 제가 몇 년 전에 추가한 아래 작업(job)에서 발생하며, 이 작업은 주제 수준(Topic-level)의 북마크를 고려하지 않고 있습니다:

따라서 수정안과 기존 기록을 바로잡기 위한 데이터 마이그레이션이 진행 중입니다. 병합이 완료되면 이곳에 다시 게시하겠습니다.

3개의 좋아요