Hackers' Pub 신고(flag) 기능 기획서
洪 民憙 (Hong Minhee) @hongminhee@hackers.pub
개요
목적
신고 기능은 Hackers' Pub 커뮤니티의 행동 강령(code of conduct)을 위반하는 콘텐츠나 사용자를 식별하고, 관리자가 적절한 조치를 취할 수 있도록 돕는 시스템입니다.
핵심 철학
신고 기능의 궁극적인 목적은 계도와 성장입니다. 무균실처럼 완벽한 사용자만을 남기려는 것이 아니라, 신고를 통해 각자의 행동을 돌아보고 더 나은 커뮤니티 구성원으로 성장할 수 있는 기회를 제공하는 데 있습니다.
추방은 최후의 수단이며, 시스템은 다음과 같은 단계적 접근을 권장합니다:
- 인지 — 피신고자가 자신의 행동이 문제가 될 수 있음을 알게 됩니다
- 성찰 — 왜 그 행동이 문제인지 이해할 기회를 갖습니다
- 개선 — 행동을 수정하고 커뮤니티와 조화롭게 참여합니다
- 제재 — 개선 의지가 없거나 심각한 위반의 경우에만 적용됩니다
분산형 네트워크 고려
Hackers' Pub은 ActivityPub 프로토콜 기반의 분산형 소셜 네트워크입니다. 따라서 신고 기능도 다음을 고려하여 설계되었습니다:
- 다른 서버(인스턴스)에 호스팅된 콘텐츠도 신고 가능
- Mastodon 등 주요 ActivityPub 플랫폼과의 호환성
- 연합(federation) 환경에서의 조치 전파
설계 원칙
신고자 보호
- 원칙
- 신고자의 신원은 철저히 비공개로 유지됩니다.
- 근거
- 신고자가 보복을 두려워하면 신고를 주저하게 되고, 이는 커뮤니티 건강성을 해칠 수 있습니다. 익명성이 보장되어야 신고 시스템이 효과적으로 작동합니다.
- 구현
-
- 피신고자에게는 신고 사실과 사유만 전달되며, 신고자 정보는 공개되지 않습니다
- 관리자만 신고자 정보에 접근할 수 있습니다
- 데이터베이스 수준에서도 접근 제어가 적용됩니다
피신고자의 알 권리
- 원칙
- 피신고자는 자신이 왜 신고되었는지 알 권리가 있습니다.
- 근거
- 무엇이 문제인지 알지 못하면 개선할 수 없습니다. 계도라는 목적을 달성하려면 피신고자가 자신의 행동을 돌아볼 수 있는 충분한 정보를 제공해야 합니다.
- 구현
-
- 신고 사유(행동 강령 위반 내용)가 피신고자에게 전달됩니다
- 어떤 콘텐츠가 문제가 되었는지 명시됩니다
- 단, 신고자가 누구인지는 알 수 없습니다
행동 강령의 유연한 참조
- 원칙
- 행동 강령은 살아있는 문서이며, 시간이 지남에 따라 발전하고 변화할 수 있습니다.
- 근거
- 커뮤니티가 성장하고 사회적 맥락이 변화함에 따라 행동 강령도 함께 진화해야 합니다. 신고 시스템은 이러한 변화에 유연하게 대응할 수 있어야 합니다.
- 구현
-
- 신고 사유를 특정 조항 번호에 하드코딩하지 않습니다
- 신고 시점의 행동 강령 버전을 기록하여 맥락을 보존합니다
- LLM 매칭 시 현재 행동 강령 전문을 참조하여 동적으로 분석합니다
- 신고자가 작성한 원본 사유는 항상 보존됩니다
투명한 처리 과정
- 원칙
- 신고의 처리 과정과 결과는 관련 당사자에게 투명하게 공유됩니다.
- 근거
- 신고자는 자신의 신고가 어떻게 처리되었는지 알 권리가 있으며, 피신고자도 어떤 조치가 취해졌는지 알아야 합니다.
- 구현
-
- 신고자에게 처리 진행 상황과 최종 결과가 통보됩니다
- 피신고자에게 조치 내용과 사유가 전달됩니다
- 관리자의 판단 근거가 기록됩니다
단계적 제재
- 원칙
- 제재는 위반의 심각성과 빈도에 비례하여 단계적으로 적용됩니다.
- 근거
- 경미한 위반에 과도한 제재를 가하면 커뮤니티 참여를 위축시키고, 심각한 위반에 가벼운 제재를 가하면 커뮤니티 안전을 해칩니다.
- 구현
-
- 경고 → 콘텐츠 검열 → 일시 정지 → 영구 정지의 단계적 체계
- 위반 이력이 누적되어 다음 제재 수준에 반영됩니다
- 심각한 위반은 단계를 건너뛰고 즉각적인 강력한 조치 가능
용어 정의
| 용어 | 정의 |
|---|---|
| 신고(flag/report) | 행동 강령 위반으로 의심되는 콘텐츠나 사용자를 관리자에게 알리는 행위 |
| 신고자(reporter) | 신고를 제출하는 사용자 |
| 피신고자(reported) | 신고의 대상이 되는 사용자 |
| 신고 대상(target) | 신고된 콘텐츠(게시글, 단문) 또는 사용자 |
| 관리자(moderator) | 신고를 검토하고 조치를 취할 권한이 있는 사용자 |
| 조치(action) | 관리자가 신고에 대해 취하는 결정 (기각, 경고, 검열, 정지 등) |
| 이의 제기(appeal) | 피신고자가 조치에 대해 재검토를 요청하는 행위 |
| 로컬 사용자 | Hackers' Pub에 계정이 있는 사용자 |
| 원격 사용자 | 다른 ActivityPub 인스턴스의 사용자 |
신고 대상
콘텐츠 신고
사용자는 다음 유형의 콘텐츠를 개별적으로 신고할 수 있습니다:
게시글(article) 신고
- 대상
- 장문의 블로그 형식 게시글
- 표시 위치
- 게시글 하단 또는 더보기 메뉴에 “신고하기” 옵션
- 신고 시 수집 정보
-
- 게시글 ID 및 영구 링크
- 게시글 작성자 정보
- 신고 시점의 게시글 내용 스냅샷 (증거 보존)
- 신고자가 작성한 사유
단문(note) 신고
- 대상
- 짧은 마이크로블로그 형식 글
- 표시 위치
- 단문의 더보기 메뉴에 “신고하기” 옵션
- 신고 시 수집 정보
- 게시글과 동일
사용자 신고
특정 사용자의 전반적인 행동 패턴이 문제가 되는 경우, 개별 콘텐츠가 아닌 사용자 자체를 신고할 수 있습니다.
- 사용 시나리오
-
- 여러 콘텐츠에 걸쳐 지속적으로 문제 행동을 보이는 경우
- 개별 콘텐츠는 경계선상에 있지만, 전체적인 패턴이 문제인 경우
- 프로필 자체(이름, 약력, 프로필 사진 등)가 행동 강령을 위반하는 경우
- 표시 위치
- 사용자 프로필 페이지의 더보기 메뉴에 “사용자 신고하기” 옵션
- 신고 시 수집 정보
-
- 사용자 ID 및 프로필 링크
- 신고 시점의 프로필 정보 스냅샷
- 신고자가 작성한 사유
- (선택) 관련 콘텐츠 링크 첨부 가능
원격 콘텐츠 및 사용자
다른 ActivityPub 인스턴스의 콘텐츠와 사용자도 동일하게 신고할 수 있습니다.
- 근거
- 연합 타임라인에 표시되는 모든 콘텐츠는 Hackers' Pub 사용자에게 영향을 미치므로, 원격 콘텐츠도 신고 대상이 되어야 합니다.
- 처리 방식
-
- Hackers' Pub 내에서의 표시/연합 여부에 대한 조치
- 원격 인스턴스로 ActivityPub
Flag액티비티 전송 (선택적)
신고 프로세스
신고 흐름도
flag_process start 사용자가 콘텐츠/사용자 신고 클릭 form 신고 양식 표시 start->form reason 사유 작성 (자유 형식) form->reason submit 신고 제출 reason->submit llm LLM이 사유를 분석 submit->llm coc 행동 강령 조항 매칭 llm->coc save 신고 저장 (대기 상태) llm->save notify_mod 관리자에게 알림 발송 save->notify_mod notify_reporter 신고자에게 접수 확인 notify_mod->notify_reporter신고 양식
신고 양식은 간결하면서도 필요한 정보를 수집할 수 있도록 설계됩니다.
필수 입력 항목
신고 사유 (자유 형식 텍스트)
이 콘텐츠/사용자를 신고하는 이유를 설명해 주세요.
구체적인 행동 강령 조항을 알지 못해도 괜찮습니다.
어떤 점이 불편하거나 문제가 된다고 느꼈는지
자유롭게 작성해 주세요.
[ ]
[ ]
[ ]
최소 10자 이상 작성해 주세요.
근거:
- 사용자가 행동 강령의 모든 조항을 숙지하고 있다고 가정하지 않습니다
- 자유 형식으로 작성하면 더 풍부한 맥락을 수집할 수 있습니다
- LLM이 사유를 분석하여 관련 조항을 자동으로 매칭합니다
선택 입력 항목
추가 콘텐츠 링크 (사용자 신고 시)
관련된 다른 콘텐츠가 있다면 링크를 추가해 주세요. (선택)
[링크 추가 +]
근거: 사용자 신고의 경우, 문제 행동의 패턴을 보여주는 여러 콘텐츠를 함께 제출하면 관리자가 더 정확한 판단을 내릴 수 있습니다.
LLM 기반 행동 강령 매칭
신고가 제출되면 LLM이 신고 사유를 분석하여 관련된 행동 강령 조항을 식별합니다.
매칭 프로세스
-
입력 구성
- 신고자가 작성한 사유 텍스트
- 현재 버전의 행동 강령 전문
- 신고된 콘텐츠 내용 (있는 경우)
-
LLM 분석
- 신고 사유와 행동 강령 조항 간의 관련성 분석
- 관련 조항 식별 및 신뢰도 점수 산출
- 분석 요약 생성
-
결과 저장
- 매칭된 조항 목록 (신뢰도 점수 포함)
- LLM 분석 요약
- 신고 시점의 행동 강령 버전 식별자
행동 강령 버전 관리
- 근거
- 행동 강령이 변경되면 과거 신고의 맥락이 불명확해질 수 있습니다. 따라서 신고 시점의 행동 강령 버전을 기록하여 맥락을 보존합니다.
- 구현 방식
-
- 행동 강령 파일의 Git 커밋 해시를 버전 식별자로 사용
- 신고 기록에 버전 식별자 저장
- 관리자가 신고를 검토할 때 해당 버전의 행동 강령 참조 가능
매칭 결과 활용
- 관리자 검토
- 매칭 결과는 관리자의 참고 자료로 활용됩니다
- 최종 판단
- 관리자가 매칭 결과를 수정하거나 무시할 수 있습니다
- 피신고자 통보
- 최종 확정된 위반 조항이 피신고자에게 전달됩니다
중복 신고 처리
같은 콘텐츠나 사용자에 대해 여러 신고가 접수될 수 있습니다.
- 처리 방식
-
- 동일 대상에 대한 신고는 하나의 “신고 케이스”로 그룹화됩니다
- 각 신고의 사유는 개별적으로 보존됩니다
- 관리자에게는 신고 건수와 함께 표시됩니다
- 신고 건수가 많을수록 우선순위가 높아집니다
- 근거
-
- 여러 사람이 독립적으로 같은 문제를 발견했다면 더 심각한 문제일 가능성이 높습니다
- 다양한 관점의 신고 사유를 종합하면 더 정확한 판단이 가능합니다
신고 내역 조회
신고자는 자신이 제출한 신고의 상태를 확인할 수 있습니다.
- 확인 가능한 정보
-
- 신고 대상 (콘텐츠/사용자)
- 신고 일시
- 자신이 작성한 신고 사유
- 처리 상태 (대기 중 / 검토 중 / 처리 완료)
- 처리 결과 (조치됨 / 기각됨)
- 확인 불가능한 정보
-
- 다른 신고자의 존재 여부
- 구체적인 제재 내용 (프라이버시 보호)
- 피신고자의 이의 제기 내용
관리자 처리 프로세스
신고 검토 흐름도
moderation_process cluster_review 콘텐츠/사용자 검토 pending 신고 접수 (대기 상태) check 관리자가 신고 확인 pending->check reviewing 검토 시작 (검토 중) check->reviewing review1 신고된 콘텐츠 확인 review2 신고 사유 검토 review3 LLM 매칭 결과 참고 review4 사용자 이력 확인 review5 맥락 파악 decision 판단 결정 review5->decision dismiss 기각 decision->dismiss warn 경고 decision->warn action 제재 decision->action notify 조치 기록 및 알림 - 신고자에게 결과 통보 - 피신고자에게 조치 통보 - (필요시) 원격 서버 통보 dismiss->notify warn->notify action->notify신고 상태
| 상태 | 설명 |
|---|---|
pending |
신고가 접수되어 검토 대기 중 |
reviewing |
관리자가 검토 중 |
resolved |
처리 완료 (조치됨) |
dismissed |
기각됨 (위반 아님) |
검토 시 확인 사항
관리자는 다음 정보를 종합적으로 검토합니다:
신고 정보
- 신고자가 작성한 사유
- LLM이 매칭한 행동 강령 조항
- 신고 건수 (중복 신고의 경우)
- 각 신고자의 사유 (중복 신고의 경우)
콘텐츠 정보
- 신고된 콘텐츠 원문
- 콘텐츠의 맥락 (댓글 스레드 등)
- 신고 시점의 스냅샷 (수정/삭제된 경우)
사용자 정보
- 피신고자의 이전 위반 이력
- 이전 경고/제재 기록
- 계정 생성일 및 활동 기간
- 로컬/원격 사용자 여부
조치 옵션
관리자는 다음 조치 중 하나를 선택합니다:
| 조치 | 설명 | 적용 기준 |
|---|---|---|
| 기각 | 위반이 아니라고 판단 | 행동 강령 위반 사실이 없는 경우 |
| 경고 | 경고 메시지 발송 | 경미한 위반, 초범인 경우 |
| 콘텐츠 검열 | 해당 콘텐츠 숨김 처리 | 콘텐츠 자체가 문제인 경우 |
| 일시 정지 | 일정 기간 계정 정지 | 반복 위반 또는 중간 수준의 위반 |
| 영구 정지 | 계정 영구 정지 | 심각한 위반 또는 지속적 악의적 행동 |
조치 시 필수 입력 사항
관리자가 조치를 취할 때 다음을 기록해야 합니다:
위반 조항 (최종 확정):
[행동 강령 내 관련 조항 선택/입력]
조치 사유:
[관리자의 판단 근거를 상세히 기술]
피신고자에게 전달할 메시지:
[피신고자가 받을 통보 내용]
(일시 정지의 경우) 정지 기간:
[시작일] – [종료일]
근거:
- 조치의 투명성을 확보합니다
- 이의 제기 시 검토 자료로 활용됩니다
- 일관된 판단 기준을 유지하는 데 도움이 됩니다
피신고자 프로세스
신고 통보
피신고자는 자신이 신고되었다는 사실과 사유를 알림으로 받습니다.
통보 시점
즉시 통보하지 않는 경우:
- 신고 접수 직후에는 피신고자에게 통보하지 않습니다
- 무분별한 신고로 인한 불필요한 스트레스 방지
통보하는 경우:
- 관리자가 신고를 검토하고 조치를 결정한 후 통보합니다
- 기각된 경우에도 교육적 목적으로 통보할 수 있습니다 (관리자 재량)
통보 내용
경고/제재 시:
귀하의 [콘텐츠/계정]에 대해 신고가 접수되어 검토한 결과,
행동 강령 위반으로 판단되어 다음과 같은 조치가 취해졌습니다.
위반 내용:
[행동 강령의 관련 조항]
대상 콘텐츠:
[해당되는 경우 콘텐츠 링크]
조치:
[경고 / 콘텐츠 검열 / N일 정지 / 영구 정지]
관리자 메시지:
[관리자가 작성한 설명]
이 조치에 대해 이의가 있으시면 아래 버튼을 통해
이의 제기를 하실 수 있습니다.
[이의 제기하기]
기각 통보 시 (선택적):
귀하의 [콘텐츠/계정]에 대해 신고가 접수되었으나,
검토 결과 행동 강령 위반에 해당하지 않는다고 판단되었습니다.
다만, 일부 커뮤니티 구성원이 불편함을 느꼈을 수 있으므로
참고해 주시면 감사하겠습니다.
관련 내용:
[간략한 설명]
피신고자가 확인할 수 있는 정보
| 정보 | 확인 가능 여부 |
|---|---|
| 신고된 사실 | 가능 |
| 위반으로 지적된 행동 강령 조항 | 가능 |
| 대상 콘텐츠 | 가능 |
| 조치 내용 및 기간 | 가능 |
| 관리자의 판단 사유 | 가능 |
| 신고자가 누구인지 | 불가능 |
| 신고자가 작성한 원본 사유 | 불가능 |
| 신고 건수 | 불가능 |
근거: 피신고자에게 개선에 필요한 정보는 모두 제공하되, 신고자를 특정할 수 있는 정보는 철저히 보호합니다.
제재 중 제한 사항
콘텐츠 검열
- 해당 콘텐츠가 타임라인과 검색에서 숨겨집니다
- 직접 링크(퍼머링크)로는 접근 가능하지만, 검열 안내가 표시됩니다
- 작성자 본인은 콘텐츠를 볼 수 있습니다
일시 정지
- 새로운 콘텐츠 작성 불가
- 댓글 작성 불가
- 반응 불가
- 팔로/언팔로 불가
- 기존 콘텐츠 열람은 가능
- DM 수신은 가능하나 발신 불가
영구 정지
- 계정 접근 불가
- 모든 기능 사용 불가
- 기존 콘텐츠는 숨김 처리됨
이의 제기 프로세스
이의 제기 자격
- 조치를 받은 피신고자만 이의 제기 가능
- 하나의 조치에 대해 1회의 이의 제기 가능
- 이의 제기 기한: 조치 통보 후 14일 이내
이의 제기 흐름도
appeal_process start 피신고자가 이의 제기 write 이의 내용 작성 start->write submit 이의 제출 write->submit review 관리자 검토 (다른 관리자 권장) submit->review decision 판단 review->decision reject 기각 decision->reject uphold 조치 유지 decision->uphold modify 조치 변경 decision->modify notify 결과 통보 (피신고자, 원신고자) reject->notify uphold->notify modify->notify이의 제기 양식
이의 제기 사유:
[왜 이 조치가 부당하다고 생각하시는지 설명해 주세요]
추가 맥락 또는 증거:
[조치 결정 시 고려되지 않았다고 생각되는
맥락이나 정보가 있다면 제공해 주세요]
[제출]
이의 제기 검토
- 검토 원칙
-
- 가능하면 원래 조치를 결정한 관리자가 아닌 다른 관리자가 검토합니다
- 원 신고 내용, 조치 사유, 이의 제기 내용을 종합적으로 검토합니다
- 새로운 정보나 맥락이 있는지 확인합니다
- 결정 옵션
-
- 이의 기각: 원 조치 유지
- 조치 완화: 더 가벼운 조치로 변경 (예: 정지 → 경고)
- 조치 철회: 조치 취소 및 기록 정정
- 조치 강화: 드문 경우, 이의 제기 과정에서 더 심각한 위반이 발견된 경우
결과 통보
피신고자에게:
귀하의 이의 제기를 검토한 결과를 알려드립니다.
결정: [이의 기각 / 조치 완화 / 조치 철회]
판단 사유:
[관리자의 검토 결과 설명]
(해당 시) 변경된 조치:
[새로운 조치 내용]
원 신고자에게:
귀하가 신고하신 건에 대해 피신고자로부터
이의 제기가 있어 재검토가 진행되었습니다.
재검토 결과: [원 조치 유지 / 조치 변경]
(조치가 변경된 경우)
변경 사유에 대한 간략한 설명:
[설명]
패널티 체계
패널티 종류 및 기준
경고 (warning)
- 설명
- 위반 사실을 알리고 재발 방지를 요청하는 가장 가벼운 조치입니다.
- 적용 기준
-
- 경미한 행동 강령 위반
- 초범이며 악의가 없어 보이는 경우
- 실수나 무지로 인한 위반으로 판단되는 경우
- 효과
-
- 경고 메시지가 발송됩니다
- 경고 이력이 기록되어 향후 판단에 참고됩니다
- 일정 기간(예: 1년) 경과 후 이력에서 제외될 수 있습니다
- 경고 누적
-
- 경고 3회 누적 시 자동으로 더 강한 조치 검토 대상이 됩니다
- 단, 자동 제재는 없으며 관리자의 판단이 필요합니다
콘텐츠 검열 (content censorship)
- 설명
- 특정 콘텐츠를 공개 영역에서 숨기는 조치입니다.
- 적용 기준
-
- 콘텐츠 자체가 행동 강령을 위반하는 경우
- 사용자의 전반적 행동보다 특정 콘텐츠가 문제인 경우
- 효과
-
- 해당 콘텐츠가 타임라인, 검색, 추천에서 제외됩니다
- 퍼머링크는 유지되나, 접근 시 검열 안내가 표시됩니다
- 연합(federation)으로 다른 서버에
Delete액티비티가 전송될 수 있습니다
검열 콘텐츠 표시
이 콘텐츠는 행동 강령 위반으로 검열되었습니다.
[원문 보기] (클릭 시 경고와 함께 표시)
일시 정지 (temporary suspension)
- 설명
- 일정 기간 동안 계정 활동을 제한하는 조치입니다.
- 적용 기준
-
- 경고에도 불구하고 위반이 반복되는 경우
- 중간 수준의 심각한 위반인 경우
- 즉각적인 활동 중단이 필요하지만 영구 정지까지는 아닌 경우
- 정지 기간
-
- 최소 1일 – 최대 90일
- 관리자가 위반 정도에 따라 결정
- 권장 기준:
- 경미한 반복 위반: 1–7일
- 중간 수준 위반: 7–30일
- 심각한 위반 (초범): 30–90일
- 효과
-
- 새 콘텐츠 작성 불가
- 상호작용(반응, 댓글 등) 불가
- 기존 콘텐츠 열람은 가능
- 정지 해제 시 완전한 기능 복구
- 원격 사용자의 경우
-
- Hackers' Pub 내에서 해당 기간 동안 연합 차단
- 원격 서버 관리자에게 ActivityPub
Flag액티비티로 통보
영구 정지 (permanent suspension)
- 설명
- 계정을 영구적으로 비활성화하는 가장 강력한 조치입니다.
- 적용 기준
-
- 매우 심각한 행동 강령 위반 (혐오 발언, 불법 콘텐츠 등)
- 일시 정지 후에도 동일한 위반이 반복되는 경우
- 명백한 악의를 가지고 커뮤니티를 해치려는 의도가 확인된 경우
- 효과
-
- 계정 로그인 불가
- 모든 기능 사용 불가
- 공개 콘텐츠 숨김 처리
- 프로필 페이지에 정지 안내 표시
- 원격 사용자의 경우
-
- Hackers' Pub과의 영구적 연합 차단
- 원격 서버 관리자에게 ActivityPub
Flag액티비티로 통보
- 복구
-
- 원칙적으로 영구 정지는 복구되지 않습니다
- 극히 예외적인 경우, 충분한 시간 경과 후 재심 요청 가능
패널티 이력 관리
| 패널티 | 이력 보존 기간 | 비고 |
|---|---|---|
| 경고 | 1년 | 1년간 추가 위반 없으면 이력에서 제외 |
| 콘텐츠 검열 | 무기한 | 콘텐츠 존재하는 한 유지 |
| 일시 정지 | 무기한 | 기록은 유지, 판단 시 경과 시간 고려 |
| 영구 정지 | 무기한 | - |
ActivityPub 연합 처리
개요
Hackers' Pub은 ActivityPub 프로토콜을 사용하는 분산형 네트워크의 일부입니다. 신고 기능도 이 환경에서 원활히 작동해야 합니다.
Flag 액티비티
ActivityPub 명세에는 Flag 액티비티가 정의되어 있으며, 이를 통해 신고를
연합 네트워크에 전파할 수 있습니다.
Flag 액티비티 구조:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Flag",
"actor": "https://hackerspub.example/users/moderator",
"object": [
"https://remote.example/users/reported_user",
"https://remote.example/posts/problematic_post"
],
"content": "Violation of Code of Conduct: harassment"
}
원격 콘텐츠 신고 처리
신고 접수
- 로컬 사용자가 원격 콘텐츠/사용자를 신고합니다
- 신고는 Hackers' Pub 데이터베이스에 저장됩니다
- 관리자가 일반 신고와 동일하게 검토합니다
조치 적용
-
Hackers' Pub 내 조치:
- 해당 콘텐츠의 로컬 캐시 숨김/삭제
- 해당 사용자와의 연합 차단 (일시/영구)
-
원격 서버 통보 (선택적):
Flag액티비티를 원격 서버에 전송- 원격 서버의 조치 여부는 해당 서버의 재량
외부에서 받은 Flag 처리
다른 서버에서 Hackers' Pub으로 Flag 액티비티가 전송된 경우:
Flag액티비티 수신 및 파싱- 신고 대상이 로컬 사용자/콘텐츠인지 확인
- 관리자에게 외부 신고로 표시하여 알림
- 관리자가 검토 후 자체 판단에 따라 조치
외부 신고 표시:
[외부 신고] remote.example에서 접수됨
대상: @localuser의 콘텐츠
사유: "Violation of our community guidelines"
* 이 신고는 외부 서버에서 접수되었습니다.
자체 행동 강령에 따라 판단해 주세요.
Mastodon 호환성
Mastodon은 가장 널리 사용되는 ActivityPub 구현체입니다. Mastodon과의 호환성을 위해 다음을 고려합니다:
- Mastodon의
Flag액티비티 형식 지원 - Mastodon 관리자 API와의 연동 고려 (향후)
- Mastodon에서 보내는 신고 수신 및 처리
알림 체계
알림 유형
| 알림 유형 | 수신자 | 내용 |
|---|---|---|
flag_received |
관리자 | 새 신고 접수됨 |
flag_resolved |
신고자 | 신고 처리 완료됨 |
action_taken |
피신고자 | 조치가 취해짐 |
appeal_received |
관리자 | 이의 제기 접수됨 |
appeal_resolved |
피신고자 | 이의 제기 처리 완료됨 |
appeal_result |
신고자 | 이의 제기로 인한 변경 알림 |
suspension_ending |
피신고자 | 정지 해제 임박 알림 |
알림 채널
- 인앱 알림
- 기본 알림 방식
- 이메일
- 중요 알림 (조치, 정지 등)
- ActivityPub
- 원격 사용자의 경우 해당 서버로 전송
프라이버시 및 보안
신고자 익명성 보호
- 원칙
- 신고자의 신원은 피신고자에게 절대 공개되지 않습니다.
- 기술적 조치
-
- API 응답에서 신고자 정보 필터링
- 관리자 UI에서만 신고자 정보 표시
- 로그에서 신고자 정보 마스킹 (필요시)
데이터 접근 제어
| 역할 | 접근 가능 정보 |
|---|---|
| 일반 사용자 | 자신의 신고 내역만 |
| 피신고자 | 자신에 대한 조치 및 사유 (신고자 정보 제외) |
| 관리자 | 모든 신고 정보 (신고자 정보 포함) |
콘텐츠 스냅샷
신고 시점의 콘텐츠를 스냅샷으로 저장하는 이유:
- 피신고자가 콘텐츠를 수정/삭제해도 원본 증거 보존
- 공정한 판단을 위한 기록 유지
- 이의 제기 시 참고 자료로 활용
- 보존 기간
-
- 케이스 종료 후 최소 1년간 보존
- 법적 요구사항이 있는 경우 더 오래 보존
악용 방지
- 허위 신고 방지
-
- 동일 사용자의 동일 대상 반복 신고 제한
- 허위 신고 시 신고자에 대한 제재 가능
- 신고 패턴 모니터링
- 신고 폭주 방지
-
- 단시간 다수 신고 시 속도 제한
- 관리자에게 이상 패턴 경고
관리자 대시보드
대시보드 개요
관리자 대시보드는 신고 관리의 중심 허브입니다.
- 주요 화면
-
- 대기 중인 신고 목록
- 신고 상세 및 처리 화면
- 이의 제기 목록
- 통계 및 분석
- 제재 중인 사용자 목록
신고 목록 화면
┌─────────────────────────────────────────────────────────┐
│ 신고 관리 [통계 보기] │
├─────────────────────────────────────────────────────────┤
│ 필터: [전체 ▼] [대기 중 ▼] [최신순 ▼] 검색: [____]│
├─────────────────────────────────────────────────────────┤
│ │
│ ⚠️ 높은 우선순위 (신고 5건 이상) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 🔴 @user123의 콘텐츠 (신고 7건) │ │
│ │ "혐오 발언", "차별적 표현" 외 5건 │ │
│ │ 최초 신고: 2시간 전 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 일반 신고 │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 🟡 @remote@other.server 사용자 (신고 2건) │ │
│ │ "스팸 행위" │ │
│ │ 최초 신고: 5시간 전 │ │
│ └─────────────────────────────────────────────────┘ │
│ ┌─────────────────────────────────────────────────┐ │
│ │ 🟢 @newuser의 댓글 (신고 1건) │ │
│ │ "부적절한 언어 사용" │ │
│ │ 신고: 1일 전 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
└─────────────────────────────────────────────────────────┘
신고 상세 화면
┌─────────────────────────────────────────────────────────┐
│ 신고 상세 - 케이스 #12345 [← 목록] │
├─────────────────────────────────────────────────────────┤
│ │
│ 📋 기본 정보 │
│ ──────────────────────────────────────── │
│ 대상: @user123의 콘텐츠 │
│ 유형: 단문 (note) │
│ 신고 건수: 7건 │
│ 상태: 대기 중 │
│ │
│ 📝 신고된 콘텐츠 │
│ ──────────────────────────────────────── │
│ ┌─────────────────────────────────────────────────┐ │
│ │ [콘텐츠 원문 표시] │ │
│ │ 작성일: 2024-12-01 14:30 │ │
│ └─────────────────────────────────────────────────┘ │
│ │
│ 🔍 신고 사유 (7건) │
│ ──────────────────────────────────────── │
│ 1. "명백한 혐오 발언입니다" - 신고자A, 2시간 전 │
│ 2. "특정 집단을 비하하는 표현" - 신고자B, 3시간 전 │
│ 3. "불쾌한 차별적 언어" - 신고자C, 4시간 전 │
│ ... (더 보기) │
│ │
│ 🤖 LLM 분석 결과 │
│ ──────────────────────────────────────── │
│ 관련 행동 강령 조항: │
│ - 차별 금지 (신뢰도: 95%) │
│ - 존중하는 언어 사용 (신뢰도: 88%) │
│ │
│ 📊 피신고자 이력 │
│ ──────────────────────────────────────── │
│ - 가입일: 2024-06-15 │
│ - 이전 경고: 1회 (2024-09-20) │
│ - 이전 정지: 없음 │
│ │
│ ⚡ 조치 │
│ ──────────────────────────────────────── │
│ [기각] [경고] [콘텐츠 검열] [일시 정지] [영구 정지] │
│ │
└─────────────────────────────────────────────────────────┘
통계 화면
기간 선택 드롭다운으로 조회 범위를 설정합니다 (예: 최근 30일).
요약
| 항목 | 값 |
|---|---|
| 총 신고 건수 | 127건 |
| 처리 완료 | 98건 (77%) |
| 평균 처리 시간 | 4.2시간 |
조치 분포
| 조치 | 건수 | 비율 |
|---|---|---|
| 기각 | 45건 | 46% |
| 경고 | 38건 | 39% |
| 콘텐츠 검열 | 10건 | 10% |
| 일시 정지 | 4건 | 4% |
| 영구 정지 | 1건 | 1% |
위반 유형 (상위 5개)
| 순위 | 유형 | 건수 |
|---|---|---|
| 1 | 스팸/광고 | 32건 |
| 2 | 혐오 발언 | 24건 |
| 3 | 괴롭힘 | 18건 |
| 4 | 부적절한 콘텐츠 | 12건 |
| 5 | 허위 정보 | 8건 |
향후 고려사항
자동화 기능 (향후 도입 검토)
- 자동 숨김: 특정 임계값 이상의 신고가 접수되면 관리자 검토 전 임시 숨김
- AI 기반 사전 필터링: 명백한 위반 콘텐츠 자동 감지
- 스팸 자동 처리: 명백한 스팸에 대한 자동 조치
주의
자동화 기능은 오탐의 위험이 있으므로 신중하게 도입해야 합니다.
커뮤니티 참여
- 신뢰할 수 있는 신고자: 정확한 신고 이력을 가진 사용자의 신고에 높은 가중치
- 커뮤니티 중재자: 관리자 부담 분산을 위한 커뮤니티 중재자 제도 검토
다국어 지원
- 신고 사유 자동 번역 (관리자가 다른 언어 사용 시)
- 행동 강령 다국어 버전과의 연동
- 조치 통보 메시지 다국어 템플릿
법적 요구사항 대응
- 법적 요청에 따른 데이터 보존/제공 절차
- 저작권 침해 신고 (DMCA 등) 별도 처리 절차
- 사법기관 협조 절차
부록: 용어 대조표
| 한국어 | 영어 | 설명 |
|---|---|---|
| 신고 | flag/report | 위반 의심 콘텐츠/사용자를 알림 |
| 행동 강령 | code of conduct | 커뮤니티 규칙 |
| 관리자 | moderator | 신고 처리 권한자 |
| 검열 | censorship | 콘텐츠 숨김 처리 |
| 정지 | suspension | 계정 활동 제한 |
| 이의 제기 | appeal | 조치에 대한 재검토 요청 |
| 연합 | federation | 분산 네트워크 간 연결 |
| 콘텐츠 | post | 게시글과 단문을 통칭 |
| 게시글 | article | 장문의 블로그 형식 글 |
| 단문 | note | 짧은 마이크로블로그 형식 글 |
| 타임라인 | timeline | 콘텐츠 피드 |
| 팔로 | follow | 다른 사용자 구독 |
| 팔로워 | follower | 나를 구독하는 사용자 |
| 차단 | block | 특정 사용자 접근 제한 |
| 반응 | react | 콘텐츠에 이모지로 반응 |
| 연합우주 | fediverse | ActivityPub 기반 분산 소셜 네트워크 |
| 인스턴스 | instance | 연합우주의 개별 서버 |
이 문서는 Hackers' Pub 커뮤니티의 의견을 수렴하여 지속적으로 개선됩니다.

