6강

네이버 뉴스 자동 요약 & 시트 저장

시나리오 — 네이버 IT/과학 기사 자동 정리

매일 아침 네이버 뉴스 IT/과학 카테고리에 올라오는 기사들을 사람이 하나하나 열어보지 않고, AI Agent 두 개 로 자동 수집·요약해서 구글 시트에 쌓아두는 워크플로우를 만듭니다.

  • Agent 1 (수집) — 네이버 뉴스 목록 페이지 HTML 을 가져와 기사 목록(title · link · publishedAt) JSON 을 만듦
  • Code 노드 — Agent 가 돌려준 문자열을 실제 JSON 배열로 파싱
  • Split Out — 배열을 아이템 여러 개로 분해
  • Loop Over Items — 기사 하나씩 순차 처리 (한 번에 다 처리하면 컨텍스트 초과)
  • Agent 2 (요약) — 각 기사 상세페이지를 다시 HTTP 로 열어 본문 요약
  • Google Sheets Tool — 결과를 시트에 Append
💡
이 예제의 진짜 학습 포인트는 "AI 가 한 번에 너무 많은 걸 처리하려다 실패하는 상황" 을 만나고, 이걸 Split Out + Loop 로 해결하는 실전 트러블슈팅입니다. 뒤쪽 15~18번 스텝을 반드시 끝까지 따라오세요.

네이버 IT/과학 > 모바일 카테고리 URL 확보

먼저 크롤링 대상 페이지를 정합니다. 네이버 뉴스 상단 카테고리에서 IT/과학 을 클릭하면 https://news.naver.com/section/105 로 이동합니다. 105 는 IT/과학 대분류 코드.

① IT/과학 진입 — https://news.naver.com/section/105
① IT/과학 대분류 URL (진입용)
https://news.naver.com/section/105

IT/과학 안에서 다시 모바일 세부 카테고리로 들어가면 URL 이 https://news.naver.com/breakingnews/section/105/731 로 바뀝니다. 731 이 모바일 세부 코드. 강의에서는 이 모바일 페이지 를 실제 크롤링 대상으로 사용합니다.

② IT/과학 > 모바일 — 이 URL 을 크롤링에 사용
② IT/과학 · 모바일 URL (크롤링 대상)
https://news.naver.com/breakingnews/section/105/731
💡
다른 카테고리를 원하면 대분류 코드(105) / 세부 코드(731) 두 숫자만 바꾸면 됩니다. 예) 경제 = 101, IT/과학 = 105, 세계 = 104 …

HTTP Request 노드 추가

새 워크플로우를 만들고 트리거 옆 + 버튼에서 HTTP Request 노드를 검색해 추가합니다.

노드 추가 패널에서 'http' 검색 → HTTP Request 선택

메소드는 GET, URL 에는 방금 복사한 네이버 IT/과학 모바일 URL 을 붙여넣고 Execute step 으로 한 번 실행해봅니다. 오른쪽 OUTPUT 에 HTML 원문 이 그대로 담겨오면 성공.

GET + URL 세팅 후 Execute step — HTML 원문 그대로 수신 확인
💡
이 시점에는 아직 파싱은 안 된 상태 입니다. 통째로 받은 HTML 을 다음 단계에서 AI 에게 정리하라고 시킬 겁니다.

HTTP 를 AI Agent 의 Tool 로 붙이기

이제 흐름을 AI Agent 중심 으로 재구성합니다. 앞에 Chat Trigger 를 두고, AI Agent 를 넣은 뒤, 방금 만든 HTTP Request 노드를 Tool 소켓에 연결합니다.

Chat Trigger → AI Agent, Chat Model = OpenAI, Tool = HTTP Request

여기서 중요한 세팅 하나. HTTP Tool 의 URL 을 고정값으로 두지 말고, 상단 URL 필드의 오른쪽 별표 아이콘을 눌러 Defined automatically by the model 로 바꿉니다.

URL 필드를 'Defined automatically by the model' 로 전환
💡
이렇게 두면 AI 가 System Message 를 보고 스스로 어느 URL 을 호출할지 정합니다. 목록 페이지 URL 도, 나중에 개별 기사 상세페이지 URL 도 같은 HTTP Tool 하나로 재사용할 수 있는 이유입니다.

Agent 지침서 (System Message) 세팅

