[LLM 경제 뉴스 요약 서비스] # 01. n8n 워크플로우 구축 (n8n 사용법)
2025. 12. 18. 01:40ㆍProgramming/Project
요즘 투자에 대한 관심과 AI 서비스 개발에 대한 관심으로
[경제 뉴스 요약 + 워런버핏 챗봇 상담] 서비스를 개발해 보려 합니다.
경제 뉴스 요약 ⇒ RAG 기반 워런버핏 챗봇 상담 순으로 진행할 예정이고,
1차 목표는 다음과 같습니다.
경제 뉴스 요약 1차 MVP 목표
n8n | 매일 경제 뉴스 수집(RSS) - LLM 요약 - DB 적재 호출 ⇒ Docker ⇒ 배포(eks)
FastAPI | 요약 내용 DB post/get ⇒ Docker ⇒ 배포(eks)
여기서, n8n이란?
맞춤형 워크플로를 만들 수 있는 노코드 워크플로우 자동화 플랫폼입니다.
노드라는 개념의 일련의 작업들을 조합하여 워크플로우를 구축하게 됩니다.
※ 노드 : 이메일 전송, 스프레드시트 업데이트, 애플리케이션 프로그래밍 인터페이스(API)에서 데이터 가져오기와 같은 특정 작업
※ 이 노드들의 조합 = 워크플로우
특히 노드들은 시각적 인터페이스를 통해 구성되어 별도의 커스텀 코드를 작성하지 않고도 손쉽게 워크플로우를 구축할 수 있는 도구입니다.
그래서 워크플로우 Poc를 빠르게 검증할 수 있는 도구라 판단했고,
n8n으로 구축 후 기능 고도화 단계에서는 airflow와 같은 도구로 마이그레이션을 고려하고 있습니다.
n8n 시작하기
n8n Docker 세팅
n8n 이미지와 설정들을 받을 도커 볼륨을 생성하고,
실행을 통해 저장소에서 데이터를 pull 받아주는 명령어입니다.
docker volume create n8n_data
docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
실행 결과
(base) ➜ ~ docker run -it --rm \
--name n8n \
-p 5678:5678 \
-e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true \
-e N8N_RUNNERS_ENABLED=true \
-v n8n_data:/home/node/.n8n \
docker.n8n.io/n8nio/n8n
Unable to find image 'docker.n8n.io/n8nio/n8n:latest' locally
latest: Pulling from n8nio/n8n
6b59a28fa201: Pull complete
...생략
Editor is now accessible via:
http://localhost:5678
Press "o" to open in Browser.
해당 로컬 주소로 접속하면 아래와 같은 n8n이 호스팅 된 걸 확인할 수 있습니다.
로그인 후 좌측 패널 + 버튼을 통해 새로운 워크플로우를 생성하면 됩니다.

n8n 워크플로우 구축

저는 [트리거 - 경제 뉴스 RSS 수집 - 배치(중복제거-기사 내용 추출 - LLM 요약 - 데이터 포맷팅 - 적재)] 순으로
워크플로우를 구축했습니다.
하나씩 살펴보겠습니다.
1. 트리거 노드

먼저 오전 9시로 트리거 노드를 추가했습니다.
2. 경제 뉴스 RSS 피드 수집 노드
이제 경제 뉴스 데이터를 수집해야 하는데,
저는 간단하게 매일 경제에서 제공하는 rss를 활용했습니다.
RSS - 매일경제
매일경제의 다양한 정보와 뉴스를 RSS 로 제공
www.mk.co.kr
카테고리별로 분류되어 있고,
저는 증권 파트만 먼저 진행해 봤습니다.
n8n에서 제공되는 RSS Read 노드를 추가하고, url을 입력하면 json 형식으로 뽑아줍니다.

3. Loop Over Item
이전 노드에서 50개가 추출되지만 1개씩 배치처리를 위해 Loop Over Item 노드를 추가하고,
batch size는 1로 지정했습니다.
4. 중복 제거 (생략 가능)
중복 데이터를 처리하기 위해 Code 노드를 통해 중복 체크를 해줬습니다.

const data = $getWorkflowStaticData('global');
data.seen = data.seen || {};
const url = $json.link || $json.url;
if (!url) return {};
if (data.seen[url]) {
return {}; // 중복이면 drop
}
data.seen[url] = true;
return { json: $json };
5. 기사 내용 추출
RSS 피드로 제공되는 데이터에는 기사 전문이 없어
1) HTTP Request 노드로 링크에 접속 후 HTML 추출
2) HTML 노드(extract HTML content)로 HTML element에서 title과 content를 추출했습니다.
뉴스 카테고리마다 다르지만, 기사 제목과 내용을 식별하는 classname을 제공하고 있습니다.
증권의 경우 기사 내용(.sec_body), 기사 제목(.news_ttl)으로 추출가능 합니다.


