소개
이전에 파이썬으로 뉴스 모니터링 자동화를 구현해본 적이 있습니다. 당시 어느 정도 기능 구현까지는 진행했지만, 계약 관련 이슈로 인해 끝까지 완성하지 못해 아쉬움이 있었습니다!
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
분석 결과와 기존 스프레드시트 데이터(행 번호 등)를 합친 뒤, 새로운 컬럼(기사 유형, 중요도, 감성)으로 스프레드시트를 업데이트합니다.
결과와 배운 점
장점
GUI 구현이나 스프레드시트 연동처럼 귀찮은 작업을 모두 직접 처리해야 했던 기존 파이썬 방식과 달리, n8n에서는 노드를 연결하는 것만으로 같은 과정을 훨씬 간편하게 구성할 수 있었습니다.
크롤링부터 분석, 데이터 정리, 스프레드시트 기록까지 시각적으로 확인하며 설정할 수 있어, 유지보수와 확장이 한결 쉬워졌습니다.
특히 파이썬으로 구현하면 종종 생기는 버전 충돌, 라이브러리 세팅 문제 등도 크게 신경 쓰지 않아도 되어, 전체 개발 과정이 매우 가벼워졌다는 느낌을 받 았습니다.
단점
이 부분은 대부분은 제가 n8n을 처음 써보기 때문에 겪었던 문제 입니다.
노드별 동작 이해가 필요
코드로 직접 짜는 경우엔 원하는 흐름을 자유롭게 제어할 수 있지만, n8n에서는 특정 기능을 하려면 Edit Field, Merge, Loop 노드의 쓰임새와 제약을 먼저 이해해야 해서 초반에 배워야 할 것이 많았습니다.
에러 처리 및 데이터 흐름 제어가 다소 까다로움
예를 들어, 특정 루프(Loop Over Items) 뒤에 Edit Field 노드에서 정의된 파라미터를 어떻게 전달해야 할지 몰라서 한참 고민했고, 결국 Merge 노드를 사용해 해결했습니다.
뉴스 게시글을 가져오다가 발생한 에러를 중간에 무시하거나 특정 로직으로 분기 처리하는 부분도 Python 코드보다 직관성이 떨어진다고 느꼈습니다.
문서 의존도 증가
“어떤 노드가 어떤 파라미터를 받는지”, “어떤 포맷으로 연결되는지” 등을 정확히 이해하려면 n8n 공식 문서를 참고해야 하는 경우가 많았습니다.
처음 쓰는 사람에게는 즉각적으로 “어디에 어떤 노드를 넣어야 하는지” 감이 오지 않아, 다소 막막할 수 있다는 점이 아쉬웠습니다.
가장 좋았던 점!!
각 언론사별 구조 파악 없이도 기사 본문을 추출할 수 있었다는 점이 가장 인상적이었습니다.
원래라면 언론사마다 HTML 구조를 분석해 각기 다른 CSS 선택자를 하나하나 지정해야 하는데, AI Agent가 “광고·메뉴 등을 제외한 실제 기사 본문만 추출”하도록 한 큐에 처리해준 덕분에, 여러 언론사를 커버하는 통합 크롤링이 훨씬 수월해졌습니다.
이 과정을 직접 파이썬으로 구현했다면, 언론사별로 파싱 로직을 따로 작성해야 해 유지보수나 추가 확장 시 매우 번거로웠을 텐데, AI를 활용하니 그런 수고를 크게 덜 수 있었습니다.
개선할 점
각 노드 최적화
현재는 기능 구현에 초점을 맞추었지만, 워크플로우 내 불필요한 노드를 줄이거나 데이터 흐름을 단순화해 속도와 가독성을 높일 수 있을 것 같습니다.
에러 처리 강화
루프 중간에 발생하는 HTTP Request 실패나 HTML 파싱 오류 등에 대한 대처가 필요합니다
호스팅
로컬 환경에서 돌리는 걸 배포해서 실제 사용할 수 있는 제품으로 만들고 싶습니다.
토큰 사용량 체크 및 모델 교체
현재는 무지성으로 4o-mini 모델을 사용중인데 다른 모델로 교체를 하거나 토큰 사용량을 좀 체크해서 비용을 체크하고 좀 더 비용을 줄여보고 싶습니다.
도움 받은 글
https://docs.n8n.io/?utm_source=n8n_app&utm_medium=app_sidebar