RSS 뉴스 큐레이션 자동화: 중복 제거부터 사람 검토까지

최종 업데이트 2026.09.15

로컬 RSS 샘플 5건을 수집·중복 제거·주제 필터해 후보 2건을 사람 검토 대기열에 넣는 흐름을 실제 캡처와 작동 영상으로 검증했습니다.

RSS 뉴스 큐레이션은 수집보다 중복 제거와 사람 검토가 중요합니다. 로컬 샘플 5건을 선별해 후보 2건을 만드는 흐름을 직접 검증했습니다.

RSS 자동화의 목적부터 정한다

RSS는 새 글을 일정한 형식으로 전달하는 웹 콘텐츠 배포 방식입니다. RSS Advisory Board의 RSS 2.0 명세에 따르면 채널에는 제목, 링크, 설명이 있고 각 항목에는 제목, 링크, 설명, 카테고리, 발행일, 고유 식별자 등을 둘 수 있습니다. 큐레이션 시스템은 이 값을 읽어 새 항목을 찾고, 관심 주제에 맞는 후보를 편집자에게 보여 줄 수 있습니다.

자동화의 목표를 “다른 사이트 글을 빠르게 복사해 발행하기”로 잡으면 출처와 맥락이 사라지고 비슷한 페이지가 쌓입니다. 이 글에서 만든 흐름의 목표는 더 좁습니다. 여러 항목을 같은 구조로 읽고, 같은 주소를 한 번만 남기고, 지정한 주제가 포함된 후보를 추린 뒤 사람이 원문과 날짜를 확인하도록 대기열을 만드는 것입니다.

발행은 마지막 단계입니다. 원문에서 무엇을 배웠는지, 직접 무엇을 비교하거나 시험했는지, 독자에게 어떤 판단 기준을 더하는지가 없으면 단순 요약 목록이 됩니다. 자동 수집과 자동 발행 사이에 편집 단계를 분리해야 합니다.

수집·정규화·중복 제거·필터의 네 단계

첫 단계는 피드를 읽는 일입니다. 피드 주소별로 가져온 시각, HTTP 상태, 채널 제목을 기록하고 item의 제목, 링크, 설명, 발행일, guid를 내부 필드로 맞춥니다. 피드마다 날짜와 본문 표현이 조금씩 다르므로 원본 문자열과 변환 결과를 함께 남기면 오류를 찾기 쉽습니다.

둘째는 중복 제거입니다. RSS 명세는 guid를 새 항목 여부를 판단하는 식별자로 사용할 수 있다고 설명합니다. 하지만 모든 피드가 안정적인 guid를 제공하는 것은 아니므로 정규화한 원문 URL도 함께 비교합니다. 추적 매개변수나 끝의 슬래시가 다른 주소를 같은 글로 볼지 규칙을 정하고, 제목만 같은 다른 글은 함부로 합치지 않습니다.

셋째는 주제 필터입니다. 제목 한 곳만 검사하면 중요한 글을 놓칠 수 있어 제목, 요약, 카테고리를 함께 봅니다. 반대로 단어 하나가 우연히 들어간 글까지 선택될 수 있으므로 허용 주제, 제외 주제, 출처 신뢰도, 최신성 조건을 조합합니다.

넷째는 사람 검토 대기열입니다. 원문 열기, 발행일 확인, 요약 수정, 출처 표시가 끝나야 발행 가능 상태로 바꿉니다. 이번 실습 화면은 이 네 단계가 순서대로 끝나도 “자동 발행 안 함” 상태를 유지하도록 만들었습니다.

직접 실행한 RSS 큐레이션 테스트

테스트 날짜: 2026년 9월 10일. 환경: Windows 11, Chrome 기반 브라우저, localhost 정적 웹 페이지. 입력: 발행일과 주제가 있는 정규화 샘플 5건, 중복 URL 1건, 포함 주제 “브라우저”. 기대 결과: 중복 1건을 제거하고 브라우저 주제 2건을 사람 검토 대기열에 표시.

샘플에는 브라우저 글 2건, 같은 URL의 중복 1건, 데이터 시각화 글 1건, AI 보안 글 1건을 넣었습니다. 실제 계정, 이메일, API 키, 유료 피드, 외부 AI 요청은 사용하지 않았습니다. 화면은 외부 API를 호출하지 않고 로컬 배열만 처리합니다.

시작 화면에서 주제 입력란, 실행 버튼, 초기화 버튼이 각각 하나인지 확인했습니다. 오른쪽 후보 영역은 0/5와 “아직 선택 전” 상태였고, 수집·중복 제거·주제 확인·사람 검토의 네 단계는 모두 대기 상태였습니다.

브라우저 주제가 입력되고 네 개 큐레이션 단계가 대기 중인 실제 시작 화면
브라우저 주제와 샘플 5건, 중복 1건이 표시되고 후보 영역은 0/5로 비어 있는 실제 시작 화면입니다.

