하루 350건 ESG 뉴스를 15건으로 — Claude Code 서브에이전트로 만든 무인 뉴스레터 파이프라인

소개

기업의 ESG/탄소중립 대응 업무를 맡고 있는데, 국내외 관련 뉴스를 매일 스크리닝해야 하는 게 큰 부담이었습니다. 하루에 300~400건씩 쏟아지는 기사를 사람이 직접 읽고 관련성을 판단해 요약하는 데 시간이 너무 많이 들었습니다. "매일 아침 열어보면 그날 봐야 할 기사만 골라 요약과 우리 회사 관점 영향분석까지 붙어있는" 뉴스레터를 Claude Code로 자동 생성하는 파이프라인을 만들어봤습니다.

목표는 세 가지였습니다.

  1. 국내(네이버 뉴스)·해외(Google News RSS, ESG 전문매체, NewsAPI) 기사를 자동 수집

  2. 우리 회사 사업(공급망, 규제 동향, 경쟁사/고객사 움직임) 관점에서 실질적으로 의미 있는 기사만 선별

  3. 메일에 바로 붙여넣을 수 있는 카드형 HTML 뉴스레터로 자동 조립

진행 방법

사용 도구: Claude Code(CLI) + Python 수집 스크립트(collect_news.py) + Claude Code Skill 기능(반복 작업 절차 정의) + Agent(서브에이전트) 병렬 실행

전체 구조

  1. python3 collect_news.py 실행 → 네이버 뉴스 API, Google News RSS, ESG 전문지 RSS(edie·BusinessGreen·Trellis), NewsAPI에서 하루치 기사를 지역(국내/해외)·카테고리(공시규제, 에너지조달, 경쟁사/고객사, 그린워싱/소송, 공급망/인권 등) 태그와 함께 JSON으로 수집

  2. Claude Code에 등록해둔 /newsletter Skill을 호출 → 국내 담당·해외 담당 서브에이전트 2개를 동시에(병렬로) 실행시켜 각자 담당 지역 기사만 분석

  3. 각 서브에이전트는 정해진 채택 기준으로 기사를 걸러 카드 HTML을 직접 파일에 Write — 결과를 대화창으로 돌려주지 않고 "채택 건수/기타 건수/핵심 동향 한 줄" 4가지만 압축 보고

  4. 메인 스레드는 서브에이전트가 보고한 요약을 재료로 헤더와 "오늘의 요약"만 작성하고, 나머지는 cat으로 파일을 이어붙여 최종 HTML 완성

이렇게 나눈 이유는 원본 JSON(300~400건)과 완성된 카드 HTML(30장 분량)을 메인 대화창이 직접 읽으면 토큰이 순식간에 고갈되기 때문입니다. 실제로 한 번 토큰이 고갈된 뒤로 이 구조로 바꿨습니다.

실제 사용한 프롬프트 (Skill 호출)

/newsletter 8/5일자 뉴스레터 생성. 8/3, 7/31 뉴스레터를 참고. 국내/해외 주요 기사는 각각 최대 15개로 제한.

서브에이전트에 위임한 프롬프트 (국내 담당 예시 — 해외 담당은 지역만 바뀐 동일 구조)

너는 기업의 ESG/탄소중립 담당팀을 위한 뉴스레터의 "국내" 담당 분석가다.

JSON 파일: newsletters/data/2026-08-05_articles.json (region이 "국내"인 기사만 필터링)

## 채택 기준 (하나라도 해당하면 주요 기사로 채택)
- 규제 동향: ISSB/CSRD/KSSB 공시, CBAM/탄소국경세, CSDDD/공급망 실사법, 배출권거래제 등
- 전략: 재생에너지 조달(PPA/REC), 무탄소에너지(CFE/SMR), 넷제로 기술(CCUS/DAC), SBTi
- 경쟁사/고객사: 업계 주요 경쟁사·고객사의 환경 전략 및 규제 대응 동향
- 공급망: Scope 3, 협력사 실사, 책임광물, 강제노동(UFLPA), 용수 관리
- 리스크: 그린워싱 규제/소송, 기후 소송, TNFD/생물다양성 공시
- 순환경제: EU 순환경제 규제, 재활용 기술

## 주요 기사는 최대 15건까지만
15건을 넘으면 우리 회사 사업에 대한 실질적 영향력·시의성이 높은 순으로 정확히 15건만 채택.

