시리즈물/데이터 수집을 위한 크롤링

[크롤링] 데이터 수집을 위한 크롤링 11편 : RSS와 Atom 피드 사용법

포도알77 2026. 6. 24. 11:20

본문 중간의 쿠팡 추천 상품 구매시 쿠팡 파트너스에서 일정액의 수수료를 제공받습니다.

[크롤링] 데이터 수집을 위한 크롤링 11편 : RSS와 Atom 피드 사용법

RSSAtom은 사이트의 새 글이나 변경 항목을 기계적으로 수집할 때 가장 먼저 확인할 만한 웹 피드 형식이다. 2026년 6월 24일 확인 기준으로 RSS 2.0 사양과 RFC 4287을 보면, 둘 다 XML 기반이지만 필수 메타데이터와 항목 식별 방식에는 차이가 있다.

실무에서 중요한 질문은 세 가지다. 피드가 있으면 크롤링 범위를 얼마나 줄일 수 있는지, 중복 판정에는 어떤 필드를 믿어야 하는지, 그리고 RSS와 Atom 중 무엇을 우선 읽는 편이 안전한지다. 이 글은 공식 문서에 나온 구조와, 그 구조에서 바로 도출되는 운영 기준만 정리한다.

RSS와 Atom 피드는 왜 먼저 볼까?

피드는 사이트가 최근 게시물 목록과 핵심 메타데이터를 별도 XML 문서로 제공하는 방식이다. 전체 HTML 목록 페이지를 반복 탐색하는 것보다, 새 항목 후보를 좁히는 데 유리하다.

이 점은 사양의 구조에서도 드러난다. RSS 2.0은 하나의 channel 아래에 여러 item을 담고, Atom은 하나의 feed 아래에 여러 entry를 담는다. 즉 두 형식 모두 "최근 항목 목록"을 전달하는 데 초점이 있다.

RSS 2.0에서 꼭 봐야 하는 필드는 무엇일까?

RSS 2.0 사양에서 channel의 필수 요소는 title, link, description 세 가지다. 항목 단위인 item은 모든 요소가 선택 사항이지만, 최소한 title 또는 description 중 하나는 있어야 한다.

또한 사양은 guid가 있을 경우 리더가 새 항목 여부를 판단하는 데 이 값을 사용할 수 있다고 설명한다. pubDate는 발행 시점을 나타내지만 필수는 아니다. ttl은 몇 분 동안 캐시해도 되는지 알려 주는 힌트이며, 모든 클라이언트가 반드시 그대로 따를 의무는 없다.

  • channel/title: 피드 이름
  • channel/link: 대응되는 HTML 사이트 URL
  • channel/description: 피드 설명
  • item/guid: 중복 판정 후보
  • item/pubDate: 시간순 정렬 보조 정보
  • item/link: 상세 페이지 이동 경로

운영 기준으로 보면 RSS는 필수 필드가 비교적 느슨하다. 그래서 실제 현장에서는 guid가 없거나, pubDate 형식이 일정하지 않거나, 일부 항목이 제목 없이 설명만 있는 피드도 만날 수 있다.

Atom은 RSS와 무엇이 다를까?

RFC 4287은 Atom 피드 문서가 정확히 하나의 feed 요소를 가져야 한다고 정의한다. 이 feed에는 id, title, updated가 반드시 포함되어야 한다. 항목 단위인 entryid, title, updated 같은 필수 요소 규칙을 가진다.

RFC 4287 예시에는 rel="self" 링크와 rel="alternate" 링크가 함께 등장한다. 이 구조는 피드 자체 URL과 사람이 읽는 HTML URL을 구분하는 데 유용하다. RSS에서도 비슷한 해석은 가능하지만, Atom 쪽이 링크 관계를 더 명시적으로 표현한다.

  • feed/id: 피드 식별자
  • feed/title: 피드 제목
  • feed/updated: 피드 최신 갱신 시각
  • entry/id: 항목 식별자
  • entry/updated: 항목 갱신 시각
  • entry/link: 상세 페이지 또는 관련 리소스 링크

이 차이 때문에 같은 "새 글 목록" 용도라도, 중복 제거와 증분 수집 기준을 엄격하게 세우고 싶다면 Atom이 더 정돈된 입력으로 느껴질 수 있다. 이 평가는 사양상 필수 요소 수가 더 많다는 점에서 나오는 운영 해석이다.

크롤러는 어떤 값을 기준으로 새 항목을 판단할까?

RSS 사양은 guid가 있으면 리더가 이를 사용해 새 항목 여부를 판단할 수 있다고 설명한다. 따라서 RSS에서는 guid를 1순위 식별자로 보고, 없을 때는 link와 제목 조합을 보조 키로 두는 편이 보수적이다.

Atom에서는 entry/id가 더 직접적인 기준이 된다. 갱신 여부는 updated를 보고 판단할 수 있지만, 실제 처리 정책은 수집기 구현에 달려 있다. 예를 들어 같은 idupdated만 바뀌면 "새 글"이 아니라 "수정된 기존 글"로 취급하는 쪽이 일반적이다.

