소개
기업의 ESG/탄소중립 대응 업무를 맡고 있는데, 국내외 관련 뉴스를 매일 스크리닝해야 하는 게 큰 부담이었습니다. 하루에 300~400건씩 쏟아지는 기사를 사람이 직접 읽고 관련성을 판단해 요약하는 데 시간이 너무 많이 들었습니다. "매일 아침 열어보면 그날 봐야 할 기사만 골라 요약과 우리 회사 관점 영향분석까지 붙어있는" 뉴스레터를 Claude Code로 자동 생성하는 파이프라인을 만들어봤습니다.
목표는 세 가지였습니다.
국내(네이버 뉴스)·해외(Google News RSS, ESG 전문매체, NewsAPI) 기사를 자동 수집
우리 회사 사업(공급망, 규제 동향, 경쟁사/고객사 움직임) 관점에서 실질적으로 의미 있는 기사만 선별
메일에 바로 붙여넣을 수 있는 카드형 HTML 뉴스레터로 자동 조립
진행 방법
사용 도구: Claude Code(CLI) + Python 수집 스크립트(collect_news.py) + Claude Code Skill 기능(반복 작업 절차 정의) + Agent(서브에이전트) 병렬 실행
전체 구조
python3 collect_news.py실행 → 네이버 뉴스 API, Google News RSS, ESG 전문지 RSS(edie·BusinessGreen·Trellis), NewsAPI에서 하루치 기사를 지역(국내/해외)·카테고리(공시규제, 에너지조달, 경쟁사/고객사, 그린워싱/소송, 공급망/인권 등) 태그와 함께 JSON으로 수집Claude Code에 등록해둔
/newsletterSkill을 호출 → 국내 담당·해외 담당 서브에이전트 2개를 동시에(병렬로) 실행시켜 각자 담당 지역 기사만 분석각 서브에이전트는 정해진 채택 기준으로 기사를 걸러 카드 HTML을 직접 파일에 Write — 결과를 대화창으로 돌려주지 않고 "채택 건수/기타 건수/핵심 동향 한 줄" 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 연동)은 아직 수동으로 남아있어 이 부분 자동화 경험이 있으신 분들 조언을 구하고 싶습니다.
앞으로의 계획
스케줄러로 매일 자동 실행 + 발신까지 자동화
과거 뉴스레터를 누적해 "지난주 대비 트렌드 변화"를 짚어주는 주간 다이제스트 버전 추가
도움 받은 글 (옵션)
(내용 입력 — 참고한 지피터스 글이나 외부 사례가 있다면 여기에 링크 추가)