“큐레이션 실행” 버튼을 누르자 5건 수집, URL 중복 1건 제거, 브라우저 일치 2건, 사람 검토 대기열 준비가 차례로 완료됐습니다. 최종 화면에는 서로 다른 URL의 후보 2건이 표시됐고, 첫 번째 원문 항목의 제목과 요약이 보존됐습니다.

중복 제거와 주제 필터 뒤 브라우저 관련 후보 두 건이 표시된 실제 결과 화면
5건 중 중복 1건과 다른 주제 2건을 제외해 브라우저 후보 2건을 사람 검토 대기열에 표시한 결과입니다.
수집, 주소 중복 제거, 주제 일치 확인, 사람 검토 대기열의 네 단계가 완료되는 3초 실제 작동 기록입니다.

같은 브라우저 세션에서 버튼 클릭 전후를 약 0.21초 간격으로 기록했습니다. 결과 영역의 후보 수는 2/5, 항목 수는 2개, 상태는 “2건 검토 대기”, 배지는 “자동 발행 안 함”이었습니다. 외부 요청이 없다는 안내 문구도 마지막에 확인했습니다.

중복 제거에서 첫 항목을 보존해야 했던 이유

초기 구현은 URL과 항목을 Map으로 바로 만들었습니다. 같은 URL이 다시 들어오면 뒤 항목이 앞 항목의 값을 덮어써 중복 표시용으로 만든 요약이 최종 후보에 남았습니다. 브라우저 결과에서 이 현상을 확인한 뒤 이미 본 URL은 건너뛰고 첫 항목을 유지하는 방식으로 바꿨습니다.

수정 전에는 후보 수가 2건이라 숫자만 보면 성공처럼 보였습니다. 하지만 첫 후보의 설명을 읽어 보니 “같은 주소로 다시 들어온 중복 항목”이라는 뒤쪽 데이터가 남아 있었습니다. 그래서 개수뿐 아니라 보존된 제목, URL, 요약까지 확인하는 검사를 추가했습니다.

운영 환경에서는 어느 항목을 보존할지 더 명확히 정해야 합니다. 원문이 업데이트되는 피드라면 최신 항목으로 바꿀 수도 있고, 처음 수집한 사본과 마지막 수정 시각을 별도로 저장할 수도 있습니다. 단순한 URL 중복과 내용 업데이트를 같은 규칙으로 처리하면 수정된 원문을 놓치거나 예전 요약을 덮어쓸 수 있습니다.

n8n에 옮길 때의 노드 구성

n8n 공식 RSS Read 문서는 인터넷에 공개된 RSS 피드 URL을 읽는 노드를 설명합니다. 실제 워크플로에서는 일정 트리거 다음에 출처별 RSS Read를 두고, 필드 정규화, 중복 확인, 주제 필터, 검토 저장소, 알림 순서로 연결할 수 있습니다.

중복 키는 우선 guid, 그다음 정규화 URL처럼 일관된 순서를 사용합니다. 이미 처리한 키는 데이터 저장소나 데이터베이스에 기록하고, 새 항목만 다음 단계로 보냅니다. 동시에 여러 실행이 일어날 수 있다면 “조회 뒤 저장” 사이의 경쟁을 막는 고유 제약이나 원자적 처리가 필요합니다.

필터를 통과한 항목은 바로 WordPress 발행 노드로 보내지 않습니다. 제목, 원문 URL, 출처명, 발행일, 원문 요약, 검토 상태를 저장하고 편집자에게 대기 항목을 알립니다. 검토자가 승인한 항목만 별도의 발행 워크플로가 읽도록 분리하면 실패와 오발행의 범위를 줄일 수 있습니다.

실패 분기도 필요합니다. 피드 요청 실패, 잘못된 XML, 날짜 해석 실패, 빈 링크, 지나치게 긴 본문, 동일 실행의 재시도 횟수를 기록합니다. TLS 검증을 끄는 옵션에 기대기보다 인증서 문제를 해결하고, 출처가 허용 목록에 있는지 확인합니다.

AI 요약은 편집 재료로만 사용한다

AI를 붙일 때는 원문 제목과 요약을 그대로 새 글로 포장하지 않습니다. 먼저 원문 URL과 발행일을 보존하고, 모델 입력에 섞일 수 있는 지시문을 신뢰하지 않으며, 출력 길이와 형식을 제한합니다. 생성된 요약에는 원문에 없는 숫자, 제품명, 날짜가 추가되지 않았는지 사람이 대조합니다.

