글쓰기
모든 플랫폼의 투명성 보고서를 하나의 쿼리 언어로
시작은 대시보드 하나였습니다. 지난봄, 지정된 25개 초대형 온라인 플랫폼(VLOP)을 위해 EU DSA 투명성 데이터를 가로지르는 뷰를 만들었고, 이어서 아홉 개 보고서 표를 모두 채웠습니다. 그 뒤에는 작은 FastAPI 서비스가 있었습니다. 그 후 몇 달 동안, 정작 더 흥미로운 산물이 된 것은 바로 이 서비스였습니다. 다른 보고서를 계속 밀어 넣어도, 같은 쿼리 인터페이스가 그것들을 계속 흡수해 냈기 때문입니다.
이제 이 서비스는 스무 개가 넘는 독립적인 투명성 데이터셋에 걸쳐 있으며, 그 모두가 하나의 쿼리 모델로 닿습니다. 그것이 바로 핵심입니다.
문제는 부족이 아니라 형태다
플랫폼 투명성 데이터는 부족한 게 아니라 파편화되어 있습니다. 회사마다 저마다의 형태로 공개합니다. Meta는 집행 데이터를 GraphQL 피드로 내보내고, TikTok은 누적 CSV를 떨구고, Apple은 옆으로 넓고 성긴 스프레드시트를 올리고, Discord와 Snap은 워크북 안의 하위 표에 레이블을 붙이며, 열 곳이 넘는 규제기관이 저마다 자기 템플릿을 의무화합니다. Google, Microsoft, LinkedIn, TikTok, Discord의 정부 삭제 요청을 비교하려는 연구자는 질문 하나를 던지기도 전에 다섯 가지 형식을 익혀야 합니다.
비교 가능성은 투명성 보고가 본래 가져다주어야 하지만 거의 실현하지 못하는 것입니다. 그래서 이 프로젝트의 진짜 일은 웹 UI가 아닙니다. 그 모든 것을 하나의 tidy-long 스키마로 정규화하고, 그 앞에 하나의 쿼리 언어를 두는 것입니다.
지금 담겨 있는 것
데이터셋은 몇 개의 계열로 묶입니다.
콘텐츠 모더레이션 보고서. EU DSA 조화 템플릿 — 25개 VLOP에 더해 같은 양식으로 제출하는 43개 비(非)VLOP 플랫폼 — 을 공통의 아홉 개 표 스타 스키마로 다루고, 여기에 대형 자율 보고서도 함께 담습니다. Meta의 커뮤니티 표준 집행 보고서(CSER)와 TikTok의 커뮤니티 가이드라인 집행 보고서(CGER)입니다.
정부·법적 요청 보고서. Google(콘텐츠 삭제와 사용자 데이터 요청 모두), Microsoft의 법 집행 요청 보고서, LinkedIn, TikTok의 정부·법적 요청, Discord, Apple, GitHub, Snap — 이들 기업이 반기마다 공개하는 국가별 요청·공개 데이터입니다.
각국 투명성 법률. 인도 IT 규칙에 따른 월별 준수 보고서, 한국 Naver·Kakao의 제출 자료(및 정보통신망법의 불법 콘텐츠 보고서), 대만 반사기법 데이터, 튀르키예 제5651호 법률 보고서, 싱가포르 IMDA의 온라인 안전 코드, 일본의 새로운 정보플랫폼법 통계, 텍사스주 HB 20과 오스트리아 KoPl-G, 그리고 중국 12377·12321 신고 핫라인 수치입니다.
부상하는 EU 의무와 서술형 제출 자료. 테러 콘텐츠 온라인 규정, AI법의 학습 데이터 투명성 요약, 인터넷 차단을 기록한 Google의 Traffic & Disruptions 목록, Android의 악성코드 비율 데이터 — 그리고 뉴욕주와 캘리포니아주의 서비스 약관 법률에 따른, 전문 검색이 가능한 산문형 제출 자료도 포함합니다.
하나의 쿼리 언어, SQL은 필요 없다
모든 것에 같은 방식으로 닿습니다. 쿼리 인터페이스는 TikTok Research API를 본떴습니다. 표를 지정한 뒤 필터, 그룹화, 집계를 구조화된 파라미터로 기술합니다 — 호출하는 쪽이 SQL을 쓰는 일은 결코 없습니다. 서버는 모든 필드를 그 표의 고정 레지스트리와 대조하고, 하나의 파라미터화된 SELECT로 컴파일합니다. 긴 쿼리는 비동기 '202 반환 후 폴링' 패턴으로 실행되며, 결과는 JSON 또는 CSV로 돌아옵니다.
원시 파라미터보다 쓰기 좋게 만드는 이음매가 둘 있습니다. 하나는 자연어 '질문' 상자로, LLM이 평범한 말의 질문을 같은 구조화 쿼리로 번역하고, 그것이 완전히 동일한 검증 경계를 통과합니다 — 모델은 제안하고, 검증기가 결정합니다. 다른 하나는 MCP 서버로, 덕분에 AI 에이전트는 제가 손으로 클라이언트를 짜지 않아도 표를 발견하고, 쿼리를 실행하고, 결과를 폴링할 수 있습니다.
어려운 것은 주의사항 쪽이다
데이터셋을 연결하는 일은 쉽습니다. 어려운 것은 그것들로 거짓말하지 않는 일입니다. 거의 모든 출처에는, 순진한 집계가 짓밟아 버릴 각주가 붙어 있습니다. 국가안보 관련 수치는 정확한 건수가 아니라 구간 범위로 공표되므로 합산할 수 없습니다. 유포율과 선제 탐지율은 분수이므로 결코 더해서는 안 됩니다. DSA 템플릿은 세부 행 바로 옆에 집계 '합계' 행을 끼워 넣어서, 부주의한 SUM은 이중 계산이 됩니다. 그리고 같은 템플릿 행이 열 개가 넘는 EU 언어로 도착하므로, 하나의 정규 키로 맞춰 주어야 합니다.
저는 그런 주의사항을 숨기기보다 가드레일로 부호화하려 애써 왔습니다 — 쿼리 계층은 비율을 합산하거나 차원 고정을 잊으면 경고하고, 방법론은 당연시하지 않고 적어 둡니다. 목표는 더 큰 숫자 더미가 아닙니다. 실제로 비교하고 인용할 수 있는 숫자입니다.
라이브 대시보드와 모든 데이터셋 페이지는 transparency.kieranmaynard.com에 있고, 대화형 API 문서는 /docs에 있습니다. 이것들과 나란히 조회하고 싶은 투명성 보고서가 있다면, 저는 언제나 다음에 담을 대상을 찾고 있습니다.