소개
이전에 파이썬으로 뉴스 모니터링 자동화를 구현해본 적이 있습니다. 당시 어느 정도 기능 구현까지는 진행했지만, 계약 관련 이슈로 인해 끝까지 완성하지 못해 아쉬움이 있었습니다!
https://www.gpters.org/dev/post/automate-news-monitoring-python-rWEWRAi3Xkhs3fj
이번에 n8n을 스터디하면서 “어떤 사례를 만들어볼까?” 고민하던 중, 예전에 미완으로 남았던 그 프로젝트를 다시 떠올렸고,
“파이썬으로 처음부터 끝까지 직접 짜는 방식과 n8n을 활용하는 방식 사이에 어떤 차이가 있을까?” 하는 궁금증이 생겼습니다.
결과적으로, n8n으로 다시 구현해보니 코드를 일일이 작성하던 때와는 확실히 다른 접근을 경험하게 되어, 그 과정을 공유해보려 합니다.
진행 방법
0. Docker로 n8n 설치 및 로컬 환경 준비
Docker 이미지를 통해 로컬 환경에서 n8n 컨테이너를 구동합니다.
1. 뉴스 검색 & 크롤링 노드 구성 및 데이터 가공 / 스프레드시트 연동
게임 제작 과정을 보여주는 다이어그램
Manual Trigger로 시작하여 “검색어 및 파라미터 세팅”에서 키워드와 제외 언론사 등을 정의하고, “페이징 처리”로 필요한 뉴스 검색 페이지 수를 계산합니다.
Loop Over Items를 통해 각 페이지에 대해 “HTTP Request”로 뉴스 검색 결과 HTML을 받아오고, “뉴스 게시글 스크래핑” 노드에서 제목·URL·언론사·날짜 정보를 추출합니다.
“스크래핑한 글 json 형태로 리턴”으로 수집된 결과를 JSON 형태로 변환한 뒤, 다시 Loop 과정에 연결해 데이터 처리를 이어갑니다.
“Merge Node 파싱” 및 “제외할 언론사 필터링” 노드에서 설정된 언론사를 제외하고 최종 결과를 정리합니다.
마지막으로, Google Sheets 노드가 선별된 뉴스 데이터를 스프레드시트에 Append하여 저장합니다.
2. 기사 본문 추출 및 AI 분석
기계의 프로세스를 보여주는 다이어그램
When clicking ‘Test workflow’(Manual Trigger) → Google Sheets
워크플로우 시작 시, 스프레드시트에서 뉴스 목록(제목, URL 등)을 가져옵니다.
Loop Over Items → HTTP Request → HTML
가져온 뉴스 목록을 하나씩 순회하며, 각 기사 URL로 접속해 HTML을 받아온 뒤, 본문만 추출할 준비를 합니다.
AI Agent 1 - 기사 컨텐츠 반환
OpenAI Chat Model을 통해 광고·메뉴 등을 제외한 실제 기사 본문만을 추출하여 JSON 형태로 반환받습니다.
프롬프트
다음은 뉴스 기사 HTML 코드입니다. 이 중에서 뉴스 기사의 본문만 추출해주세요. 광고, 메뉴, 댓글, 공유 버튼 등은 포함하지 말고 실제 기사 내용만 반환해주세요.HTML 코드:{{ $json.content }}반환 형식:{"content": "본문 내용"}
AI Agent 2 - 기사 평가 + JSON 파싱
추출된 본문을 다시 AI에게 보내어 기사 유형/중요도/감성 분석을 수행하고, 결과를 JSON 파싱해 구조화합니다.
프롬프트
const prompt = `다음 뉴스 기사를 분석해주세요:본문:{{ $json.output }}다음 기준으로 분석해주세요:1. 기사 유형:- FINANCIAL: 슈로더 금융사 관련 기사- PERSONAL: 개인(CEO 등) 관련 기사- SPORTS: NBA 선수 슈로더 관련 기사- OTHER: 기타2. 중요도:- PRIMARY: 슈로더가 기사의 주요 주제- SECONDARY: 슈로더가 부차적 주제- MENTIONED: 단순 언급3. 감성 분석:- POSITIVE: 긍정적 내용- NEGATIVE: 부정적 내용- NEUTRAL: 중립적 내용JSON 형식으로 응답해주세요:{"article_type": "FINANCIAL/PERSONAL/SPORTS/OTHER","importance": "PRIMARY/SECONDARY/MENTIONED","sentiment": "POSITIVE/NEGATIVE/NEUTRAL"}
Merge + 데이터 파싱 및 에러 처리 → Google Sheets1
분석 결과와 기존 스프레드시트 데이터(행 번호 등)를 합친 뒤, 새로운 컬럼(기사 유형, 중요도, 감성)으로 스프레드시트를 업데이트합니다.