AI Agent 노드의 Options → System Message 에 아래 지침서를 붙여넣습니다. 사용자가 카테고리 URL 을 던지면 HTTP Tool 로 해당 페이지를 GET 해서 HTML 을 받아오고, 그 안에서 기사 목록만 뽑아 JSON 으로 정리 하도록 지시합니다.

AI Agent > Options > System Message 에 지침서 붙여넣기
📋 System Message — 목록 수집 Agent
너는 뉴스 웹페이지에서 기사 정보를 추출하는 AI Agent입니다.

사용자 또는 앞 단계에서 전달된 뉴스 페이지 URL을 확인하고,
연결된 HTTP 요청 도구를 사용하여 GET 방식으로 해당 페이지의 HTML을 가져오세요.

가져온 HTML에서 뉴스 기사 목록을 분석하여
각 기사의 제목, 링크, 발행시간을 추출하세요.


[도구 사용 규칙]

연결된 HTTP 요청 도구는 웹페이지의 HTML을 가져오는 용도입니다.

- HTTP Method는 GET 방식입니다.
- 뉴스 페이지의 HTML을 가져와야 하는 경우 HTTP 요청 도구를 사용하세요.
- HTML에 존재하지 않는 데이터는 추측하지 마세요.
- 기사 상세페이지를 추가로 조회할 필요가 없다면 불필요한 HTTP 요청을 하지 마세요.


[추출 대상]

각 뉴스 기사에서 다음 3가지 정보를 추출하세요.

1. title
- 기사의 제목입니다.
- HTML 태그는 제거하세요.
- 앞뒤 불필요한 공백을 제거하세요.

2. link
- 해당 기사의 상세페이지 URL입니다.
- 반드시 실제 기사 링크를 사용하세요.
- 상대경로로 되어 있다면 가능하면 원본 사이트의 도메인을 기준으로 절대 URL로 변환하세요.

예:
상대경로:
/news/article/123

변환:
https://example.com/news/article/123

3. publishedAt
- 기사 목록에 표시된 발행 날짜 또는 발행시간입니다.
- 페이지에 표시된 값을 기준으로 추출하세요.
- 날짜나 시간이 없는 경우 임의로 생성하지 마세요.
- 확인할 수 없는 경우 null을 사용하세요.


[기사 판별 규칙]

뉴스 목록에 포함된 실제 기사만 추출하세요.

다음 항목은 기사로 취급하지 마세요.

- 메뉴
- 카테고리 링크
- 로그인 링크
- 광고
- 배너
- 페이지 번호
- 이전/다음 버튼
- 사이트 로고
- 공지사항이 아닌 일반 UI 요소

동일한 기사 링크가 여러 번 존재하는 경우
하나만 남기고 중복을 제거하세요.


[출력 규칙]

최종 결과는 반드시 JSON으로만 출력하세요.

설명문, 마크다운, 코드블록, 추가 안내 문장을 출력하지 마세요.

반드시 다음 구조를 사용하세요.

{
  "articles": [
    {
      "title": "기사 제목",
      "link": "https://example.com/article/1",
      "publishedAt": "2026-08-09 10:30"
    },
    {
      "title": "두 번째 기사 제목",
      "link": "https://example.com/article/2",
      "publishedAt": "2026-08-09 09:20"
    }
  ]
}


[중요 규칙]

- HTML에 실제로 존재하는 기사만 추출하세요.
- 제목을 임의로 수정하거나 요약하지 마세요.
- 링크를 임의로 만들어내지 마세요.
- 발행시간을 추측하지 마세요.
- 동일한 기사는 중복 출력하지 마세요.
- JSON 형식을 반드시 지키세요.
- articles는 항상 배열이어야 합니다.
- 기사가 하나도 없다면 다음과 같이 출력하세요.

{
  "articles": []
}
💡
핵심은 [도구 사용 규칙] · [추출 대상] · [기사 판별 규칙] · [출력 규칙] · [중요 규칙] 다섯 블록. 특히 publishedAt 은 없으면 null, 기사 없으면 빈 배열 — 두 가지 예외 처리를 명시해두면 AI 가 지어내지 않습니다.

Chat 실행 — 기사 목록 JSON 확인

채팅창에 크롤링할 URL 과 요청 문장을 함께 던져봅니다.

📋 채팅 입력 예시
https://news.naver.com/breakingnews/section/105/731 의 제목과 링크 발행시각 을 정리해줘

