
Upstage AI Ambassador 프로젝트로 진행한 A.DIFF 뉴스레터 자동화 파이프라인 설계/구현 기록
AI/스타트업 관련 정보는 매일 쏟아집니다.
문제는 정보의 양 자체가 아니라, 지금 내가 봐야 할 신호를 골라내는 비용입니다.
매주 쏟아지는 정보는 대체로 세 갈래로 나뉩니다.
문제는 이 정보들이 한곳에 정리되어 들어오지 않는다는 점입니다.
직접 여러 소스를 오가며 확인하고, 중복을 제거하고, 우선순위를 다시 매겨야 합니다.
특히 “이번 주에 실제로 봐야 할 것”만 남기는 과정이 생각보다 오래 걸립니다.
그래서 이번 프로젝트의 목표를 이렇게 잡았습니다.
“월요일 아침에, AI x 스타트업 관점으로 정제된 개인화 뉴스레터를 자동 발행하자.”
파이프라인은 크게 3단계로 구성했습니다.
설계 기준은 단순했습니다. 수집은 넓게, 선별은 좁게, 출력은 개인화되게 가져가는 것입니다.
수집/정규화 Layer
arXiv, Hugging Face Daily Papers, GitHub Trending, OpenAI/Anthropic/DeepMind, Product Hunt, 스타트업레시피, THE VC, GeekNews, 플래텀 등 여러 소스에서 주간 데이터를 수집했습니다.
각 소스는 RSS, HTML, JSON, API 등 응답 형식이 제각각이기 때문에, 파서 단계에서 이를 공통 필드 구조로 변환했습니다.
이 정규화 과정을 거쳐 후속 노드는 source와 무관하게 동일한 로직으로 데이터를 다룰 수 있도록 했습니다.
신호 선별 Layer
수집된 아이템은 그대로 노출하지 않고, Solar Mini를 사용해 AI x 스타트업 관점의 관련성을 1~10점으로 점수화했습니다.
여기서는 단순히 “AI 키워드가 있는가”보다, 기술 변화가 제품·시장·사업화 맥락과 연결되는지를 더 중요하게 봤습니다.
점수 6 이상만 통과시키는 방식으로 노이즈를 줄이고, 최종 입력 집합의 밀도를 높였습니다.
개인화 생성/전송 Layer
Google Sheets에 저장된 구독자 프로필을 기준으로 Solar Pro가 뉴스레터 본문을 JSON 형태로 생성하고, 코드 노드에서 이를 HTML 이메일로 변환해 발송했습니다.
이 단계에서 직군, 관심사, 콘텐츠 깊이 선호를 반영해 같은 신호라도 강조 포인트가 달라지도록 제어했습니다.


Schedule Trigger를 기준으로 각 소스 수집 노드를 병렬 실행글로벌 AI 신호 Layer(6 inputs) + 스타트업 Layer(5 inputs)로 1차 병합Layer Merge에서 최종 append
source_cleanup: 제목/요약 정리 + 중복 URL 제거 + 필수 필드 검증Solar Mini Filter: 관련성 스코어링(JSON 응답 강제)Score Filter: score >= 6만 통과
If 노드에서 source in (arxiv, huggingface)인 경우만 문서 파싱 분기Upstage Document Parse로 PDF 본문 추출Final_Merge로 기존 신호와 다시 결합
Get row(s) in sheet로 구독자 정보 조회뉴스레터 생성(Solar Pro)에서 프로필 기반 본문 생성Send an Email로 발송!수집 범위가 흔들리면 뉴스레터 품질이 바로 흔들립니다.
그래서 파서별로 KST 기준 주간 윈도우(월~어제)를 명시적으로 계산해 적용했습니다.
hf_date_window: 날짜 배열 생성 후 daily_papers?date=... 호출arxiv_query_window: 카테고리 + submittedDate 범위를 query string으로 조합// Score Filter
.filter(x => x && x.score >= 6)
“애매하게 관련 있는 콘텐츠”를 줄이기 위해 6점을 컷오프로 뒀습니다.
source_cleanup에서 최종적으로 다음 필드를 강제했습니다.
sourcesource_type (논문/뉴스/커뮤니티/AI툴 ...)signal_strength (research/market/reaction/buzz ...)title, url, summary그리고 URL 기준 중복 제거를 한 번 더 넣어 같은 이슈가 여러 소스에서 반복 노출되는 문제를 줄였습니다.
Solar Mini 필터 프롬프트는 점수 기준을 명시했습니다.
9~10: AI 기술 + 스타트업 비즈니스 교집합7~8: 둘 중 하나와 강한 관련1~4: 무관응답 포맷은 json_object로 강제해서 후속 파이프라인 파싱 실패를 줄였습니다.
모든 아이템을 파싱하면 비용/지연이 커집니다.
그래서 If(source == arxiv || huggingface)로 분기하고, Limit(5)로 상한을 둬서 핵심 논문만 본문 파싱했습니다.
if (item.source === 'arxiv') {
pdfUrl = pdfUrl
.replace('http://arxiv.org/abs/', 'https://arxiv.org/pdf/')
.replace('https://arxiv.org/abs/', 'https://arxiv.org/pdf/')
.replace(/v\\d+$/, '') + '.pdf';
}
파싱 결과는 parsed_content(3000자)로 축약해 후속 생성 단계 컨텍스트로 사용했습니다.
Solar Pro 노드에서 구독자 프로필(직군/관심사/선호 깊이)을 입력으로 넣고,
TECH RADARKOREA ANGLEFROM GLOBAL TO LOCALFOR YOU섹션별 개수/형식을 JSON 스키마로 고정했습니다.
그 후 코드 노드에서 JSON을 HTML로 렌더링해 이메일 본문으로 발송합니다.