6. LLM 연결
저는 openAI 노드를 연결해서 요약 데이터를 생성했습니다.
프롬프트는 아래와 같이 지정해서, 이전 노드의 데이터를 넘겨줬습니다.
너는 경제 뉴스 요약기야. 아래 기사를 한국어로 간결하게 요약해줘.
[요약 규칙]
1) 1줄 요약
2) 핵심 키워드 3개 뽑아서 **핵심 키워드**: 키워드1, 키워드2, 키워드3 형식으로 요약해
3) 과장/추측 금지, 기사에 있는 사실만
4) 투자 추천/매수·매도 조언 금지
[기사 제목]
{{$json.title}}
[기사 본문]
{{$json.content}}

7. 데이터 포맷팅
LLM 요약 결과는 text라는 키값의 문자열로 넘어오기 때문에
Code 노드를 추가해 summary와 keywords를 따로 포맷팅 했습니다.
// 1. Gemini/OpenAI 응답에서 텍스트 꺼내기
const text =
$json.output?.[0]?.content?.[0]?.text
?? $json.text
?? '';
// 2. "핵심 키워드" 기준으로 분리
let summary = text;
let keywords = [];
if (text.includes('핵심 키워드')) {
const parts = text.split('**핵심 키워드**:');
summary = parts[0].trim();
keywords = parts[1]
?.replace(/\n/g, '')
.split(',')
.map(k => k.trim())
.filter(Boolean) || [];
}
// 3. 결과 정리해서 반환
return {
json: {
summary,
keywords
}
};
8. 데이터 적재
이번에는 검증 용도로 구글 시트에 저장했습니다.
1) Append row in sheet 노드 추가
2) 구글 클라우드 API 설정에서 Oauth 클라이언트 ID와 key를 생성한 뒤 인증을 연결
https://docs.n8n.io/integrations/builtin/credentials/google/oauth-single-service/#enable-apis
3) 대상 문서와 sheet 지정
4) Map Automatically로 설정해 input 형식에 맞춰 자동으로 column을 생성해 줍니다

다음 포스팅에서는 FastAPI를 활용해 DB에 요약 결과를 저장하는 인터페이스를 개발할 예정입니다.
n8n 자체에서도 postgreSQL에 접근할 수 있지만,
향후 서비스화 되었을 때에는 DB에 접근하는 주체가 분산되지 않는 것이 좋겠다 판단해 n8n에서는 DB접근 대신 API를 호출하도록 설계했습니다.
이제 완성된 워크플로우를 execute 해보면,
정상적으로 데이터가 적재되는 걸 확인해 볼 수 있습니다.

다음 포스팅에서는,
DB POST/GET을 연결해 보겠습니다.
간단 회고
아무래도 고도화 단계에서는 에러처리와 함께 유의미한 데이터가 되도록 프롬프트 디자인과 카테고라이징을 해봐야겠어요.
그래도 워크플로우 구축이 생각보다는 수월해서 기분이 좋았습니다..ㅎ
이렇게 코드 몇 줄로 기능이 구현되는 게 재밌으면서도 개발자로서 무섭기도 하네요^ㅠ
ETL 관련해서 좀 더 깊게 이해해 보고자 airflow도 얼른 공부해보고 싶네요
참고 문서
- https://www.gpters.org/nocode/post/every-day-making-automated-o7sMruc2uduvis8
- https://www.hostinger.com/kr/tutorials/what-is-n8n#:~:text=n8n%EC%9D%80%20%EC%9B%8C%ED%81%AC%ED%94%8C%EB%A1%9C%20%EC%9E%90%EB%8F%99%ED%99%94%20%EB%8F%84%EA%B5%AC%EB%A1%9C%2C%20%ED%8C%80%EC%9D%B4%20%EB%A7%A4%EC%9D%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EB%8A%94,%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC%20%EC%9D%B4%EB%8F%99%ED%95%98%EA%B1%B0%EB%82%98%20%EC%9E%91%EC%97%85%EC%9D%84%20%EC%98%88%EC%95%BD%ED%95%A0%20%EC%88%98%20%EC%9E%88%EA%B2%8C%20%ED%95%B4%EC%A4%8D%EB%8B%88%EB%8B%A4.
- https://docs.n8n.io/hosting/
'Programming > Project' 카테고리의 다른 글
| [LLM 경제 뉴스 요약 서비스] # 06. React/Next js로 프론트엔드 구축 with 모노레포 (0) | 2026.01.27 |
|---|---|
| [LLM 경제 뉴스 요약 서비스] # 05. N8N 배포 (ECR, ECS) (0) | 2026.01.19 |
| [LLM 경제 뉴스 요약 서비스] # 04. 서버 CI/CD (ECR, ECS) (0) | 2026.01.17 |
| [LLM 경제 뉴스 요약 서비스] # 03. FastAPI 서버 배포 (ECR, ECS) (0) | 2026.01.07 |
| [LLM 경제 뉴스 요약 서비스] # 02. FastAPI + PostgreSQL로 데이터 적재 REST API 구축 (0) | 2026.01.03 |