방문일 수 집계 오류인가요?

나를 포함해 이전에도 많은 분들이 포럼에 100일 연속 출석하여 애호가(Aficionado) 배지를 획득하려 노력해 왔습니다. 저는 거의 다 왔습니다. 연속으로 하루나 이틀 정도 빠진 것 같아 보고된 출석 기록이 의심스럽긴 하지만, 실제로 이상한 것은 회계(집계)가 맞지 않는다는 점입니다.

사용자 보고의 분기(Quarterly) 항목에서 저는 92일로 표시되어 있는데, 이는 해당 분기의 전체 기간을 의미해야 합니다.
3단계 요구사항의 관리자 보기에서는 제 출석률이 92/100일, 즉 92%로 보고되며, 이는 50%를 여유 있게 상회합니다.
이 두 가지 사실로부터 우리는 지난 100일 중 93일차부터 100일차 사이에 최소 8일 동안 부재했다는 결론을 내릴 수밖에 없습니다.

그런데: 사용자 보기에서 연간(Annual) 출석률을 확인하면 360일로 표시됩니다. 이는 연중 최대 5일만 결석했다는 뜻입니다(윤일 제외).

즉, 두 통계 중 하나는 정확하지 않거나… 아니면 제가 실수를 한 것입니다.

(물론 심각한 문제는 아니지만, 만약 버그가 있다면 다른 부분에 영향을 미칠 수도 있을 것입니다.)

Data Explorer 플러그인을 설치하고 How can I see how many days in a row I visited the forum?의 쿼리를 실행해 보았습니다. 그 결과 연속 출석 일수가 99일로 표시됩니다. 이 값이 맞다면, 100일 중 출석 일수를 보고하는 관리자 뷰(Admin view)는 오류가 있는 것입니다. 위에서 언급했듯이, tl3_requirements는 92/100을 보고하고 있습니다.

username start_range end_range days
EdS 2019-10-07 2020-01-13 99
EdS 2019-09-29 2019-10-05 7
EdS 2019-07-28 2019-09-27 62

업데이트: 애호가(Aficionado) 배지를 획득했고, 그 방식으로 계산한 출석률이 100에 도달했습니다. 하지만 레벨 3 요구 사항 계산에서는 93/100으로 표시되고 있으며, 데이터 탐색기(Data Explorer)의 연속 출석일 계산에서는 101일로 나와 있습니다.

분명 뭔가 일이 벌어지고 있습니다.

대부분은 시간대 관련 오해입니다. 서버 시간은 항상 UTC로 설정되어 있으므로, 해당 날짜에 UTC 기준 00:01부터 23:59 사이에 접속해야 집계됩니다.

이 수치와 몇 가지 다른 수치는 2014/15년경 이곳과 다른 Discourse 인스턴스에서 많은 문의를 불러일으켰습니다. 배지를 얻고 싶어하는 신규 사용자들이 많았고, 당시 우리는 Discourse를 완전히 신뢰하지 않았습니다. 일부 차이는 실제로 버그였기 때문에 대부분의 계산은 상당히 잘 확인되었습니다.

저도 직접 몇 가지를 확인해 보았습니다. 제 데이터를 받아 Discourse에 접속한 UTC 날짜 수를 집계했던 기억이 납니다. 네트워크 모니터링 소프트웨어에서 제공되는 제3자 통계를 가지고 있었기 때문에 Discourse의 통계를 다시 확인할 수 있었습니다. 큰 이상치가 발견되면 좋았겠지만, 제 통계에 대해 Discourse의 수치는 정확했습니다.

그렇다고 해서 지금 문제가 없다는 뜻은 아닙니다. 다만 그럴 가능성이 낮아 보일 뿐입니다.

참고로, 저는 아직 배지를 받지 못했습니다. 이 지구상에서 UTC와 가장 먼 거리에 있는 제가 UTC 기준으로 일하는 것은 어렵기 때문입니다.

배지는 단순히 확인을 위한 동기부여로만 사용하고 있습니다. 의심스러운 것은 배지가 아니라 집계 방식입니다. 출석 일수를 집계하는 시스템이 최소 2~3개 있는데, 그 결과들이 모두 일치하지 않습니다.

시간대 문제는 N일 동안 방문했다고 생각하지만 실제로는 N일 방문으로 표시되지 않는 경우를 겪는 사용자에게 혼란을 줄 수 있습니다. 하지만 이번 상황은 그런 문제가 아닙니다.

정리하자면, 출석 일수 집계는 다음과 같은 맥락에서 확인됩니다:

  • 신뢰 수준 3 요건 보고
  • 배지 수여
  • 사용자별 주간, 월간, 분기별, 연간 보고서
  • 데이터 탐색기(Data Explorer) 보고

몇 가지 생각을 더 보태면…

이것이 동작에 의미 있는 차이를 만들 수 있는 유일한 장소로 생각되는 곳은 L3 강등입니다. L3 출석 카운터가 '잘못’되어 있다면, 실제로 50% 출석 목표를 달성하지 못하지 않았는데도 불구하고 그 목표를 달성하지 못했다고 판단되어 누군가가 강등될 수 있습니다.

데이터 탐색기(Data Explorer) 기준 100% 출석률, 즉 290일 연속 출석한 회원이 한 명 있는데, L3 요건 페이지에서는 100점 만점에 97점으로 표시되고 있습니다.

오래된 글인 걸 알지만, 호기심에 물어보는데 혹시 해결하셨나요? 아니면 알아서 해결이 됐나요?

해결하지는 못했지만, 알아서 해결되지는 않을 거라고 확신합니다. 그래서 여전히 무언가 잘못되어 있을 것이라고 꽤 확신합니다. 저는 코드를 읽거나 더 깊이 살펴본 적이 없습니다. 말씀드렸듯이, 대부분의 용도에서는 단순한 관심 사항일 뿐이며, 배지나 승급을 일주일 정도 지연시킬 뿐입니다. 하지만 L3 강등에 대한 제 의견은 유효합니다.

저에게 코드를 책임지는 역할이 있다면, 숫자도 제대로 세지 못하는 코드베이스라면 신경 쓰일 것 같습니다. 조사해 볼 가치가 있을 수도 있지만, 모든 사람이 그렇게 만들어진 것은 아닙니다.

제가 실행한 쿼리는 다른 포럼에서도 쉽게 수행할 수 있습니다. 샌드박스에서는 불가능할 것 같은데, 수명이 짧기 때문이죠.