큐레이션 글의 고유 가치는 여러 출처의 차이를 비교하거나 직접 시험한 결과를 더하는 데서 나옵니다. 예를 들어 같은 도구의 설치 방법이 운영체제별로 어떻게 다른지 실제 화면으로 검증하거나, 공식 문서의 변경 사항과 기존 글의 차이를 표로 정리할 수 있습니다. 출처 링크와 인용 범위를 분명히 하고 원문 전체를 복제하지 않습니다.

Google Search 스팸 정책은 사용자에게 가치를 더하지 않고 검색 순위를 조작할 목적으로 많은 페이지를 만드는 확장형 콘텐츠 악용을 경고합니다. 자동화 도구를 썼다는 사실 자체보다 독자가 얻는 고유한 정보와 제작 목적이 중요합니다. 수집된 모든 항목을 글 하나씩 자동 발행하는 방식은 피해야 합니다.

발행 전 사람이 확인할 여덟 가지

  1. 원문 URL이 열리고 출처가 신뢰할 수 있는가?
  2. 표시한 제목과 발행일이 원문과 일치하는가?
  3. 요약이 원문의 의미를 바꾸거나 과장하지 않았는가?
  4. 직접 검증한 내용과 출처에서 확인한 내용을 구분했는가?
  5. 사진, 표, 긴 문장을 허가 없이 복제하지 않았는가?
  6. 독자가 판단할 비교, 테스트, 한계가 추가됐는가?
  7. 내부 링크가 현재 공개된 관련 글로 연결되는가?
  8. 오류가 발견됐을 때 수정·취소할 기록과 담당자가 있는가?

이 체크를 모두 통과해도 모든 콘텐츠 정책과 저작권 조건이 자동으로 충족되는 것은 아닙니다. 피드 제공자의 이용 조건, 로봇 정책, 라이선스, 인용 범위를 별도로 확인해야 합니다. 제공된 요약이 있다고 해서 재배포 권한까지 주어진다고 단정할 수 없습니다.

테스트할 실패 조건

피드가 비어 있을 때는 빈 글을 만들지 말고 정상적인 “새 항목 없음” 상태로 끝냅니다. 같은 항목이 연속으로 들어오면 후보 수가 늘지 않아야 합니다. 주제 입력이 비어 있을 때 전체를 보여 줄지 실행을 막을지 정책을 정하고 화면 안내와 실제 동작을 맞춥니다.

날짜가 없거나 미래인 항목, 링크가 상대 주소인 항목, 제목에 HTML이 들어 있는 항목도 시험합니다. 화면에는 원문 문자열을 HTML로 삽입하지 않고 텍스트로 출력합니다. 긴 설명은 저장 한도와 화면 길이를 정하고, 정규화 실패 데이터는 원본과 오류 이유를 보관합니다.

자동화가 재시도될 때 같은 글이 두 번 발행되지 않도록 발행 원장을 사용합니다. 후보 승인과 발행 사이에 상태가 바뀌었는지 확인하고 하루 발행 한도도 둡니다. 실패 후 무조건 반복하기보다 네트워크, 인증, 데이터 형식 중 어느 조건이 달랐는지 기록합니다.

이번 실습의 한계

이 화면은 RSS XML을 네트워크에서 가져오는 운영 서비스가 아니라 이미 정규화한 로컬 샘플 다섯 건을 처리합니다. 실제 피드의 XML 네임스페이스, 문자 인코딩, 리다이렉트, 요청 제한, 인증, 시간대 차이는 다루지 않았습니다. 결과는 중복 제거와 주제 필터의 작은 동작 증거입니다.

n8n 노드 구성과 AI 요약 연결은 설계 설명이며 이 글의 화면 증거 범위는 로컬 큐레이션 페이지까지입니다. 운영 워크플로를 만들 때는 각 노드의 현재 공식 문서, 자격 증명 저장 방식, 실행 이력, 비용과 개인정보 처리 조건을 다시 확인해야 합니다.

주제 문자열 일치만으로 글의 품질이나 사실성을 판정할 수 없습니다. 다국어 표현, 동음이의어, 광고성 원문, 오래된 글을 거르려면 출처 정책과 편집 규칙이 더 필요합니다. 최종 책임은 자동 점수가 아니라 발행을 승인한 사람에게 있습니다.

결론: 자동화는 후보를 만들고 편집자가 발행한다

RSS 큐레이션의 안정적인 출발점은 많이 수집하는 기술보다 같은 글을 다시 내보내지 않는 규칙과 발행 전 검토입니다. 수집, 정규화, 중복 제거, 주제 필터, 사람 승인을 분리하면 어느 단계에서 문제가 생겼는지 설명하고 멈출 수 있습니다.

자동화 작업 자체를 실제 브라우저에서 검증하는 방법은 프롬프트로 타이머 웹앱을 만든 실전 기록에서 이어서 볼 수 있습니다. 사이트의 실험·출처·한계 표기 원칙은 소개 페이지에 정리했습니다.