A.DIFF, 발행 주간(3.24 - 3.30)SIGNAL OF THE WEEK: 이번 주 최상위 한 줄 신호TECH RADAR 시작: 우선순위가 높은 기술 이슈 카드 2개 배치이 페이지는 “이번 주에 무엇이 중요했는지”를 먼저 인지시키는 용도입니다.
독자가 메일을 열자마자 제목과 핵심 시그널을 확인하고, 바로 실행 가능한 기술 이슈로 진입하게 설계했습니다.

TECH RADAR 마지막 카드(예: vLLM Compose)KOREA ANGLE: 국내 적용/시장 관점 이슈 2개FROM GLOBAL TO LOCAL 첫 번째 카드이 페이지는 글로벌 기술 흐름을 국내 맥락으로 연결하는 구간입니다.
단순 뉴스 나열이 아니라 “기술 변화 → 한국 시장에서의 의미”로 해석하는 레이어를 담당합니다.

FROM GLOBAL TO LOCAL 두 번째 카드FOR YOU: 구독자 관점 추천 2개 + Open Link CTAPowered by Upstage Solar Pro × n8n마지막 페이지는 개인화 영역입니다.
앞선 공통 신호를 본 뒤, 구독자 실행 관점에서 바로 클릭 가능한 추천 아이템으로 마무리됩니다.
뉴스레터 레이아웃은 아래 순서로 고정됩니다.
SIGNAL OF THE WEEK)TECH RADAR)KOREA ANGLE)FROM GLOBAL TO LOCAL)FOR YOU)RSS/HTML/Atom/JSON이 섞여 있어 source별 파서를 따로 두고, 마지막에 공통 스키마로 수렴시켰습니다.
블로그 카테고리 prefix나 날짜 문자열이 제목에 섞여 들어오는 문제가 있어 cleanTitle 규칙으로 후처리했습니다.
생성 모델이 코드블록이나 설명 텍스트를 섞는 경우가 있어:
으로 운영 안정성을 확보했습니다.
이번 파이프라인의 핵심은 “많이 모으는 것”이 아니라,
실제로 월요일 아침에 읽을 만한 신호만 남기는 것이었습니다.
n8n으로 수집/오케스트레이션을 만들고,
Upstage Solar로 필터링/생성을 맡기고,
Document Parse로 논문 맥락을 보강하니,
뉴스레터 품질과 운영 효율을 동시에 가져갈 수 있었습니다.
이 글이 비슷한 자동화 워크플로우를 설계하는 분들께 작은 레퍼런스가 되면 좋겠습니다.
현재 이 워크플로우는 실제 발송으로 운영 중입니다.
아래 폼을 등록하면 A.DIFF 뉴스레터를 실제로 받아볼 수 있습니다.