Agent 가 HTTP Tool 로 페이지를 한 번 호출한 뒤, HTML 안에서 기사 목록을 뽑아 아래처럼 JSON 문자열 을 반환합니다.

OUTPUT: articles 배열 안에 title / link / publishedAt 이 채워져서 옴
💡
지금 OUTPUT 은 JSON "문자열" 입니다. 다음 단계에서 이걸 실제 배열 로 파싱해야 그 다음 노드들이 아이템 단위로 처리할 수 있습니다.

Code 노드로 문자열 → JSON 파싱

Agent 뒤에 Code 노드를 하나 붙이고 JavaScript 로 아래 코드를 넣습니다. Agent 가 돌려준 문자열을 JSON.parse 로 실제 객체로 바꿔서 뒤 노드에 넘겨줍니다.

Language: JavaScript · Mode: Run Once for All Items
const data = JSON.parse($json.output);

return [
  {
    json: data
  }
];

실행하면 오른쪽 OUTPUT 에 articles 안이 실제 배열로 펼쳐진 걸 확인할 수 있습니다.

OUTPUT: articles[0], articles[1], ... 각 기사가 객체로 분리됨
💡
왜 굳이 Code 노드? — AI 는 문자열 을 리턴합니다. Split Out 같은 뒤 노드들은 실제 배열 을 기대합니다. 그 사이 얇은 변환 층 이 Code 노드 한 줄입니다.

필요하다면 파싱하면서 기사 개수를 제한 할 수도 있습니다. 예를 들어 뒤 노드(요약 Agent · 시트 저장)에 부담을 줄이려고 상위 3개만 넘기고 싶다면 아래처럼 slice 한 줄만 추가하면 됩니다.

📋 Code 노드 — 상위 3개 기사만 리턴
const data = JSON.parse($json.output);

// 앞에서부터 3개 기사만 남기기
const top3 = (data.articles || []).slice(0, 3);

return [
  {
    json: {
      articles: top3
    }
  }
];
💡
숫자만 바꾸면 N개 제한 이 됩니다 (slice(0, 5) = 상위 5개). AI Agent 호출 비용·구글 시트 저장 속도를 조절하고 싶을 때 Code 노드 한 줄로 상한 을 걸어두는 걸 권장합니다. 참고로 다음 단계의 두 번째 Agent 프롬프트에서도 상위 5개만 처리 하도록 지시하는 이중 안전장치를 두게 됩니다.

두 번째 Agent — 개별 기사 요약

Code 노드 뒤에 두 번째 AI Agent 를 붙이고, Chat Model 과 HTTP Request Tool 을 다시 연결합니다. 첫 Agent 가 목록 페이지 를 다뤘다면, 이 Agent 는 각 기사 상세페이지 를 다룹니다.

AI Agent1 · Chat Model1 · HTTP Request1 을 새로 연결
💡
HTTP Tool 은 첫 Agent 것과 별개로 새로 붙입니다. URL 은 여기서도 Defined automatically by the model — 각 아이템의 link 를 AI 가 알아서 호출합니다.

두 번째 Agent 프롬프트 (User + System) — 배열 통째로 처리

두 번째 Agent 는 앞의 Code 노드에서 나온 articles 배열 을 통째로 받아 처리하도록 세팅합니다. Source for Prompt 를 Define below 로 바꾸고 아래의 User Message · System Message 를 각각 붙여넣습니다.

Source: Define below · Prompt 에 articles 배열 매핑 · System Message 로 처리·저장 규칙 고정
📋 User Message — 상위 5개 기사 처리
다음 입력에는 여러 개의 뉴스 기사가 articles 배열 형태로 들어 있습니다.

입력 데이터:
{{ JSON.stringify($json.articles) }}

위 기사들 중 배열의 앞에서부터 상위 5개 기사만 처리하세요.

처리 대상은 반드시 articles[0]부터 articles[4]까지입니다.
6번째 기사부터는 처리하지 마세요.

각 기사마다 다음 작업을 수행하세요.

1. title을 확인합니다.
2. link를 확인합니다.
3. publishedAt을 확인합니다.
4. HTTP 요청 도구를 사용하여 해당 link의 기사 상세페이지를 GET 방식으로 조회합니다.
5. 상세페이지에서 실제 최초 발행일시를 찾습니다.
6. 기사 본문을 분석하여 한국어 3~5문장으로 요약합니다.
7. 스프레드시트 저장 도구를 사용하여 다음 값을 저장합니다.

