지식

학술 연구를 위한 웹 데이터 수집: 재현성, 윤리 심사 및 스크랩한 데이터셋 인용 방법

스크랩한 데이터는 이제 연구에서 흔히 사용되지만, 재현하거나 심사하거나 인용하기 어려운 경우가 많습니다. 동료 심사, 윤리 위원회 및 재사용을 견뎌내는 웹 데이터 수집 방법.

James Meadow

2026년 10월 6일 · 9 분 소요

웹 데이터는 이제 평범한 연구 자료가 되었다. 사회과학자는 플랫폼 담론을 연구하고, 경제학자는 온라인 가격을 추적하며, 컴퓨터 과학자는 코퍼스를 구축하고, 공중보건 연구자는 잘못된 정보를 추적한다. 이 데이터의 상당 부분은 스크레이퍼로 수집되며, 상당 부분이 같은 약점을 공유한다. 팀 외부의 누구도 수집 과정을 재현할 수 없고, 윤리 심사는 설문조사를 염두에 두고 작성되었으며, 데이터셋은 “저자들이 수집한 데이터”로 인용되거나 아예 인용되지 않는다.

이 중 어느 것도 불가피한 일이 아니다. 비용이 거의 들지 않는 몇 가지 관행만으로도 스크레이핑한 데이터를 재현 가능하고, 검토 가능하며, 인용 가능하게 만들 수 있다. 이 가이드는 동료 심사를 통과할 수 있는 수집 과정을 설계하는 방법, 윤리위원회가 확인해야 할 사항, 데이터셋을 패키징하고 인용하는 방법, 그리고 인용 파일과 매니페스트 파일을 생성하는 간단한 테스트된 스크립트를 다룬다.

핵심 요약

  • 웹은 변화하고 보는 사람마다 다르게 보이기 때문에, 스크레이핑한 데이터셋은 스크레이퍼를 다시 실행한다고 해서 재현되지 않는다. 재현 가능성이란 무엇을, 언제, 어디서, 어떻게 수집했는지를 정확히 기록하고 보존하는 것을 의미한다.
  • 수집 프로토콜은 수집을 시작하기 전에 작성하고, 다른 연구 방법과 마찬가지로 프로토콜 변경 사항은 수정 사항으로 취급한다.
  • 웹 데이터에 대한 윤리 심사는 데이터가 공개되어 있는지 여부가 아니라 기대, 피해, 식별 가능성에 달려 있다. 동의 면제뿐 아니라 데이터 관리 계획을 준비해야 한다.
  • 데이터셋은 파일 해시와 수집 맥락을 담은 매니페스트, 라이선스, CITATION.cff 파일과 함께 패키징한 뒤, 영구 식별자를 부여하는 저장소에 보관한다.
  • 데이터셋은 버전과 식별자를 포함해 논문과 함께 독립적인 연구 결과물로 인용한다.

스크레이핑한 데이터를 재현하기 어려운 이유

1년 후에 같은 코드를 다시 실행해도 같은 데이터가 나오지 않는다. 페이지는 바뀌고, 사라지고, 이동한다. 많은 사이트가 국가, 언어, 기기, 로그인 상태에 따라 다른 콘텐츠를 보여준다. 플랫폼은 마크업과 접근 규칙을 바꾼다. 그리고 수집 과정 자체도 손실이 있다. 차단, 타임아웃, 요청 제한은 고르지 않게 레코드를 누락시키며, 종종 연구 대상 그 자체와 상관관계가 있는 방식으로 일어난다.

따라서 웹 데이터의 재현 가능성은 재수집이 아니라 다음 세 가지에 달려 있다.

  1. 문서화: 누군가 같은 수집을 시도해 볼 수 있고 자신의 결과가 왜 다른지 이해할 수 있을 만큼 충분히 상세하게 방법을 기록하는 것.
  2. 보존: 실제로 수집한 것, 이상적으로는 추출된 데이터뿐 아니라 원본 응답까지 보존하는 것.
  3. 설명: 수집되지 않은 것, 즉 실패, 제외, 필터링을 건수와 함께 설명하는 것.

수집 과정을 측정 도구처럼 설계하라

스크레이퍼를 측정 도구로 취급하고, 수집을 시작하기 전에 프로토콜을 작성한다.

