매일 아침 4대 국내 주요 신문사 뉴스 요약본을 메일로 받아보기

소개

지난 주, 저는 글로벌 뉴스와 매일경제신문 뉴스 요약본을 각각 이메일로 받는 자동화 사례를 발표 발표했습니다.
[지난주 베스트 발표 사례]

한국어 문자 메시지의 스크린 샷

이어, 이번에는 4대 국내 주요 신문사 뉴스의 요약과 링크를 하나의 이메일로 받아보는 심화 과제에 도전했습니다. 매일 아침 여러 사이트를 방문하는 비효율을 없애고 정보 과부하를 해결하는 것이 주된 목표였습니다. 이 과정에서 신문사마다 다른 데이터 형식과 웹사이트 차단 문제를 해결해야만 했습니다. 수많은 시행착오 끝에, 마침내 4개 신문사의 맞춤형 요약본을 단 한 통의 이메일로 받아보는 워크플로우를 완성했습니다.

진행 방법

1. 1차 시도 : 간단한 통합 처리 방식의 실패

📌 워크플로우 구성 (1차 시도)

1차 시도에는 다음과 같은 도구와 노드를 활용하여 단일 처리 흐름을 만들고자 했습니다.
Schedule Trigger: 원하는 시간에 워크플로우를 자동으로 시작(아침 8시)
RSS Read (x4): 4개 언론사의 RSS 피드를 동시에 수집
HTTP Request: (수정 시도) RSS에 내용이 없는 기사의 본문을 가져오기 위해 추가
Filter : 특정 조건을 설정, 조건을 통과하는 데이터만 다음 단계로 넘겨주는 역할
Basic LLM Chain & Google Gemini: 통합된 데이터를 AI를 통해 요약
Code: 데이터수 5개로 줄이고, HTML 형식으로 만들고, 데이터 합치기
Google Sheets: 이메일 수신자 목록 관리
Gmail: 최종 결과물 내용을 이메일로 발송

📈 진행했던 워크플로우 구성도 (1차 시도)

기계 학습 시스템의 흐름도

🛠️ 진행 방법 및 실패 원인 (1차 시도)

  • 데이터 통합 수집 (RSS Read & Merge): 4개 신문사의 RSS 피드를 RSS Read 노드로 각각 읽어온 뒤, code 노드를 이용해 통합하고자 했습니다.

  • 문제 발견 및 수정 시도 (HTTP Request 추가): 실행 결과, 일부 신문사(한국경제, 한겨레 등)의 RSS 피드에는 요약할 만한 텍스트가 전혀 없다는 사실을 발견했습니다. 이를 해결하기 RSS 다음에 HTTP Request 노드를 추가하여, 각 기사의 링크(link)에 직접 방문해 원문을 가져오는 '웹 스크래핑' 방식을 도입하려 했습니다.

  • 하지만 HTTP Request 노드는 대부분의 언론사 웹사이트에서 즉시 차단(403 Forbidden Error)되었습니다. User-Agent 헤더를 추가하는 등의 시도 없이는 자동화된 접근이 불가능하다는 것을 확인했습니다.

2. 2차 시도 : 합치지 못하고 개별 도착(실패)

📌 워크플로우 구성 (2차 시도)

2차 시도에는 다음과 같은 도구와 노드를 활용하여 단일 처리 흐름을 만들고자 했습니다.
Schedule Trigger: 원하는 시간에 워크플로우를 자동으로 시작
RSS Read (x2): 2개 언론사의 RSS 피드를 동시에 수집
HTTP Request: 네이버 뉴스의 API를 통해 뉴스 받아오는 역할
Split Out: 여러 기사 꾸러미를 풀어서 5개의 개별 기사 아이템으로 분리해 주는 역할
Basic LLM Chain & Google Gemini: 통합된 데이터를 AI를 통해 요약
Code: 데이터수 5개로 줄이고, HTML 형식으로 만들고, 데이터 합치기(제대로 작동 안함)
Gmail: 최종 결과물을 이메일로 발송

📈 진행했던 워크플로우 구성도 (2차 시도)

기계 학습 시스템의 흐름도

🛠️ 진행 방법 및 실패 원인 (2차 시도)

  • 1차 시도에서 얻은 교훈을 바탕으로 각 신문사의 RSS 피드 데이터 구조를 분석하여, 텍스트가 풍부한 '매일경제'와 '조선일보'는 RSS를 직접 활용하고,

  • 텍스트가 부족한 '한국경제'와 '한겨레'는 네이버 뉴스 API를 통해 데이터를 가져오도록 처리 방식을 이원화했습니다. 여기까지는 좋았습니다.

  • 2차 시도에서 '데이터를 합치는' 노드가 합치는 역할을 하지 않고, 도착하는 데이터마다 개별적으로 실행되었다. 개별로 요약문을 만들었지만 이 노드는 4개의 결과물을 기다렸다가 하나로 합치는 것이 아니라, 결과물이 도착할 때마다 한 번씩, 총 4번을 실행했습니다. 결과적으로 4개의 분리된 이메일이 만들어졌고, 각각의 이메일에는 신문사 하나의 내용만 담겨있습니다. Merge 노드나 Code 노드의 Run Once for All Items 모드 등 다양한 방법을 시도했지만, 이 노드들이 '기다렸다가 합치는' 동기화 기능을 제대로 수행하지 못하고 각자 실행되어 버린 것이 실패 원인입니다.

