웹스크래핑·콘텐츠 수집 컴플라이언스 표준화 (2026)
크라우니 이미지수집기 표준 및 웹스튜디오 디자인 정교화 가이드
작성일: 2026-06-14 적용 대상: 크라우니 이미지수집기(crowny-image-crawler), 웹스크래핑 자동화 도구, AI 데이터수집 시스템 목적: Anthropic Usage Policy, robots.txt RFC 9309, 저작권법, GDPR/CCPA 준수 및 출처표기 의무 통합
I. 핵심 원칙: 6축 컴플라이언스 프레임워크
1. Anthropic 책임있는 AI 원칙
2. RFC 9309 robots.txt 준수 (2022년 IETF 정식 표준)
필수 준수 규칙
robots.txt 형식:
- 위치: 도메인 최상단 /robots.txt
- 인코딩: UTF-8, Content-Type: text/plain
- 크기 제한: 500KB 이상 읽기 불가 (캐시 24시간)
경로 매칭 로직
| 규칙 | 설명 | 우선순위 |
|---|---|---|
Disallow: /admin | /admin 이하 경로 금지 | 가장 긴 매칭 우선 |
Allow: /admin/public | 그 안의 /public은 허용 | 길이 최대 = 승리 |
User-agent: * | 모든 봇 대상 | 대소문자 구분 無 |
Crawl-delay: 2 | RFC 9309 미포함 (자의적 준수) | — |
- 경로 매칭 = 대소문자 민감(case-sensitive)
*= 0개 이상의 문자,$= 문자열 끝- 매칭 실패 시 기본값 = 허용(Allow)
- robots.txt 자체 = 항상 허용
오류 처리
4xx(404,403) → 모든 리소스 접근 허용 (선택적)
5xx(500,503) → 전체 금지로 간주 (필수 준수)
리다이렉트 → 최대 5회 따라가기
크라우니 구현 체크리스트
☐ 모든 크롤러는 robots.txt 다운로드 및 파싱
☐ Disallow 규칙 위반 시 재시도 금지
☐ 2xx 상태(성공)만 신뢰, 5xx는 full-disallow로 처리
☐ robots.txt 오류 발생해도 파싱된 규칙 적용
☐ 오래된 robots.txt 캐시 검증 (24시간 TTL)
3. 저작권 및 공정이용(Fair Use) 4가지 판단 요소
미국 저작권법 § 107 공정이용 테스트
4가지 요소 (모두 고려, 가중치 없음)
| 요소 | 웹콘텐츠 수집 시 판단 기준 | 우호적(✓) | 비우호적(✗) |
|---|---|---|---|
| 1. 용도·성질 | 영리적 이용인가? 변형(transform)적 이용인가? | 비영리 교육/연구, 뉴스 | 상업적 재판매, 원본과 동일 |
| 2. 원본 저작물의 성질 | 사실적 vs 창작적? 발표된 vs 미발표? | 사실 자료(보도), 공개 | 소설·시(창작), 미발표 원고 |
| 3. 사용 부분의 양·실질성 | 전체 vs 부분? "심장부(heart)" 포함? | 작은 부분(섬네일, 인용) | 대부분 복제, 핵심 부분 도용 |
| 4. 원본 시장 영향 | 판매 기회 빼앗기? 라이선스료 우회? | 시장 대체 없음, 부가가치 | 직접 경쟁, 라이선스 침해 |
실무 경계선
- 수집 허용: 섬네일(70-90%), 텍스트 인용(100단어 이내, 원본 링크 필수)
- 수집 금지: 전체 고해상도 이미지, 음악·영상 전체, 소설 전장
- 회색 영역: 데이터셋 구성용 대량 이미지(비영리 AI 학습) = 판례 진행 중
크라우니 구현
저작권 안전 수집 규칙:
☐ 원본 출처 명시 (URL, 저작자, 라이선스)
☐ 변형 또는 가치 추가 (메타데이터, 분류, 링크)
☐ 원본 시장 침해 없음 (섬네일/요약만 표시)
☐ 삭제요청 24시간 응답 (DMCA § 512(i) 준수)
☐ 저작권 필터 설정 (라이선스 공개 content만 수집)
4. 개인정보(PII) 및 얼굴인식 회피 의무
GDPR (EU) 및 CCPA (캘리포니아)
| 규제 | 적용 범위 | 핵심 요구사항 | 위반 시 벌금 |
|---|---|---|---|
| GDPR | EU 거주자 모든 개인정보 | 명시적 동의(opt-in), 삭제권(Right to Forget) | 전년도 글로벌 매출 4% 또는 €2000만 |
| CCPA | 캘리포니아 거주자, 온라인 거동 정보 | 판매 금지, 1월 설정 카테고리 제외 | $2,500/건 또는 $7,500/고의적 위반 |
| GDPR 적용 확대 | 공개 정보도 "개인정보"로 분류 | 웹에 공개라도 수집 금지 (동의 필수) | — |
얼굴인식 데이터 위기
크라우니 구현 (PII 회피 체크리스트)
개인정보 필터링:
☐ 얼굴 인식 필터 활성화 (모든 이미지)
- OpenCV 또는 TensorFlow Lite 경량 모델 사용
- 얼굴 감지 시 자동 제외
☐ 개인식별정보(PII) 탐지 및 제거
- 전화번호, 이메일, SSN, 주소 정규식 필터
- 소셜 미디어 게시물 제외
- 의료·금융 정보 자동 오픈 금지
☐ "소유자 명확" 콘텐츠만 수집
- CC-BY, MIT, Apache 라이선스 확인
- 작가 미상 또는 소유자 불명 제외
☐ GDPR/CCPA opt-out 신호 존중
- DNT(Do Not Track) 헤더 인식
- "수집 거부" 문구 포함 페이지 제외
5. 정직한 User-Agent 및 Rate-Limiting 예의
User-Agent 투명성 표준
❌ 나쁜 예:
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36
✅ 좋은 예:
User-Agent: CrownyImageCollector/1.0 (+https://docs.crowny.org/web-scraping-policy; contact: crawler@crowny.org)
필수 요소:
- 명확한 봇 식별자 (CrownyImageCollector, GoogleBot 등)
- 버전 번호
- 정책 문서 링크
- 연락처 이메일
Rate-Limiting 구현 규칙
| 전략 | 구현 | 효과 |
|---|---|---|
| 고정 딜레이 + 지터 | 1-3초 + 0-500ms 난수 | 서버 부하 분산 |
| 토큰 버킷 | 초당 5 요청 = 5개 토큰 충전 | 버스트 공격 방지 |
| Crawl-Delay 준수 | robots.txt의 Crawl-Delay 값 적용 | 소유자 선호도 반영 |
| 429 Too Many Requests | 지수 백오프 (2s, 4s, 8s, ...) | 자동 복구, 영구 차단 회피 |
| Retry-After 헤더 | 서버가 명시한 시간 대기 | 호스트 최우선 신뢰 |
법적 영향
"서버 성능 저하를 초래하는 스크래핑 = CFAA '손해(damage)' 주장 또는 chattels 불법점유 가능성" 적절한 rate-limiting은 이 위험을 완전히 제거함.
크라우니 구현 코드 패턴 (한선씨)
변수 last_request_time = 0
변수 delay_ms = 2000 ; 2초 기본
변수 max_delay_ms = 30000 ; 최대 30초
함수 should_fetch(url) {
변수 elapsed = 현재시간() - last_request_time
만약 (elapsed < delay_ms) {
기다려(delay_ms - elapsed)
}
last_request_time = 현재시간()
반환 참
}
함수 handle_429(retry_after_header) {
변수 wait_time = 지터() ; 초기 2초
동안 (참) {
기다려(wait_time)
시도 { 반환 fetch(url) }
실패 404,403 { 반환 거짓 } ; 영구 거부
실패 429 { wait_time = 최소(wait_time * 2, max_delay_ms) }
}
}
6. 출처 표기 의무 및 법적 책임
출처 추적(Data Provenance) 요구사항
필수 메타데이터:
json{
"content_hash": "sha256:a1b2c3...",
"source_url": "https://example.com/image.jpg",
"crawl_timestamp": "2026-06-14T10:30:45Z",
"license_type": "CC-BY-4.0",
"license_url": "https://creativecommons.org/licenses/by/4.0/",
"copyright_holder": "Jane Doe",
"extraction_method": "image_scraper_v1.0",
"verified_at": "2026-06-14T10:30:50Z"
}
EU AI Act 영향 (2024년 이후)
- 투명성 의무: 모든 훈련 데이터 출처 문서화
- 감시 대상: 대규모 모델(>10^25 FLOPs) 학습에 사용된 웹스크래핑 데이터
- 위반 시: 배포 차단, 상당한 벌금
DMCA § 512(i) "Good Faith Removal"
수집한 콘텐츠 소유자의 삭제요청 → 24시간 이내 제거 의무
책임 제한(Safe Harbor) 조건:
- 삭제요청 통지 수신
- 24시간 이내 배포 중단
- 영속적 기록 유지 (감사용)
크라우니 구현: 출처표기 체크리스트
저장 단계:
☐ 메타데이터 JSON 함께 저장 (이미지.jpg + 이미지.json)
☐ 웹훅 설정: 소유자 contact 페이지 모니터링
☐ 삭제요청 수신 = 즉시 이메일 알림
배포 단계:
☐ 모든 콘텐츠에 출처 URL 하이퍼링크
☐ CC-BY 표시 (저작자명 명시)
☐ 라이선스 배지 첨부 (CC 아이콘)
☐ "관련 자료" 섹션에 원본 사이트 링크
감시 단계:
☐ DMCA 삭제요청 메일박스 자동화 (@crowny.org)
☐ 72시간 내 제거 완료 (24시간 안전마진)
☐ 이력 저장 (제거 날짜, 사유, 완료 확인)
II. 통과 기준 체크리스트
Phase 1: 수집 전 (Preflight)
Policy Compliance
☐ Anthropic Usage Policy 읽음 (privacy-update July 8, 2026 최신판)
☐ GDPR/CCPA 적용 대상 여부 확인
☐ 사이트 ToS/라이선스 검토
robots.txt 확인
☐ /robots.txt 다운로드 시도
☐ Disallow 규칙 매칭 (RFC 9309 준수)
☐ User-Agent 허용 여부 확인
☐ Crawl-delay 적용 (선택적이나 권장)
Risk Assessment
☐ 저작권 소유자 확인 가능한가?
☐ 리스크 등급: GREEN (공개라이선스), YELLOW (문의필요), RED (금지)
☐ RED는 즉시 정지
Phase 2: 수집 중 (Runtime)
Data Filtering
☐ 얼굴 감지 필터 활성화
☐ PII 탐지 (이메일, 전화번호) 차단
☐ 의료/금융 민감 정보 제외
☐ GDPR opt-out 신호 존중 (DNT 헤더)
Server Courtesy
☐ robots.txt Disallow 규칙 준수
☐ Rate-limit 설정: 초당 1-5 요청
☐ 429 응답 = 지수 백오프 (최대 30초)
☐ User-Agent 투명성 (정책 URL 포함)
Logging
☐ 모든 요청 로깅 (timestamp, URL, status, size)
☐ 거부된 요청 별도 기록
☐ 오류 분류 (4xx/5xx/429)
Phase 3: 저장 및 배포 (Storage & Distribution)
Provenance
☐ 각 콘텐츠마다 메타데이터 JSON 함께 저장
- source_url, crawl_timestamp, license_type
☐ 해시값 계산 (SHA256) 및 기록
☐ "수집 날짜"와 "최종 검증 날짜" 분리
Attribution
☐ 모든 출력 콘텐츠에 source 하이퍼링크
☐ CC 라이선스 → 저작자명 명시 (CC-BY 필수)
☐ 라이선스 배지 부착 (Creative Commons 아이콘)
DMCA Readiness
☐ 삭제요청 수신 이메일 주소: removal@crowny.org
☐ 삭제요청 템플릿 준비 (48시간 처리 약속)
☐ 이력 데이터베이스 (removed_at, removed_reason)
Phase 4: 감시 및 대응 (Monitoring)
Continuous Compliance
☐ 월 1회 robots.txt 정책 변경 확인
☐ 분기 1회 GDPR/CCPA 규제 변경 스캔
☐ 삭제요청 평균 응답 시간 < 24시간
☐ 429 에러율 < 5% (rate-limit 조정 신호)
Audit Trail
☐ 6개월 데이터 보관 (감시 필요 시 복구)
☐ 거부된 URL 목록 (다시 시도 금지)
☐ 사용자 불만 기록 (trend analysis)
Third-Party Audits
☐ 연 1회 법무 검토 (저작권, 개인정보)
☐ 보안 감시(compliance scanning) 도구 도입
☐ 침해 신고 채널 공개 (transparency.crowny.org)
III. 크라우니 이미지수집기 표준 구현 아키텍처
모듈 설계
┌─────────────────────────────────────────────────┐
│ Crawny Image Collector v2.0 │
├─────────────────────────────────────────────────┤
│ Layer 1: Policy Enforcement │
│ ├─ robots.txt Parser (RFC 9309) │
│ ├─ GDPR/CCPA Filter │
│ └─ License Validator │
├─────────────────────────────────────────────────┤
│ Layer 2: Data Collection │
│ ├─ Transparent User-Agent │
│ ├─ Rate-Limiter (Token Bucket) │
│ ├─ Face Detection Filter │
│ └─ PII Regex Filter │
├─────────────────────────────────────────────────┤
│ Layer 3: Storage & Provenance │
│ ├─ Metadata JSON (source, license, timestamp) │
│ ├─ SHA256 Hash Verification │
│ └─ Audit Log DB │
├─────────────────────────────────────────────────┤
│ Layer 4: Distribution & Attribution │
│ ├─ Source Hyperlink Injection │
│ ├─ CC License Badge │
│ └─ DMCA Removal Handler │
└─────────────────────────────────────────────────┘
핵심 함수 시그니처 (한선씨)
```한선씨 ; robots.txt 준수 여부 판단 함수 is_url_allowed(url, user_agent) { 변수 rules = 파싱_robots_txt(도메인(url)) 변수 path = 경로추출(url) 변수 longest_match = "" 동안 (rules에 규칙 있음) { 만약 (경로_매칭(path, rules.path)) { 만약 (길이(rules.path) > 길이(longest_match)) { longest_match = rules.path } } } 반환 longest_match가 "Disallow"이 아님 }
; 개인정보 필터링 함수 filter_pii(text) { 변수 pii_patterns = 맵생성() 맵넣어(pii_patterns, "email", "[\w\.-]+@[\w\.-]+\.\w+") 맵넣어(pii_patterns, "phone", "\d{3}-\d{4}-\d{4}") 맵넣어(pii_patterns, "ssn", "\d{3}-\d{2}-\d{4}") 동안 (pii_patterns에 패턴 있음) { text = 텍스트교체(text, 패턴, "[REDACTED]") } 반환 text }
; 출처 메타데이터 생성 함수 create_provenance_metadata(url, content, license) { 변수 metadata = 맵생성() 맵넣어(metadata, "source_url", url) 맵넣어(metadata, "crawl_timestamp", 현재시간()) 맵넣어(metadata, "content_hash", sha256(content)) 맵넣어(metadata, "license_type", license) 맵넣어(metadata, "verified_at", 현재시간()) 반환 JSON인코딩(metadata) }
---
## IV. 웹스튜디오 디자인 정교화 (Frontend)
### UI 패턴: 컴플라이언스 인디케이터
html
<!-- 이미지 카드 컴플라이언스 배지 -->
<div class="image-card">
<img src="image.jpg" alt="...">
<div class="provenance-badge">
<a href="https://original.com/image.jpg" target="_blank">
🔗 출처
</a>
<span class="license-badge cc-by-4">
CC-BY-4.0
</span>
<span class="crawl-date">
수집: 2026-06-14
</span>
</div>
<details>
<summary>저작권 정보</summary>
<pre>출처: Jane Doe
라이선스: CC-BY-4.0
URL: https://example.com/image.jpg
수집 날짜: 2026-06-14T10:30:45Z
해시: a1b2c3...</pre>
</details>
</div>
### 정책 투명성 페이지
docs.crowny.org/web-scraping-policy
├─ 01. Anthropic Usage Policy 준수 선언
├─ 02. robots.txt RFC 9309 준수 약속
├─ 03. 저작권·공정이용 판단 기준
├─ 04. 개인정보 수집 금지 정책
├─ 05. User-Agent 투명성
├─ 06. 삭제요청 절차 (DMCA § 512)
└─ 07. 컴플라이언스 감시 현황 (월 리포트)
### 삭제요청 처리 UI
removal.crowny.org/request
├─ 로그인 (이메일)
├─ 콘텐츠 선택 (URL 또는 해시)
├─ 사유 입력 (선택)
├─ 타임스탬프 확인
└─ 대기: 24시간 처리 약속
└─ 이메일 확인: removal-<id>@crowny.org
---
## V. 위험 등급 및 대응 매트릭스
| 수집 유형 | 라이선스 | 위험 등급 | 행동 | 예시 |
|-----------|---------|---------|------|------|
| **공개 데이터** | CC-BY, CC0, MIT | 🟢 GREEN | 즉시 수집 | Wikimedia, OpenStreetMap |
| **상업 저작권** | © (판매) | 🔴 RED | 금지 | Getty, 미국 뉴스사 |
| **학술 자료** | CC-BY-SA, arXiv | 🟡 YELLOW | 문의 후 수집 | 저자명 명시 + 인용 |
| **공공기관** | CC-0, Public Domain | 🟢 GREEN | 즉시 수집 | 정부 사진, NASA |
| **사용자 생성** | 불명 | 🔴 RED | 금지 | 개인 블로그, 소셜미디어 |
| **뉴스 기사** | 저작권 보유 | 🟡 YELLOW | 링크+요약만 | 공정이용 인용 |
---
## VI. 실무 사례: "크라우니 아트 갤러리" 컴플라이언스 검증
**목표**: Wikimedia Commons에서 1000개 이미지 수집
### 통과 과정
Stage 1: Planning
✓ robots.txt 확인: /robots.txt → User-Agent:* → Allow /
✓ ToS 검토: Wikimedia Commons = CC-BY-SA 3.0 라이선스 확인
✓ 법무 검토: 출처표기 + CC 배지 = 저작권 안전Stage 2: Collection ✓ User-Agent 설정: "CrownyImageCollector/2.0 (+docs.crowny.org/web-scraping; contact: crawler@crowny.org)" ✓ Rate-limiting: 1초 딜레이 + 2초 랜덤 지터 ✓ 메타데이터 저장: 각 이미지마다 JSON (source, license, author, hash)
Stage 3: Deployment ✓ 출처 링크: 모든 이미지에 Wikimedia 원본 URL 하이퍼링크 ✓ CC 배지: "CC-BY-SA-3.0" 아이콘 + 저작자명 표시 ✓ 문서: gallery.crowny.org/terms = "모든 이미지는 크리에이티브커먼즈 라이선스"
Stage 4: Audit ✓ 6개월: 라이선스 변경 스캔 (연간 1회) ✓ DMCA 처리: 0건 (합법적 수집 + 명확한 출처) ✓ 사용자 만족도: 투명한 출처표기로 신뢰 상승 ```
VII. 주요 참고 자료
법적 근거
- RFC 9309: Robots Exclusion Protocol — 공식 표준 (2022)
- US Copyright Act § 107: Fair Use — 4가지 판단 요소
- GDPR Articles 6, 21: Data Protection — 개인정보 동의 원칙
- CCPA Section 1798.100: Consumer Privacy Rights — 캘리포니아 규정
- DMCA § 512(i): Safe Harbor Removal — 24시간 삭제 의무
업계 사례
- Reddit v. Anthropic (2026, 캘리포니아): 동의 없는 댓글 학습 데이터 사용 소송 진행 중
- Clearview AI 벌금 (2023, 이탈리아): €2000만 GDPR 위반 판정
- hiQ Labs v. LinkedIn (2022, 항소법원): 공개 데이터 스크래핑 일반적으로 합법 (CFAA 무관)
도구 및 라이브러리
- RFC 9309 파서: muratgozel/robotstxt-util
- 얼굴 감지: OpenCV, TensorFlow Lite (경량)
- PII 탐지: regex 기반 또는 transformers 모델
- 라이선스 감지: licensename.js, SPDX 식별자
VIII. 결론: 크라우니의 약속
크라우니 이미지수집기는 다음 6가지 원칙으로 운영됩니다:
- 투명성 — 모든 출처 명시, User-Agent 정직
- 존중 — robots.txt 준수, rate-limit 예의
- 안전 — 개인정보·얼굴정보 자동 필터링
- 책임 — 24시간 삭제요청 응응, 감시 체계
- 법준수 — GDPR/CCPA/저작권법 동시 만족
- 진정성 — CC 라이선스 명확 표기, 저작자 존경
"수집한 것은 모두 정직하게 돌려줄 수 있는 데이터만"
버전: 2.0 (2026-06-14) 담당: 크라우니 데이터거버넌스팀 검토 주기: 분기 (Q3 2026) 다음 검토: 2026-09-14