프로토콜 요소기록해야 할 내용
모집단과 표본 추출출처가 무엇인지, 어떻게 선택했는지, 범위에 포함되는 것과 포함되지 않는 것
수집 기간UTC 기준 시작 및 종료 날짜와 시각, 반복 수집 일정
관측 지점수집기가 제시한 국가, 네트워크 유형, 언어, 기기 프로필. 많은 사이트가 이에 따라 다르기 때문
도구코드 저장소와 커밋, 라이브러리 버전, 브라우저를 사용한 경우 브라우저 버전
접근 규칙robots.txt, 이용약관, 요청 제한을 어떻게 처리했는지, 요청 속도
실패 처리재시도, 실패한 레코드로 간주하는 기준, 실패를 기록하는 방법
처리 과정추출, 정제, 중복 제거, 필터링 단계, 각 단계 전후의 건수

이 중 두 가지는 논문에서 흔히 누락된다. 관측 지점이 중요한 이유는 같은 URL이라도 방문자에 따라 다른 콘텐츠를 반환할 수 있기 때문이며, 이는 표준으로 기록되어야 한다고 관측 지점 표준에 대한 제안에서 주장한 바 있다. 그리고 실패 건수가 중요한 이유는 레코드의 8%가 누락된 데이터셋은 어떤 8%인지 독자가 알아야만 해석할 수 있기 때문이다.

연구가 허용하는 한, 추출된 데이터뿐 아니라 원본 응답도 보관한다. 원본 응답 보관하기에서 설명하는 표준 WARC 형식으로 저장하면, 파서에 오류가 있었던 것으로 밝혀졌을 때 본인과 후속 연구자가 수집 당시 그대로의 자료에서 다시 추출할 수 있다.

윤리 심사

많은 기관의 윤리 심사 절차는 참가자의 동의를 전제로 설계되어 있어서, 웹 데이터는 여기에 딱 들어맞지 않는다. 연구자들은 흔히 공개된 데이터는 심사가 필요 없다고 주장하지만, 위원회는 종종 인터뷰를 염두에 둔 요건으로 대응한다. 더 나은 논의는 실제로 중요한 질문에서 시작해야 한다. 2019년에 3차 버전으로 승인된 인터넷연구자협회(Association of Internet Researchers)의 윤리 가이드라인은 인터넷 연구 윤리를 공개/비공개라는 꼬리표가 아니라 데이터가 공유된 맥락과 연구 생애주기 전반에 걸친 피해 가능성을 중심으로 규정한다.

웹 데이터에 대한 윤리 심사 신청서가 답해야 할 질문은 다음과 같다.

  • 누구의 데이터이며, 그들은 무엇을 기대했는가? 기업의 가격표, 정치인의 공개 발언, 10대의 포럼 게시물은 모두 “공개”되어 있지만 기대하는 바가 매우 다르다.
  • 직접적으로든 조합을 통해서든 사람을 식별할 수 있는가? 인용문은 역추적해 작성자를 찾을 수 있고, 여러 출처를 합치면 어느 한 출처만으로는 식별할 수 없던 사람을 식별할 수 있다.
  • 어떤 피해가 누구에게 발생할 수 있는가? 노출, 괴롭힘, 차별 가능성을 고려하되 취약 집단이나 민감한 주제의 경우 특히 유의한다.
  • 데이터를 어떻게 최소화하고 보호할 것인가? 무엇을 수집하지 않을지, 식별자를 어떻게 가명 처리할지, 누가 접근할 수 있는지, 어디에 저장하는지, 언제 삭제하는지.
  • 무엇을 공개할 것인가? 집계치, 바꿔 쓴 인용문, 또는 원본 레코드인지, 그리고 공유 데이터셋에 접근 제어가 필요한지.

이용약관과 법률은 윤리와 별개의 문제이며, 둘 다 답이 필요하다. Fiesler, Beard, Keegan은 2020년 ICWSM에서 발표한 연구에서 100곳이 넘는 소셜미디어 사이트의 이용약관 중 데이터 수집 관련 조항을 분석하고, 이용약관만으로는 어느 방향으로든 윤리적 판단의 근거로 삼기에 부족하다고 주장했다. 법적 측면에서는 연구 목적 이용에 특정 조항이 적용되는 경우가 많다. 예를 들어 EU 저작권법은 연구 기관의 텍스트 및 데이터마이닝에 대한 예외를 두고 있고, 데이터보호법은 공개 여부와 무관하게 개인정보에 적용된다. 웹 스크레이핑이 합법인지와 GDPR과 데이터 수집에 대한 우리의 개요가 출발점이 될 수 있으며, 프로젝트에 대해서는 소속 기관의 법무 및 개인정보보호 담당자가 최종 권한을 갖는다.

