n8n은 시각적 노드 연결만으로 복잡한 자동화를 구현할 수 있는 노코드 도구예요. RSS 피드를 읽어 AI로 요약하고 슬랙으로 전송하는 워크플로를 만들면, 매일 아침 관심 키워드의 최신 뉴스를 편하게 받아볼 수 있어요.
macOS에서 n8n 설치하기
터미널을 열고 Homebrew로 Node.js를 먼저 설치해요. n8n은 Node.js 기반이라 이 과정이 필수예요.
brew install node
npm install n8n -g
n8n start
브라우저에서
http://localhost:5678
로 접속하면 n8n 대시보드가 나타나요. 첫 실행이라면 계정을 만들고 로그인해요.
슬랙 앱 생성과 Bot 토큰 발급
슬랙 API 페이지(api.slack.com)에서 새 앱을 만들어요. OAuth & Permissions 메뉴로 가서 Bot Token Scopes에
chat:write
와
channels:read
권한을 추가해요.
xoxb-1234567890-1234567890123-abcdefghijklmnopqrstuvwx
Install to Workspace 버튼을 눌러 설치하면 위와 같은 형태의 Bot User OAuth Token이 발급돼요. 이 토큰은 n8n에서 슬랙 연동할 때 필요하니 안전하게 보관해요.
구글 뉴스 RSS 피드 URL 만들기
구글 뉴스는 키워드별로 RSS 피드를 제공해요. 원하는 키워드를 넣어 URL을 만들 수 있어요.
https://news.google.com/rss/search?q=인공지능&hl=ko&gl=KR&ceid=KR:ko
https://news.google.com/rss/search?q=자동화&hl=ko&gl=KR&ceid=KR:ko
https://news.google.com/rss/search?q=노코드&hl=ko&gl=KR&ceid=KR:ko
q= 뒤에 원하는 키워드를 넣으면 돼요. 여러 키워드를 추적하려면 각각의 URL을 만들어 사용해요.
n8n 워크플로 구성하기
n8n 대시보드에서 새 워크플로를 만들고 노드들을 추가해요. 전체 흐름은 스케줄 트리거에서 시작해 RSS 읽기, AI 요약, 슬랙 전송 순서로 진행돼요.
Schedule Trigger 노드 설정
왼쪽 패널에서 Schedule Trigger를 드래그해 캔버스에 놓아요. 노드를 더블클릭하고 다음과 같이 설정해요.
{
"mode": "everyDay",
"hour": 8,
"minute": 0,
"triggerOnWeekends": true
}
매일 오전 8시에 워크플로가 자동 실행되도록 설정했어요. 주말 실행 여부는 필요에 따라 조정할 수 있어요.
RSS Feed Read 노드 추가
RSS Feed Read 노드를 추가하고 구글 뉴스 RSS URL을 입력해요. 여러 키워드를 처리하려면 노드를 여러 개 만들거나 Function 노드로 동적 처리할 수 있어요.
// Function 노드에서 여러 RSS 피드 처리
const keywords = ['인공지능', '자동화', '노코드'];
const items = [];
for (const keyword of keywords) {
const url = `https://news.google.com/rss/search?q=${encodeURIComponent(keyword)}&hl=ko&gl=KR&ceid=KR:ko`;
items.push({
json: {
keyword: keyword,
rssUrl: url
}
});
}
return items;
HTTP Request로 RSS 데이터 가져오기
각 RSS URL에서 실제 데이터를 가져오려면 HTTP Request 노드를 사용해요. XML 파싱이 필요하므로 Response Format을 'String'으로 설정해요.
{
"method": "GET",
"url": "={{$json.rssUrl}}",
"responseFormat": "string",
"options": {
"timeout": 10000
}
}
XML to JSON 노드로 파싱하기
RSS는 XML 형식이라 JSON으로 변환이 필요해요. XML 노드를 추가하고 Mode를 'XML to JSON'으로 설정해요.
파싱된 데이터에서 뉴스 아이템을 추출하려면 Set 노드를 사용해요.
// Set 노드의 JavaScript Code
const items = $json.rss.channel[0].item || [];
return items.slice(0, 5).map(item => ({
title: item.title[0],
link: item.link[0],
description: item.description[0],
pubDate: item.pubDate[0],
keyword: $node["Function"].json.keyword
}));
OpenAI API로 뉴스 요약하기
각 뉴스 기사를 AI로 요약하려면 OpenAI API를 활용해요. HTTP Request 노드로 GPT-3.5나 GPT-4를 호출할 수 있어요.
{
"method": "POST",
"url": "https://api.openai.com/v1/chat/completions",
"authentication": "genericCredentialType",
"genericAuthType": "httpHeaderAuth",
"sendHeaders": true,
"headerParameters": {
"parameters": [
{
"name": "Authorization",
"value": "Bearer sk-your-openai-api-key"
}
]
},
"sendBody": true,
"bodyParameters": {
"parameters": [
{
"name": "model",
"value": "gpt-3.5-turbo"
},
{
"name": "messages",
"value": [
{
"role": "system",
"content": "뉴스를 3문장으로 간단히 요약해주세요."
},
{
"role": "user",
"content": "={{$json.title}} - {{$json.description}}"
}
]
},
{
"name": "temperature",
"value": 0.7
},
{
"name": "max_tokens",
"value": 150
}
]
}
}
API 응답에서 요약 텍스트를 추출하려면 다음 표현식을 사용해요.
{{$json.choices[0].message.content}}
슬랙 메시지 포맷 만들기
Set 노드로 슬랙에 보낼 메시지를 예쁘게 포맷팅해요. 마크다운을 활용하면 가독성이 좋아져요.
// 슬랙 메시지 포맷
const formatMessage = (item, summary) => {
return {
text: `📰 *[${item.keyword}] ${item.title}*\n\n` +
`📝 *요약*: ${summary}\n\n` +
`🔗 *원문*: ${item.link}\n` +
`📅 *발행일*: ${new Date(item.pubDate).toLocaleString('ko-KR')}\n` +
`─────────────────────`
};
};
Slack 노드 설정과 메시지 전송
Slack 노드를 추가하고 OAuth2 인증을 설정해요. 발급받은 Bot User OAuth Token을 입력하고 채널을 선택해요.
{
"authentication": "oAuth2",
"resource": "message",
"operation": "post",
"channel": "#news-summary",
"text": "={{$json.text}}",
"as_user": false,
"username": "뉴스봇",
"icon_emoji": ":newspaper:"
}
에러 처리와 Rate Limit 관리
API 호출이 많을 때는 Wait 노드로 속도를 조절해요. OpenAI API는 분당 호출 제한이 있어서 적절한 딜레이가 필요해요.
// Wait 노드 설정
{
"amount": 2,
"unit": "seconds"
}
에러가 발생했을 때 슬랙으로 알림을 받으려면 Error Trigger를 활용해요.
// 에러 처리 Function 노드
if ($json.error) {
return [{
json: {
text: `⚠️ 뉴스 요약 중 오류 발생\n에러: ${$json.error.message}`,
channel: "#news-summary"
}
}];
}
실제 워크플로 동작 흐름
완성된 워크플로는 매일 아침 8시에 자동으로 실행돼요. 각 키워드별로 최신 뉴스 5개를 가져와 AI로 요약한 뒤 슬랙 채널에 순차적으로 전송해요.
메시지 사이에는 2초 간격을 두어 슬랙 Rate Limit을 피하고, 전체 처리 시간은 키워드 3개 기준으로 약 2-3분 정도 걸려요.
워크플로 개선 아이디어
중복 뉴스를 필터링하려면 이전에 전송한 링크를 저장하고 비교하는 로직을 추가할 수 있어요. n8n의 Static Data 노드나 외부 데이터베이스를 활용하면 돼요.
// 중복 체크 로직
const sentLinks = $getWorkflowStaticData('global').sentLinks || [];
const newItems = items.filter(item => !sentLinks.includes(item.link));
// 전송 후 저장
sentLinks.push(...newItems.map(item => item.link));
$getWorkflowStaticData('global').sentLinks = sentLinks.slice(-100); // 최근 100개만 유지
특정 키워드를 제외하거나 신뢰도 높은 언론사만 필터링하는 기능도 추가할 수 있어요. Function 노드에서 정규식이나 조건문으로 구현하면 돼요.
노코드 도구의 장점은 이런 복잡한 로직도 시각적으로 쉽게 구현할 수 있다는 점이에요. 코딩 지식이 없어도 노드를 연결하고 설정값만 입력하면 강력한 자동화 시스템을 만들 수 있어요.
트러블슈팅 팁
슬랙 연동이 안 될 때는 Bot Token의 권한을 다시 확인해요. chat:write 권한이 없으면 메시지 전송이 실패해요.
RSS 피드가 비어있다면 키워드를 영어로 바꿔보거나 다른 뉴스 소스를 시도해요. 네이버 뉴스나 다음 뉴스도 RSS를 제공하니 대체 가능해요.
OpenAI API 비용이 부담된다면 무료 대안인 Hugging Face의 요약 모델을 사용할 수 있어요. HTTP Request 노드의 엔드포인트만 변경하면 돼요.
n8n 클라우드 버전을 사용하면 로컬 설치 없이 바로 시작할 수 있어요. 월 20유로부터 시작하는 유료 플랜이지만, 안정적인 운영이 가능해요.