1. 웹 스크래핑이란 무엇인가 — 기본 개념과 법적 경계
웹 스크래핑(Web Scraping)은 프로그램을 이용해 웹페이지의 HTML 구조를 분석하고 필요한 데이터를 자동으로 추출하는 기술입니다. 검색 엔진의 크롤러(Crawler)가 전 세계 웹페이지를 인덱싱하는 방식과 동일한 원리이지만, 목적과 범위가 다릅니다. 뉴스 아그리게이터, 가격 비교 사이트, 부동산 정보 플랫폼 등 수많은 서비스가 웹 스크래핑 기술을 핵심 데이터 수집 수단으로 활용합니다.
법적 측면에서 웹 스크래핑은 회색 지대에 놓여 있습니다. 공개된 정보를 수집하는 행위 자체는 대부분의 국가에서 위법이 아닙니다. 그러나 사이트의 robots.txt 규정을 무시하거나, 서버에 과도한 부하를 주거나, 개인정보를 수집하는 경우 법적 문제가 발생할 수 있습니다. 짤랭(JjalRank)은 각 커뮤니티의 이용약관과 robots.txt를 확인하고, 요청 간격을 충분히 두어 서버 부하를 최소화하는 방식으로 운영합니다.
2. 짤랭 크롤러의 기술 스택 — Python + BeautifulSoup + Requests
짤랭의 데이터 수집 엔진은 Python을 기반으로 구축되어 있습니다. 핵심 라이브러리는 HTTP 요청을 담당하는 requests와 HTML 파싱을 담당하는 BeautifulSoup4입니다. 이 두 라이브러리의 조합은 간결한 코드로 강력한 스크래핑 기능을 구현할 수 있어, 중소 규모의 데이터 수집 프로젝트에서 가장 널리 사용되는 스택입니다.
각 커뮤니티 사이트마다 HTML 구조가 다르기 때문에, 짤랭은 커뮤니티별로 독립적인 파서(Parser) 모듈을 운영합니다. 예를 들어 디시인사이드 베스트 갤러리, 개드립 베스트, 뽐뿌 자유 게시판은 각각 다른 CSS 선택자(Selector)로 게시글 목록을 추출합니다. 커뮤니티 사이트가 HTML 구조를 변경하면 해당 파서를 업데이트해야 하는 유지보수 부담이 발생하는데, 이는 웹 스크래핑 기반 서비스의 고유한 과제 중 하나입니다.
3. 수집 스케줄러와 장애 대응 전략
짤랭의 크롤러는 Python schedule 라이브러리를 활용하여 매시간 정각에 자동으로 실행됩니다. 실행 사이클은 다음과 같습니다. ① 각 커뮤니티 베스트 게시판 조회 → ② 신규 게시글 필터링(이미 수집된 게시글 제외) → ③ 미디어(이미지·영상) URL 추출 → ④ 트렌드 스코어 계산 → ⑤ Supabase DB에 UPSERT.
네트워크 오류나 대상 사이트의 일시적 장애에 대비해 각 커뮤니티 파서는 최대 3회 재시도(Retry) 로직을 내장합니다. 특정 커뮤니티 수집에 연속으로 실패하면 해당 커뮤니티는 일시적으로 수집 대상에서 제외되고, 알림(Slack 등)을 통해 운영자에게 보고됩니다. 이를 통해 일부 커뮤니티의 장애가 전체 서비스에 영향을 미치지 않도록 격리합니다.
4. HTTP 레퍼러 우회와 이미지 핫링크 보호 처리
국내 커뮤니티 사이트들은 외부 도메인에서의 이미지 직접 링크(핫링크)를 차단하는 HTTP Referer 기반 보호 정책을 적용하는 경우가 많습니다. 외부 사이트에서 이미지 URL을 직접 <img src>로 사용하면 HTTP 403 에러가 반환되어 이미지가 표시되지 않습니다.
짤랭은 이 문제를 프론트엔드 레벨에서 해결합니다. 모든 동적으로 생성되는 <img>, <video>, <source> 태그에 referrerpolicy="no-referrer" 속성을 일괄 적용하고, HTML <head>에 <meta name="referrer" content="no-referrer">를 선언하여 페이지 전체의 레퍼러 전송을 차단합니다. 이 방식으로 커뮤니티 이미지 서버 입장에서는 레퍼러 정보가 없는 직접 접근으로 처리되어 이미지가 정상적으로 표시됩니다.
5. Supabase 실시간 DB와 Cloudflare Edge의 시너지
수집된 데이터는 Supabase(PostgreSQL 기반 BaaS) 클라우드에 저장됩니다. Supabase의 강점은 RESTful API와 실시간 구독(Realtime Subscription) 기능을 별도 서버 없이 즉시 사용할 수 있다는 점입니다. 짤랭 프론트엔드는 Supabase JavaScript 클라이언트를 통해 직접 DB 뷰를 조회하며, 정렬과 필터링 연산은 모두 DB 서버에서 처리되어 클라이언트 부하를 최소화합니다.
여기에 Cloudflare Pages Functions를 결합하면, 개별 게시글 상세 페이지(/post/:id)를 전 세계 300개 이상의 Cloudflare 엣지 서버에서 실시간으로 렌더링할 수 있습니다. 이는 사용자의 물리적 위치와 관계없이 빠른 응답 속도를 보장하며, 구글 검색 봇이 각 게시글 페이지를 독립적인 콘텐츠 페이지로 인식하도록 올바른 Open Graph 태그와 JSON-LD 구조화 데이터를 동적으로 제공합니다. 이 Supabase + Cloudflare Functions 조합은 별도의 백엔드 서버 없이 실시간 SEO를 구현한 짤랭의 핵심 기술 아키텍처입니다.