안녕하세요. 대학에서 고고학을 전공했지만, 끝없는 수작업(말 그대로 삽질, 노가다)을 해결해보고자 개발자가 된 엔지니어입니다.

오랜 고민 끝에 제가 직접 쓰려고 만든 뉴스레터 자동화 엔진(LLM Newsletter Kit)을 오픈소스로 공유합니다.

현재 이 엔진은 제가 운영 중인 문화유산 뉴스레터 '리서치 레이더'의 코어이며, 클릭률(CTR) 15%를 유지하면서도 발행당 LLM API 비용은 $0.20 수준으로 최적화되어 있습니다.

단순한 링크 모음이 아니라, 전문 도메인의 지식을 LLM이 분석하고 요약하여 인사이트를 제공하는 파이프라인입니다.

개발 배경과 솔직한 이야기

코드 기반인 만큼 노코드 툴에 비해 진입장벽이 있어 대중적으로 널리 쓰이지 않을 수도 있다고 생각합니다. 애초에 널리 쓰이는 것을 목표로 하기보다, 저의 확실한 니즈를 해결하기 위해 만들었기 때문입니다.

처음에는 저 혼자 보려고 만든 '문화유산 특화 뉴스레터'였습니다. 이후 누구나 구독할 수 있도록 서비스를 열었습니다.

개발하다 보니 소스코드와 문화유산 도메인 로직이 너무 강결합되어 있었습니다. 이를 해결하기 위해 DI(의존성 주입) 구조로 추상화하여 누구나 쓸 수 있는 라이브러리로 분리했습니다.

npm i @llm-newsletter-kit/core

현재 저의 서비스도 과거의 강결합된 레거시 코드를 버리고, 이 오픈소스 코어를 기반으로 마이그레이션하여 운영 중입니다.

설계 철학: "Logic in code, reasoning in AI"

노코드 툴 대신 코드를 선택한 이유는 제 설계 철학 때문입니다. "로직은 코드로, 추론은 AI로, 연결은 아키텍처로(Logic in code, reasoning in AI, connections in architecture)."

노코드 툴은 편하지만, 복잡한 로직을 구현하기엔 한계가 명확했습니다. 결정적인 워크플로우는 타입 안전한 코드(TypeScript)로 통제하고, 지능적인 분석만 LLM에게 맡김으로써 자기 성찰(Self-reflection)이나 다단계 검증 같은 정교한 로직을 구현했습니다.

주요 특징

Type-First & DI 설계: TypeScript로 작성되었으며 크롤링, 분석, 생성 등 모든 단계가 Provider 인터페이스 기반이라 부품 갈아 끼우듯 교체가 가능합니다.

Bring Your Own Scraper: 특정 라이브러리에 락인되지 않습니다. Puppeteer, Cheerio, 혹은 AI 기반 파서 등 원하는 무엇이든 비동기로 주입해 쓸 수 있습니다.

Production Ready: 실제 운영을 위해 재시도 로직(Retries), 체인 옵션, 테스트 커버리지 100%를 갖췄습니다.

링크

감사합니다. 피드백은 언제나 환영합니다!