- Title
- Link
- PublishedAt
- Summary

PublishedAt은 입력으로 받은 "9시간전", "10시간전" 같은 상대시간을 그대로 사용하지 마세요.

반드시 기사 상세페이지에서 확인한 실제 최초 발행일시를 사용하고,
가능하면 다음 형식으로 저장하세요.

YYYY-MM-DD HH:mm:ss

예:
2026-08-09 18:42:00

각 기사마다 HTTP 요청은 1회만 수행하세요.
각 기사마다 스프레드시트 저장도 1회만 수행하세요.

총 5개의 기사만 처리하고,
총 5개의 행만 스프레드시트에 저장하세요.

5개의 기사 처리가 모두 완료되면 추가 기사 처리를 중단하세요.
📋 System Message — 요약·저장 Agent
너는 뉴스 기사 상세페이지를 분석하고 결과를 스프레드시트에 저장하는 AI Agent입니다.

입력으로 기사 1건의 정보가 전달됩니다.

입력 데이터는 다음과 같습니다.

- title
- link
- publishedAt

단, 입력으로 전달되는 publishedAt은 기사 목록 페이지에서 가져온 상대시간일 수 있습니다.
예: "5시간전", "8시간전"

최종 PublishedAt은 반드시 기사 상세페이지에서 실제 발행일시를 직접 확인하여 사용하세요.


[처리 목표]

각 기사마다 반드시 다음 작업을 수행하세요.

1. 입력된 title, link, publishedAt을 확인합니다.
2. 연결된 HTTP 요청 도구를 사용하여 link 주소의 기사 상세페이지를 GET 방식으로 가져옵니다.
3. 가져온 HTML에서 실제 기사 발행일시를 찾습니다.
4. HTML에서 실제 기사 본문을 찾아 분석합니다.
5. 기사 본문을 한국어로 3~5문장으로 요약합니다.
6. 연결된 스프레드시트 저장 도구를 사용하여 결과를 반드시 저장합니다.


[HTTP 요청 규칙]

- 반드시 현재 입력으로 전달된 link를 사용하세요.
- 해당 기사 상세페이지를 GET 방식으로 조회하세요.
- 다른 기사 URL을 임의로 사용하지 마세요.
- 같은 기사 페이지를 불필요하게 반복 호출하지 마세요.
- 기사 1건당 HTTP 요청 도구는 가능한 한 1회만 사용하세요.


[발행일시 추출 규칙]

최종 PublishedAt은 입력받은 publishedAt을 그대로 사용하는 것이 아니라,
HTTP 요청으로 가져온 기사 상세페이지 HTML에서 실제 발행일시를 찾아 사용하세요.

예를 들어 입력값이:

publishedAt:
8시간전

이라고 되어 있어도,

기사 상세페이지 HTML에:

2026.08.09. 오후 6:42

와 같이 실제 발행일시가 존재한다면
최종 PublishedAt은 다음과 같이 저장하세요.

2026-08-09 18:42:00


발행일시 처리 우선순위:

1순위
- 기사 상세페이지 HTML에 표시된 최초 발행일시

2순위
- 상세페이지에 최초 발행시간은 없고 다른 명확한 발행일시 정보가 존재하는 경우 해당 값

3순위
- 상세페이지에서 실제 발행일시를 전혀 찾지 못한 경우에만 입력받은 publishedAt 사용


[발행일시 형식]

최종 PublishedAt은 가능한 경우 반드시 다음 형식으로 통일하세요.

YYYY-MM-DD HH:mm:ss

예:

2026-08-09 18:42:00

오전/오후 형식은 24시간 형식으로 변환하세요.

예:

2026.08.09. 오전 9:15
→ 2026-08-09 09:15:00

2026.08.09. 오후 6:42
→ 2026-08-09 18:42:00


[발행일시 중요 규칙]

- "5시간전", "8시간전" 같은 상대시간을 최종 PublishedAt으로 저장하지 마세요.
- 상대시간을 현재 시간 기준으로 임의 계산하지 마세요.
- 반드시 기사 상세페이지의 실제 발행일시를 우선 확인하세요.
- 발행시간과 수정시간이 모두 존재하면 최초 발행시간을 사용하세요.
- 수정시간을 PublishedAt으로 잘못 저장하지 마세요.
- 실제 HTML에서 확인되지 않은 시간을 만들어내지 마세요.