여기서 중요한 점은 날짜만으로 중복을 판단하지 않는 것이다. 발행 시각이 바뀌거나 시간대 표기가 흔들릴 수 있기 때문에, 식별자와 링크를 먼저 보고 날짜는 정렬과 재수집 우선순위에 쓰는 편이 안전하다.

 

 

RSS와 Atom 중 무엇을 우선하면 좋을까?

정답이 하나로 고정되지는 않지만, 공식 문서만 기준으로 보면 다음 순서가 무난하다.

  • 둘 중 하나만 있으면 제공되는 형식을 그대로 사용한다.
  • 둘 다 있으면 항목 식별자와 갱신 시각을 더 엄격히 다루기 쉬운 Atom을 우선 검토한다.
  • RSS만 제공되면 guid, link, pubDate 조합으로 보수적으로 수집한다.

이 기준은 Atom이 더 우월하다는 선언이 아니라, 필수 요소가 더 명시적이라는 사실에서 나온 실무 판단이다. 반대로 RSS는 오래된 CMS나 블로그 엔진에서 폭넓게 제공되는 경우가 많아, 실제 수집 현장에서는 여전히 매우 유용하다.

피드만으로 끝내도 될까?

대부분의 경우 피드는 "새 항목 발견" 단계에 특히 유리하고, 본문 정규화는 상세 HTML이 더 중요하다. RSS 2.0 사양은 description을 시놉시스 또는 완전한 본문으로 사용할 수 있다고 설명한다. Atom도 항목 안에 요약이나 콘텐츠를 담을 수 있지만, 사이트별 제공 방식은 다를 수 있다.

그래서 수집 파이프라인을 나누는 편이 좋다. 먼저 피드로 새 항목 후보를 찾고, 그다음 상세 링크를 기준으로 본문 HTML을 가져와 정규화하는 방식이다. 이렇게 하면 목록 탐색 비용을 줄이면서도 본문 품질을 별도 단계에서 통제할 수 있다.

재수집 주기는 무엇을 기준으로 잡아야 할까?

RSS에는 ttl이 있지만, 사양상 이것은 힌트다. 즉 피드 제공자가 ttl을 넣었다고 해서 모든 수집기가 정확히 그 주기를 따라야 하는 것은 아니다.

실무에서는 사이트 성격과 실패 비용을 함께 본다. 속보형 뉴스 피드는 짧게, 일반 블로그는 길게 잡는 식이다. 다만 사양 문서만 기준으로 단정할 수 있는 것은 ttl이 "새로 고침 간격 힌트"라는 점까지다. 따라서 실제 폴링 주기는 서비스 정책으로 분리해 두는 편이 맞다.

실전 체크리스트는 어떻게 잡으면 될까?

  • 피드 형식이 RSS인지 Atom인지 먼저 구분한다.
  • RSS면 guid, Atom이면 id를 우선 식별자로 저장한다.
  • 날짜 필드는 중복 판정이 아니라 정렬과 갱신 감지 보조 지표로 본다.
  • 피드 본문 필드가 불완전할 수 있으므로 상세 HTML 수집 단계를 분리한다.
  • RSS의 ttl 같은 힌트는 참고하되 폴링 정책을 별도 설정으로 둔다.

위 항목은 모두 RSS 2.0 사양과 RFC 4287에 나온 구조에서 직접 이어지는 운영 기준이다. 별도 플랫폼 관행을 가정하지 않아도 적용할 수 있다.

FAQ

Q. RSS에는 guid가 항상 있을까?

아니다. RSS 2.0 사양에서 guid는 선택 요소다. 있으면 새 항목 판정에 사용할 수 있지만, 없을 가능성도 고려해야 한다.

Q. Atom의 updated만 보고 새 글 여부를 판단해도 될까?

권장하기 어렵다. updated는 갱신 시각을 보여 주지만, 항목 자체를 식별하는 값은 id다. 중복 제거는 식별자를 우선하고, 시간은 상태 변화 판단에 보조적으로 쓰는 편이 안전하다.

Q. 피드가 있으면 목록 페이지 크롤링은 완전히 필요 없어질까?

항상 그렇지는 않다. 피드는 새 항목 발견에 강하지만, 본문 전체나 추가 메타데이터는 상세 HTML에서만 안정적으로 제공될 수 있다. 따라서 피드와 HTML 수집을 역할별로 나누는 방식이 보편적이다.

정리

RSS와 Atom은 둘 다 새 글 탐지에 유용하지만, 사양상 필수 식별자와 갱신 정보는 Atom 쪽이 더 엄격하다. 반면 RSS는 널리 배포된 형식이라 현장에서 자주 만난다. 2026년 6월 24일 확인 기준으로, 수집기 입장에서는 RSS의 guid와 Atom의 id를 핵심 중복 키로 삼고 날짜 필드는 보조 지표로 두는 구성이 가장 안정적이다.

참고 자료

반응형
페이스북으로 공유카카오톡으로 공유카카오스토리로 공유트위터로 공유URL 복사