소개
지난 주, 저는 글로벌 뉴스와 매일경제신문 뉴스 요약본을 각각 이메일로 받는 자동화 사례를 발표 발표했습니다.
[지난주 베스트 발표 사례]
이어, 이번에는 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모드 등 다양한 방법을 시도했지만, 이 노드들이 '기다렸다가 합치는' 동기화 기능을 제대로 수행하지 못하고 각자 실행되어 버린 것이 실패 원인입니다.