[기사 본문 분석 규칙]

가져온 HTML에서 실제 기사 본문만 찾아 분석하세요.

다음 내용은 기사 본문에서 제외하세요.

- 메뉴
- 광고
- 댓글
- 기자 프로필
- 관련 기사
- 추천 기사
- 공유 버튼
- 로그인 영역
- 사이트 안내 문구
- 구독 유도 문구
- 다른 기사 제목
- 기타 기사 본문과 관계없는 UI


[요약 규칙]

Summary는 다음 기준에 따라 작성하세요.

- 한국어로 작성하세요.
- 기사 핵심 내용을 3~5문장으로 요약하세요.
- 핵심 사건, 배경, 결과가 드러나도록 작성하세요.
- 중요한 기업명, 기관명, 인물명은 가능한 경우 포함하세요.
- 중요한 제품명, 서비스명도 필요한 경우 포함하세요.
- 중요한 금액, 인원, 비율, 날짜 등의 수치는 가능한 경우 포함하세요.
- 같은 내용을 반복하지 마세요.
- 기사에 없는 내용을 추가하지 마세요.
- 추측하거나 사실을 만들어내지 마세요.
- 광고 문구나 기자 소개 내용은 Summary에 포함하지 마세요.


[스프레드시트 저장 규칙]

기사 분석이 완료되면
반드시 연결된 스프레드시트 저장 도구를 사용하세요.

기사 1건당 정확히 1개의 행을 저장하세요.

스프레드시트에는 다음 컬럼이 있습니다.

Title
Link
PublishedAt
Summary


각 컬럼에는 다음 값을 저장하세요.


Title

- 입력받은 title을 저장하세요.
- 제목을 임의로 수정하거나 요약하지 마세요.


Link

- 입력받은 link를 저장하세요.
- 기사 URL을 임의로 변경하지 마세요.


PublishedAt

- 기사 상세페이지 HTML에서 직접 확인한 실제 최초 발행일시를 저장하세요.
- 가능한 경우 반드시 YYYY-MM-DD HH:mm:ss 형식으로 저장하세요.
- 입력받은 "5시간전", "8시간전" 같은 상대시간을 그대로 저장하지 마세요.


Summary

- 기사 상세페이지의 실제 본문을 분석하여 작성한 3~5문장 요약을 저장하세요.


[매우 중요한 저장 규칙]

- 모든 기사는 반드시 스프레드시트에 저장하세요.
- 저장은 선택 사항이 아닙니다.
- 기사 1건당 저장 도구는 정확히 1회만 사용하세요.
- 같은 기사를 여러 번 저장하지 마세요.
- Title은 입력값을 유지하세요.
- Link는 입력값을 유지하세요.
- PublishedAt은 상세페이지에서 직접 확인한 실제 발행일시를 사용하세요.
- Summary만 기사 본문을 기반으로 새롭게 작성하세요.
- 데이터가 없으면 임의로 만들어내지 마세요.


[도구 호출 규칙]

기사 1건을 처리할 때 다음 순서를 따르세요.

1. 기사 입력 확인
2. HTTP 요청 도구로 상세페이지 조회
3. 상세페이지에서 최초 발행일시 확인
4. 실제 기사 본문 확인
5. Summary 생성
6. 스프레드시트 저장 도구 1회 호출
7. 작업 종료

같은 기사에 대해 HTTP 요청이나 저장 도구를 반복 호출하지 마세요.


[최종 응답]

스프레드시트 저장이 완료된 후에는
다음 JSON 구조로만 간단히 출력하세요.

{
  "title": "기사 제목",
  "link": "기사 URL",
  "publishedAt": "2026-08-09 18:42:00",
  "summary": "기사 핵심 요약",
  "saved": true
}

설명문, 마크다운, 코드블록은 출력하지 마세요.
💡
이 시점에는 articles 배열을 통째로 Agent 에게 넘겨 "알아서 5개 처리해" 라고 지시하는 구조입니다. 사람 입장에선 가장 자연스럽지만, 뒤에서 보시겠지만 이 방식은 컨텍스트 초과 로 반드시 터집니다. 그 문제를 15·16번 트러블슈팅에서 Split Out + Loop 로 해결하고, User Message 도 아이템 단위 로 다시 고쳐서 최종 형태를 완성합니다.