## 작성 규칙
- 단순 홍보성·지자체 행사·우리 회사와 무관한 타 기업 일반 ESG 홍보는 제외
  (카테고리 키워드가 있어도 "우리 회사 입장에서 실제로 참고할 이유가 있는가"로 판단)
- 같은 사건 중복 보도는 대표 1건만 채택, 나머지는 기타 목록으로
- 각 주요 기사에 2~3문장 우리 회사 관점 영향 분석 작성
- "~사실이 확인되며" 같은 단정적 표현 금지, 발언·주장은 발화 형식 그대로 서술

## 출력 (반드시 파일에 직접 Write)
1. newsletters/data/2026-08-05_frag_domestic_major.html — 주요 기사 카드 (최대 15개)
2. newsletters/data/2026-08-05_frag_domestic_other.html — 기타 기사 목록

## 최종 응답 형식
파일 내용을 반복하지 말고 다음 4가지만 압축 보고:
1. 주요 기사 채택 건수  2. 기타 기사 건수
3. 핵심 동향 한 줄 요약  4. 기타 특이사항

활용 화면 (여기에 실제 실행 캡처 — 서브에이전트 2개가 병렬로 도는 화면, 완성된 뉴스레터 HTML 스크린샷을 첨부해주세요)

결과와 배운 점

결과: 하루 350~380건의 원본 기사 → 국내/해외 각 15건씩 총 30건의 주요 기사(카드+영향분석)와 기타 목록으로 압축한 HTML 뉴스레터가 5분 내외(서브에이전트 병렬 실행 기준)로 완성됩니다. 메일 클라이언트에 그대로 붙여넣어도 스타일이 깨지지 않습니다.

배운 점 / 꿀팁

  • "메인 스레드는 원본을 절대 읽지 않는다"가 토큰 절약의 핵심입니다. 서브에이전트가 파일에 직접 쓰고 4줄 요약만 돌려주게 강제하면, 메인 대화창 토큰 소모가 수십 분의 1로 줄어듭니다.

  • 국내/해외를 순차가 아니라 병렬 2-agent로 돌리면 속도와 컨텍스트 관리 두 마리 토끼를 잡을 수 있습니다.

  • 메일 붙여넣기 호환을 위해 box-shadow나 페이지 배경색에 의존한 디자인은 피하고, 카드마다 border + border-left 강조 색상으로 카테고리를 구분하는 인라인 스타일만 써야 합니다.

  • Google News RSS 링크는 실제 기사 URL이 아니라 리다이렉트 래퍼라서, 저장 전에 별도 디코딩 처리가 필요했습니다.

시행착오

  • 서브에이전트가 세션 중간에 프로세스가 종료되며 최종 보고를 못 받은 적이 있습니다. 확인해보니 파일은 이미 정상적으로 완성돼 있어서, 같은 에이전트를 재개해 "이미 쓴 파일은 그대로 두고 요약 보고만 다시 달라"고 요청해 복구했습니다. 작업 자체를 중복 실행하지 않고 결과만 회수할 수 있다는 걸 알게 됐습니다.

  • 처음엔 "채택 기준에 맞으면 개수 제한 없이 전부 포함"이었는데, 하루에 30건이 넘어가니 가독성이 떨어져서 국내/해외 각 최대 15건으로 상한을 뒀습니다.

  • 카테고리 키워드(예: "ESG", "공급망")만 보고 무관한 기업의 홍보성 기사까지 채택되는 문제가 있어서, "우리 회사 입장에서 실제로 참고할 이유가 있는가"라는 판단 기준을 명문화해서 프롬프트에 넣었습니다.

도움이 필요한 부분

  • 지금은 사람이 매일 대화창에서 트리거하는 방식입니다. cron 기반 완전 자동 실행과, 완성된 HTML을 실제 메일 발송까지 이어주는 부분(메일 API 연동)은 아직 수동으로 남아있어 이 부분 자동화 경험이 있으신 분들 조언을 구하고 싶습니다.

앞으로의 계획

  • 스케줄러로 매일 자동 실행 + 발신까지 자동화

  • 과거 뉴스레터를 누적해 "지난주 대비 트렌드 변화"를 짚어주는 주간 다이제스트 버전 추가

도움 받은 글 (옵션)

(내용 입력 — 참고한 지피터스 글이나 외부 사례가 있다면 여기에 링크 추가)

1개의 답글
밀어주고 끌어주는

온·오프라인 AI 스터디

AI로 어디까지 할 수 있는지
직접 확인하실 분만 신청하세요.