robots.txt는 모든 프로토콜에서 한 문장을 할애할 가치가 있다. 법은 아니지만 사이트가 원하는 바를 가장 명확하게 기계가 읽을 수 있는 형태로 표현한 것이며, 이를 존중하는 것은 옹호하기 쉽다. robots.txt, AI 옵트아웃, 예약 신호에서 이러한 신호가 의미하는 바를 다룬다.

데이터셋 패키징

인용되고 재사용될 수 있는 데이터셋에는 데이터 파일 이상의 것이 필요하다.

  • 매니페스트: 모든 파일을 크기와 암호화 해시와 함께 나열하고, 프로토콜에 따른 수집 맥락도 포함한다. 해시가 있으면 누구나 자신이 가진 파일이 논문에서 사용된 것과 정확히 일치하는지 확인할 수 있다.
  • README: 필드, 방법, 알려진 공백, 데이터를 책임감 있게 사용하는 방법을 설명한다.
  • 라이선스: 공유가 허용되는 것에 대한 라이선스와, 공유할 수 없었던 것과 그 이유에 대한 명확한 설명.
  • CITATION.cff 파일: GitHub, Zenodo, 참고문헌 관리 프로그램이 읽을 수 있는 평문 인용 파일 형식으로, 누구나 클릭 한 번으로 데이터셋을 정확하게 인용할 수 있게 한다.

아래 함수는 데이터 파일 폴더와 수집 설명으로부터 매니페스트와 CITATION.cff를 작성한다.

import hashlib
import json
from datetime import date
from pathlib import Path


def sha256(path):
    digest = hashlib.sha256()
    with open(path, "rb") as f:
        for block in iter(lambda: f.read(1 << 20), b""):
            digest.update(block)
    return digest.hexdigest()


def write_dataset_package(folder, title, authors, collection, version="1.0.0"):
    """Write a manifest (what was collected, how, and file hashes) and a CITATION.cff for a scraped dataset."""
    folder = Path(folder)
    files = sorted(p for p in folder.rglob("*") if p.is_file() and p.name not in ("MANIFEST.json", "CITATION.cff"))
    manifest = {
        "title": title,
        "version": version,
        "collection": collection,  # sources, window, vantage point, tool and code version, robots policy
        "files": [{"path": str(p.relative_to(folder)), "bytes": p.stat().st_size, "sha256": sha256(p)} for p in files],
    }
    (folder / "MANIFEST.json").write_text(json.dumps(manifest, indent=2) + "\n", encoding="utf-8")

    lines = [
        "cff-version: 1.2.0",
        'message: "If you use this dataset, please cite it as below."',
        "type: dataset",
        f"title: {json.dumps(title)}",
        f"version: {json.dumps(version)}",
        f"date-released: {date.today().isoformat()}",
        "authors:",
    ]
    for person in authors:
        lines.append(f"  - family-names: {json.dumps(person['family'])}")
        lines.append(f"    given-names: {json.dumps(person['given'])}")
        if person.get("orcid"):
            lines.append(f"    orcid: {json.dumps(person['orcid'])}")
    abstract = (f"Collected {collection['window']} from {', '.join(collection['sources'])}. "
                "See MANIFEST.json for method and file hashes.")
    lines.append(f"abstract: {json.dumps(abstract)}")  # JSON strings are valid YAML, so quotes cannot break the file
    (folder / "CITATION.cff").write_text("\n".join(lines) + "\n", encoding="utf-8")
    return manifest

작은 예시 데이터셋에 적용한 모습:

from package import write_dataset_package

manifest = write_dataset_package(
    "dataset",
    title="Robots.txt rules for AI crawlers on the top 10,000 domains",
    authors=[{"family": "Example", "given": "Researcher", "orcid": "https://orcid.org/0000-0002-1825-0097"}],
    collection={
        "sources": ["robots.txt files of the Tranco top 10,000 domains"],
        "window": "on 6 October 2026",
        "vantage_point": "one network in Romania",
        "tool": "survey.py at commit 3f2a9c1",
        "robots_policy": "only robots.txt itself was requested",
    },
)
print(len(manifest["files"]), "files listed")