첫 실행 — 기사별 요약이 잘 나오는 모습

여기까지 세팅하고 채팅을 다시 던져보면, 두 번째 Agent 가 기사 하나하나에 대해 HTTP 호출 → 본문 요약 → JSON 출력을 반복하는 걸 볼 수 있습니다.

각 아이템마다 title / link / publishedAt / summary 4필드가 채워짐
💡
이 단계에서는 아직 시트 저장 이 붙지 않은 상태입니다. 다음 단계에서 Google Sheets Tool 을 붙일 겁니다.

저장할 구글 시트 생성

결과를 쌓아둘 구글 시트를 하나 만듭니다. 시트명은 자유롭게 지정하고 (예: 네이버 기사 저장 시트), 탭 이름은 기사요약 으로 두겠습니다. A1 부터 아래 4개 헤더 를 그대로 넣어주세요.

A1: Title / B1: Link / C1: PublishedAt / D1: Summary
📋 구글 시트 헤더
Title	Link	PublishedAt	Summary																																											
💡
헤더 이름은 두 번째 Agent 의 출력 JSON 필드명과 정확히 일치 해야 합니다. 대소문자·오탈자 주의.

Google Sheets Tool — Append Row 설정

두 번째 Agent 의 Tool 소켓에 Google Sheets Tool 을 추가합니다.

Tools 검색창에서 'sheet' → Google Sheets Tool 선택

설정은 다음과 같이 잡습니다.

  • Operation — Append Row
  • Document — From list 로 방금 만든 시트 선택
  • Sheet — 기사요약 탭 선택
  • Mapping Column Mode — Map Each Column Manually
  • 각 컬럼(Title / Link / PublishedAt / Summary) 값은 Defined automatically by the model 로 두어 AI 가 입력값을 매핑하도록
4개 컬럼 모두 model 이 자동으로 값 채워넣도록 설정
💡
⚠️ Map Each Column Manually 를 꼭 선택하세요. Map Automatically 로 두면 AI 가 기존 컬럼에 맞추는 대신 시트에 새로운 헤더를 마음대로 추가 해버릴 수 있습니다.

⚠️ 전체 실행 — 컨텍스트 초과 오류

여기까지 세팅하고 채팅을 다시 던지면… 처음엔 잘 도는 것 같지만 실행이 점점 느려지다가 결국 아래 에러로 멈춥니다. 두 번째 Agent 가 기사 여러 개의 HTML 을 한꺼번에 System Message + 도구 호출 결과에 몰아 담다가, 모델 컨텍스트 한도를 초과한 상황입니다.

400 Your input exceeds the context window of this model.
💡
🚨 이게 실제 현장에서 가장 자주 만나는 함정입니다. "AI 한테 다 맡기면 되겠지" 하고 배열을 통째로 넘기면, 어느 순간부터 느려지고 · 비싸지고 · 결국 터집니다. 다음 스텝에서 이걸 Split Out + Loop 조합으로 해결합니다.

해결 ① — Split Out 으로 배열을 아이템 단위로 쪼개기

Code 노드와 두 번째 Agent 사이에 Split Out 노드를 하나 끼워 넣습니다. Fields To Split Out 에 articles 를 입력하면 워크플로우 아이템 개수가 1 → N (기사 수) 으로 늘어납니다. articles 5건이면 5 items 로.

Split Out 통과 후 워크플로우 아이템 = 기사 수
💡
Split Out 만으로는 부족합니다. 아이템이 여러 개로 나뉘어도 뒤 노드가 그것들을 한꺼번에 받아 처리 하면 결국 같은 문제가 납니다. 진짜 해결은 다음 스텝 Loop.

해결 ② — Loop Over Items + User Prompt 아이템 단위로 재수정

Split Out 뒤에 Loop Over Items 노드를 붙이고, 그 loop 출력에 두 번째 Agent 파이프라인(Agent → Sheets Append)을 통째로 연결합니다. 처리가 끝나면 다시 Loop 로 돌아오게 배선.

Split Out → Loop Over Items → (loop 안에서 Agent1 → Sheets Append) → 다시 Loop

Loop 안에 두 번째 Agent + Google Sheets Append + Wait 를 넣습니다. Wait 는 API rate limit 를 피하려고 아이템 사이에 살짝 쉬어주는 용도.

