May 16, 2025

n8n #2 개인 맞춤 기사 요약 자동화

n8n #2  개인 맞춤 기사 요약 자동화

최신 IT 기사 Slack 알림

IT는 최신 트랜드를 계속 찾고 알아야 한다고 하지만, 매번 찾아보고 하기 귀찮죠.
정리해주는 사이트가 있다고 해도 들어가서 보는 것도 힘들고, 기사들 다 읽어보는 것도 힘들죠.

그래서 누군가 최신 기사들을 정리해주고 필요한 것만 추려서 알림을 주면 좋겠다고 생각했죠. 이제 LLM이 기사들을 추리고 요약해주는 방법까지 할 수 있습니다.

데이터 가져오기

RSS를 기본적으로 제공해주는 사이트는 쉽게 사용할 수 있습니다.
Geeknews나 line의 techblog 등 RSS를 제공해주는 곳은 RSS Node를 이용해서 정보를 가져와서 배열에서 제목, 기사링크, 올린 날짜만 가져옵니다.

  1. RSS로 배열 가져오기
  2. 가져온 배열에서 필요한 정보만 거르기

하지만 RSS를 제공하지 않는 곳이 많아요. Google도 그렇고 요즘에는 제공하지 않는 추세에요. 그래서 사이트를 직접 확인하고 최신 글을 확인하고, 직접 데이터를 가져오는 것이죠.

  1. 글 목록 페이지를 가져옵니다.
  2. 가장 최신 기사를 가져옵니다.
  3. 최신 기사가 오늘자 기사라면 가져옵니다.
  4. 오늘자 기사를 가져옵니다.
  5. RSS에서 가져왔듯이 제목,기사링크, 날짜만 가져옵니다.

데이터 정리 & AI 출력

  1. 각 site에서 뽑은 데이터 목록을 합치고, 데이터를 정리합니다.
  2. 정리된 data list를 AI에 프롬프트와 같이 요청을 보냅니다.
    1. 프롬프트 : 제가 IT 기사 리스트를 드릴테니 인프라 엔지니어에게 가장 적합하고 중요한 10~20개의 기사를 가져옵니다. 이해하기 쉽게 기사 제목을 작성합니다. 반드시 JSON형식으로 출력합니다: {"article":"","link":"","summary":""}"

Slack 출력

JSON 형식으로 받은 출력값을 정리해서 Slack에 보냅니다.

출력 저장

나중에 AI와 대화에서 사용하기 위해 채팅 값을 저장합니다.

전체 구조

주의점

JSON 형식으로 출력하라고는 했지만, 항상 같은 형식으로 출력하지는 않습니다.
```{}``` 형식으로 출력하기도 하고, 그 외에 ", ' 같은 따옴표나 그 외의 기호들 때문에 많은 골치가 있었습니다. 그래서 Code에서 JS 로 최대한 해보지만, 원하는 값이 나올 때까지 AI를 다시 돌리는 것이 낫습니다.

let input = $input.first().json.choices[0].message.content;

if (input.startsWith('```')){
  input = input.slice(7).trim();
}
if (input.endsWith('```')) {
  input = input.slice(0, -3).trim();
}

let articlesArr;
try {
  const parsed = JSON.parse(input);
  // articles 배열이 있으면 추출
  if (Array.isArray(parsed)) {
    articlesArr = parsed;
  } else if (Array.isArray(parsed.articles)) {
    articlesArr = parsed.articles;
  } else {
    throw new Error('No articles array found');
  }
} catch (e) {
  // NDJSON 등 기타 포맷 처리 (필요시)
  articlesArr = input
    .split('\n')
    .filter(line => line.trim().startsWith('{'))
    .map(line => JSON.parse(line));
}

// 이제 articlesArr는 [{article:"", link:""}, ...] 배열
return articlesArr.map(article => ({ json: article }));

Comments