먼저 볼 장면
검색 결과 건수를 ‘불법 콘텐츠 수’로 잘못 읽는 순간
Lumen은 법적 통지와 요청을 기록하지만 그 주장 자체를 확정 판결로 바꾸지 않습니다. 어떤 필터를 거쳤고 무엇이 비공개인지 함께 보여 줘야 합니다.
삭제 요청이 등록·비식별화·검토·검색되는 Rails 코드를 따라가며 플랫폼 규제 데이터를 책임 있게 해석합니다.
삭제 통지가 데이터베이스에 있다는 사실은 무엇을 증명하고, 무엇을 증명하지 못할까요?
GPL-2.0으로 공개된 Lumen Database의 Rails 애플리케이션을 읽습니다. 법률 자문이 아니라 데이터 구조와 권리·투명성의 긴장을 살펴보는 수업입니다.
Lumen은 2025년부터 Harvard Law School Library가 운영합니다. GitHub 조직명은 역사적으로 Berkman Center를 유지하며, 과정의 코드는 기본 브랜치 커밋에 고정했습니다.
Lumen은 법적 통지와 요청을 기록하지만 그 주장 자체를 확정 판결로 바꾸지 않습니다. 어떤 필터를 거쳤고 무엇이 비공개인지 함께 보여 줘야 합니다.
관심 분야의 문제를 정하고, 코드와 데이터를 읽고, AI 실험을 검증한 뒤 결과를 발표합니다.
서비스가 무엇을 수집하며 연구자와 인터넷 이용자에게 왜 필요한지 출발점부터 확인합니다.
Lumen의 기본 단위는 삭제된 게시물이 아니라 법적 불만이나 삭제 요청을 담은 `notice`입니다.
검색 결과 한 건에서 요청 주체, 수신 플랫폼, 대상 자료, 조치 여부를 서로 다른 칸에 적습니다.
‘통지 한 건이 의미하는 것/아닌 것’ 카드
ed2b5b4# Lumen Database
The Lumen Database collects and analyzes legal complaints and requests for removal of online materials, helping Internet users to know their rights and understand the law. These data enable us to study the prevalence of legal threats and let Internet users see the source of content removals.
## Documentation
https://berkman-klein-center.gitbook.io/lumen-database프로젝트 이름 아래에 수집 대상이 ‘법적 불만과 삭제 요청’이라고 분명히 적혀 있습니다.
목적은 이용자가 권리와 법을 이해하고 삭제의 출처를 볼 수 있게 하는 것입니다.
기술 문서는 별도 문서 사이트로 연결됩니다.
Lumen 검색에서 특정 플랫폼 관련 통지 500건을 찾았습니다.
먼저 한 가지를 골라 보세요.
웹 양식과 JSON으로 들어온 통지를 하나의 Notice 객체로 만들고 자동 비식별화를 거치는 흐름을 봅니다.
`NoticeBuilder`는 입력 형식을 정리하고 관련 주체와 기본값을 붙인 뒤 `auto_redact`를 실행합니다.
가상의 통지에서 공개해도 되는 필드와 가려야 할 개인정보를 두 색으로 표시합니다.
통지 등록→비식별화→검토 흐름도
ed2b5b4 def build
@notice = model_class.new(params)
set_json_params
set_all_entities
add_defaults
@notice.auto_redact
@notice
end입력값으로 새 통지 객체를 만듭니다.
형식을 JSON처럼 맞추고 발신자·수신자 같은 관련 주체를 연결합니다.
빠진 기본값을 채운 뒤 자동 비식별화를 실행합니다.
마지막 줄은 정리된 통지를 다음 단계로 돌려줍니다.
새 제출 경로를 추가했더니 개인정보가 검색에 그대로 나타났습니다.
먼저 한 가지를 골라 보세요.
검색어, 날짜, 발신자, 국가 같은 조건이 Elasticsearch 질의로 바뀌는 구조를 읽습니다.
검색 가능한 필드와 필터 가능한 필드는 다르게 등록됩니다. 화면 형식에 따라 필요한 필터만 추가하기도 합니다.
‘2025년 Google 수신 저작권 통지’ 질문을 검색어·날짜·수신자 필터로 나눕니다.
자연어 연구 질문→검색 조건 변환표
ed2b5b4 ElasticsearchQuery.new(params).tap do |searcher|
Notice::SEARCHABLE_FIELDS.each do |searched_field|
searcher.register searched_field
end
# Facets in the html format will be provided on request from the UI
if request.format.json?
Notice::FILTERABLE_FIELDS.each do |filtered_field|
searcher.register filtered_field
end화면에서 받은 조건으로 새 검색 조립기를 만듭니다.
검색 가능한 모든 필드를 하나씩 등록합니다.
JSON 결과를 요청한 경우에는 분류용 필터도 모두 등록합니다.
검색 결과는 나오지만 ‘수신자=Google’ 필터가 무시됩니다.
먼저 한 가지를 골라 보세요.
검색에 노출되는 조건을 읽고, 건수·비율을 법적 판단으로 과장하지 않는 해석 규칙을 만듭니다.
`visible` 범위는 스팸·숨김·게시·철회 상태를 확인합니다. 이 필터는 통지 주장의 법적 타당성을 판정하지 않습니다.
통지 건수 그래프에 검색 조건, 기간, 공개 범위, 해석 한계라는 네 가지 주석을 씁니다.
검색 탐색기와 ‘이 수치가 증명하지 않는 것’ 패널
ed2b5b4 def self.visible
where(visible_qualifiers)
end
def self.visible_qualifiers
{ spam: false, hidden: false, published: true, rescinded: false }
end`visible`이라는 이름의 선택 규칙이 아래 조건을 사용합니다.
스팸이 아니고 숨김 처리되지 않은 기록만 남깁니다.
게시됐고 철회되지 않은 통지만 검색 대상으로 삼습니다.
어디에도 ‘법적으로 옳다’는 조건은 없습니다.
`visible` 조건을 통과한 통지 2,000건을 분석했습니다.
먼저 한 가지를 골라 보세요.
이번 코스의 결과물
검색 필터라는 기술 선택이 어떤 사람이나 통지를 보이게 또는 보이지 않게 만들 수 있나요?
다음 코스