Loop 안: OpenAI Chat Model1 · HTTP Request1 · Google Sheets Append · Wait

⚠️ 여기서 반드시 같이 바꿔야 하는 것 — 두 번째 Agent 의 User Message 입니다. 이전엔 articles 배열 전체 를 넘겨 "상위 5개 처리해" 라고 시켰지만, 이제는 Loop 가 기사 하나씩 아이템으로 넣어줍니다. 그러니 프롬프트도 기사 1건 관점 으로 다시 써야 합니다.

📋 User Message — 아이템(기사 1건) 단위로 재작성
다음 뉴스 기사 1건을 처리하세요.

Title:
{{ $json.title }}

Link:
{{ $json.link }}

PublishedAt:
{{ $json.publishedAt }}

반드시 위 Link의 기사 상세페이지를 HTTP GET 방식으로 1회 조회하세요.

기사 상세페이지에서 실제 최초 발행일시를 찾아
YYYY-MM-DD HH:mm:ss 형식으로 정리하세요.

입력된 PublishedAt이 "5시간전", "9시간전" 같은 상대시간이어도
그 값을 그대로 저장하지 말고,
상세페이지에서 확인한 실제 발행일시를 사용하세요.

기사 본문만 추출하여 핵심 내용을 한국어 3~5문장으로 요약하세요.

그 다음 연결된 Google Sheets 저장 도구를 사용하여
다음 값을 정확히 1회 저장하세요.

- Title: 입력받은 title
- Link: 입력받은 link
- PublishedAt: 상세페이지에서 확인한 실제 최초 발행일시
- Summary: 기사 본문 요약

저장이 완료되면 추가 도구 호출 없이 작업을 종료하세요.
💡
System Message 는 그대로 재사용해도 됩니다 — 어차피 기사 1건 처리 규칙 으로 이미 써두었기 때문. User Message 만 배열 프롬프트에서 아이템 프롬프트로 갈아끼우면 Loop 와 자연스럽게 맞물립니다.
💡
이 배치의 핵심은 "기사 한 건 처리 → 시트에 한 줄 저장 → 다음 기사" 로 메모리를 매 사이클마다 비워주는 흐름을 강제하는 것. Agent 가 한 번에 담아야 하는 컨텍스트가 기사 1건 분 으로 확 줄어듭니다.

최종 실행 — 5건 순차 처리 성공

다시 채팅을 던지면 Loop 가 아이템 하나씩 돌면서 Agent 요약 → 시트 저장 → Wait → 다음 순으로 안정적으로 처리합니다.

5 items total · Loop 를 통과하며 각 노드가 5회씩 실행됨

구글 시트를 열어보면 기사 5건이 Title / Link / PublishedAt / Summary 4컬럼에 맞춰 정확히 저장돼 있는 걸 확인할 수 있습니다.

기사요약 시트 — 각 행에 4필드가 채워져 저장됨
💡
🎯 이 강의의 최종 학습 포인트 — "AI 는 강력하지만 한 번에 많은 걸 시키면 반드시 터진다". 실무에서는 Split Out + Loop + Wait 세트가 사실상 표준 패턴입니다. 앞으로 만드는 대부분의 크롤링·대량 처리 워크플로우가 이 구조를 따르게 됩니다.

확장 아이디어

이 워크플로우는 기본 뼈대만 만든 것이라 실무 응용은 무궁무진합니다. 몇 가지 확장 방향.

  • Schedule Trigger 로 매일 오전 8시 자동 실행 → 출근 전에 뉴스 요약 완료
  • 카테고리별 URL 리스트 를 배열로 넣고 첫 Agent 앞에 Split Out 을 하나 더 두면 여러 카테고리 동시 수집
  • 요약이 끝난 뒤 Slack / 카카오 로 하루치 요약본 자동 발송
  • 키워드 필터 Agent 를 하나 더 붙여 "AI · 반도체 관련 기사만" 같은 조건 필터링
  • 요약 결과를 DB (Postgres / Supabase) 에 저장해서 나중에 검색 가능하게
💡
가장 먼저 붙여볼 만한 건 Schedule Trigger. 트리거만 바꾸면 지금 만든 이 워크플로우가 매일 알아서 도는 자동 뉴스 브리핑 이 됩니다.