3. 3차 시도 : 직렬방식으로 결과물 누적시켜 성공

🛠️ 진행 방법 및 성공 원인 (3차 시도 - 성공)

📌 워크플로우 구성 (3차 시도)

  • Schedule Trigger, RSS Read, HTTP Request, Basic LLM Chain & Google Gemini, Google Sheets, Gmail

  • Code1,2,3,4: 각 신문사별 요약 결과를 HTML 형식으로 만들며, 이전 단계의 결과물에 새로운 결과물을 누적시키는 핵심적인 역할을 수행했습니다.

📈 진행했던 워크플로우 구성도 (3차 시도 - 성공)

프로세스의 흐름도
  • Code1에서 전달받은 내용(previousHtml) 뒤에 Code2에서 새로 만든 자신의 결과물(html)을 덧붙여서(+), 더 길어진 바통을 다음 주자(혹은 결승선)로 넘겨주는 것이 핵심입니다.

한국 컴퓨터 화면의 스크린 샷

[ 아침에 도착한 4개 신문 요약과 링크 ]

한국 웹 사이트의 스크린 샷

※ n8n 뉴스 수집 3가지 방법 비교
여러 신문사의 뉴스를 가져올 때, 어떤 방법을 사용하느냐에 따라 설정법과 데이터의 특징이 다름

1. RSS: 가장 쉽고 정확한 '직접 구독' (매일경제신문, 조선일보)
* 작동 방식: 각 신문사의 공식 채널(RSS)을 직접 구독하여 정보를 받는 방식.
* n8n 설정: RSS Feed Read 노드에 RSS 주소만 넣으면 끝나므로 매우 간단함.
* 핵심 특징: 해당 신문사 기사만 100% 들어와 데이터가 가장 정확하고 깔끔함.

2. News API: 똑똑한 '뉴스 전문 비서' (글로벌 뉴스)
* 작동 방식: 전 세계 뉴스를 수집하는 전문 데이터 회사의 'API 키'를 가지고 원하는 뉴스를 요청해서 받는 방식.
* n8n 설정: HTTP Request 노드를 사용하며, 서비스 가입 후 받은 'API 키'가 필요함.
* 핵심 특징: 키워드, 국가 등 다양한 조건으로 뉴스를 검색할 수 있어 기능이 강력함.

3. 네이버 뉴스 API: 편리한 '포털 검색 대행' (한국경제신문, 한겨레)
* 작동 방식: 네이버 포털에 특정 키워드(예: '한겨레')로 뉴스를 '검색'해서 결과 받음.
* n8n 설정: HTTP Request 노드와 네이버에서 발급받은 'API 키'가 필요함.
* 핵심 특징: RSS가 막힌 언론사의 기사를 가져올 수 있는 좋은 대안이지만, 검색 결과이므로 불필요한 기사가 섞일 수 있음. 따라서, 원하는 기사만 골라내는 별도의 필터링 작업이 필요함.
아래 네이버 개발자 센터(https://developers.naver.com/main/)에서 네이버 뉴스API 발급받아야 함.

결과와 배운 점

결과

수많은 시행착오 끝에, 매일 아침 지정된 시간에 4개 신문사의 최신 뉴스 각 5개를 AI로 요약하고, 깔끔하게 정리된 하나의 이메일로 받아보는 자동화 워크플로우를 완성했습니다.

배운 점

  • 데이터 소스를 분석하는 것이 먼저다 : 자동화 설계를 시작하기 전에, 내가 사용할 데이터(RSS, API)의 구조와 제약 조건을 명확히 파악하는 '정찰' 과정이 가장 중요합니다.

  • 하나의 방법론을 고집하지 마라 : 모든 데이터 소스에 맞는 '만능 열쇠'는 없습니다. 각 소스의 특성에 맞춰 RSS, API, 웹 스크래핑 등 다양한 방법을 조합하는 유연성이 필요합니다.

  • 가장 확실한 방법은 '직렬 처리'다 : 여러 단계에 걸쳐 데이터를 누적하거나 가공해야 할 때, 한 단계의 결과물이 다음 단계의 입력이 되도록 의존성을 만들어주는 직렬(순차) 방식이 가장 안정적이고 예측 가능합니다.

  • AI(Gemini)는 훌륭한 페어 프로그래머다 : 복잡한 코드 작성이나 에러 발생 시, 문제를 구체적으로 설명하고 Gemini에게 계속 질문하며 답을 찾아가는 과정이 매우 중요했습니다. 막혔을 때 포기하지 않고 계속 대화하며 수정하는 반복적인 과정이 없었다면 이 워크플로우는 완성되지 못했을 것입니다.

도움 받은 글 (옵션)

  • 매번 스터디에 참석하면서 스터디장님(멍멍님, 올마이티님)과 스터디원 여러분들의 열정이 자극이 되어 저도 분발했습니다. 감사합니다.

3
2개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요