표시된 ORCID는 ORCID 자체에서 공개한 예시 식별자이며, 실제로는 본인의 것을 사용해야 한다. 생성된 파일은 이 형식의 참조 도구인 cffconvert로 검증했으며, “Citation metadata are valid according to schema version 1.2.0”이라는 결과를 확인했고, 제목과 이름에 따옴표와 어퍼스트로피가 포함되어도 유효성이 유지됨을 확인했다. 단순한 템플릿은 이런 경우 깨지기 쉽다. 이 도구가 생성한 APA 스타일 출력은 다음과 같다: “Example R. (2026). Robots.txt rules for AI crawlers on the top 10,000 domains (version 1.0.0).”

보관 및 인용

연구실 폴더나 개인 GitHub 저장소에 있는 데이터셋은 사라질 수 있다. 영구 식별자를 발급하는 저장소에 보관한다.

  • 범용 저장소: CERN이 운영하는 Zenodo와 같은 저장소는 업로드마다 무료로 DOI를 발급하며, 레코드당 50GB라는 표준 제한이 있다.
  • 기관 및 분야별 저장소는 연구비 지원 기관이 요구하거나 해당 분야에서 더 나은 검색성을 제공할 수 있다.
  • 제한된 접근은 데이터를 완전히 공개할 수 없는 경우의 선택지다. 매니페스트와 문서는 공개로 보관하고, 데이터 자체는 통제된 접근 하에 둔다.

2016년 Scientific Data에 게재된 FAIR 원칙은 보관이 달성해야 할 바를 요약한다. 데이터는 사람과 기계 모두에게 찾을 수 있고(Findable), 접근 가능하고(Accessible), 상호운용 가능하고(Interoperable), 재사용 가능해야(Reusable) 한다.

그런 다음 데이터셋을 논문의 방법론 절에 한 문장으로 언급하는 데 그치지 않고, 저자, 연도, 제목, 버전, 저장소, 식별자를 갖춘 독립적인 참고문헌으로 인용한다. 분석에 사용한 정확한 버전을 인용하고, 데이터가 변경되면 새로운 식별자와 함께 새 버전을 게시한다.

체크리스트

  • 표본 추출, 기간, 관측 지점, 도구, 접근 규칙, 실패 처리를 포함해 수집 전에 작성한 프로토콜.
  • 기대, 식별 가능성, 피해, 최소화, 공개를 다루는 윤리 심사 신청서.
  • 연구가 허용하는 경우 원본 응답 보존, 모든 처리 단계의 건수 기록.
  • 파일 해시와 수집 맥락이 담긴 매니페스트, README, 라이선스, CITATION.cff.
  • 영구 식별자를 가진 보관처, 논문에 버전 표기가 된 데이터셋 인용.

같은 원칙은 학계 바깥에도 적용된다. 대규모 학습 데이터셋 구축하기에서 머신러닝 코퍼스에 대해 이를 다룬다.

결론

스크레이핑한 데이터는 엄정한 연구 자료가 될 수 있지만, 그렇게 취급될 때만 그렇다. 문서화된 프로토콜에 따라 수집하고, 공개/비공개 꼬리표가 아니라 맥락의 윤리성을 기준으로 심사하고, 무엇을 관측했는지 설명할 수 있을 만큼 충분히 상세하게 보존하고, 인용 가능하고 버전이 매겨진 결과물로 공개해야 한다.

이 작업의 대부분은 문서화와 패키징이며, 시작할 때 한 번, 끝날 때 한 번 수행하면 된다. 이것이 논문 한 편을 뒷받침하는 데이터셋과 한 분야 전체를 뒷받침하는 데이터셋의 차이다.

출처 및 참고자료

  • Association of Internet Researchers, Internet Research: Ethical Guidelines 3.0, 2019.
  • Wilkinson et al., The FAIR Guiding Principles for scientific data management and stewardship, Scientific Data, 2016.
  • Fiesler, Beard and Keegan, No Robots, Spiders, or Scrapers: Legal and Ethical Regulation of Data Collection Methods in Social Media Terms of Service, ICWSM 2020.
  • Citation File Format, version 1.2.0, and the cffconvert validator.
  • Zenodo, operated by CERN.
  • Code tested by Shifter on 6 October 2026.

시작할 준비가 되셨나요?

205M개 이상의 IP, 195개 이상의 국가를 지원하는 Shifter의 레지덴셜 프록시를 $0.10/GB부터 이용해보세요.

시작하기