AI 매거진을 혼자 운영하는 법 — 밤에 수집·집필하고 아침에 검수해 발행하는 구조
숭블리랩 AI매거진은 2026년 7월 29일에 열었다. 전날 나온 전 세계 AI 소식을 밤사이 AI가 읽고 기사로 쓰면, 아침에 내가 사실만 확인해 내보내는 웹진이다. 기사는 AI가 쓰고 사람은 검수만 한다. 한 사람이 매일 발행하는 매체를 굴릴 수 있는 건 이 분업 때문인데, 한 달 돌려 보니 “어디까지 자동이고 어디서 사람이 막아서는가"가 이 프로젝트의 전부였다. (실험실 카드)

밤에 일어나는 다섯 단계
파이프라인은 새벽 5시 30분에 돈다. 순서는 고정이다.
- 수집 — RSS로 전날 자료를 모은다. 0건이면 여기서 멈추고 “발행 중단"을 남긴다. 부분 성공을 성공으로 위장하지 않는다.
- Triage — 비슷한 글을 토픽으로 묶고 점수를 매긴다. 같은 소식을 다룬 소스가 몇 개인지가 여기서 정해진다.
- FactSheet — 토픽별로 “확인된 사실"만 목록으로 뽑는다. 원문은 이 단계에서 끝난다.
- Writer — FactSheet만 받아 기사를 쓴다. 원문 문장은 한 글자도 받지 않는다.
- Verifier — 생성문을 대조한다. 소스 2개 이상, 1차 소스 1개 이상, 출처 URL 유효, “AI 작성 · 에디터 검수” 표기, 언론 표현 없음, 투자 조언 표현 없음, 한글 비율, 그리고 본문의 수치·날짜가 FactSheet 근거 풀에 있는가. 하나라도 어긋나면 발행 큐가 아니라 격리(blocked)로 간다.
통과한 글은 status=review로 검수 큐에 쌓이고, 개별 항목을 모아 모닝브리핑 한 편을 조립한다. 새 브리핑이 검증에 실패하면 기존 발행본을 덮지 않는다. 아침 7시 반쯤 내가 큐를 열어 읽고 승인하면 그때 published가 된다.
Writer에 원문을 주지 않는 이유
3번과 4번 사이의 벽이 이 매거진의 핵심 안전장치다. 남의 기사 원문을 LLM에 넣고 “다시 써 줘"라고 하면 결과물은 표현만 바꾼 복제가 되기 쉽다. 그래서 원문 → 사실목록 → 사실목록만으로 작성, 이 2단계를 강제한다. Writer 함수는 아예 원문 텍스트를 인자로 받지 못하게 만들었고, 누가 실수로 넘기면 테스트가 실패한다. 프롬프트에 “원문 베끼지 마"라고 적는 것과 코드 구조상 베낄 수 없게 하는 것은 다른 일이다.
같은 원리로 “근거 없는 숫자"도 막는다. Writer가 FactSheet에 없는 수치를 만들어 내면 Verifier가 “FactSheet에 근거 없는 수치"로 잡아 격리한다. 환각을 없앨 수는 없지만, 환각이 발행까지 가는 길은 끊을 수 있다.
왜 사람 승인 없이는 발행이 안 되나
기술적으로는 Verifier를 통과한 글을 바로 올리면 된다. 일부러 안 했다. 파이프라인 산출물은 review까지만 가고, published로 바꾸는 권한은 검수 화면의 사람에게만 있다. 자동화 단계로 치면 지금은 “수집~생성 자동, 검수·발행은 사람"인 L1이고, 설계상 더 올라가더라도 발행 승인권은 사람이 쥔다.
이유는 두 가지다. 하나는 Verifier가 잡는 건 형식과 정합성이지 “이 사실이 맞는가"가 아니라는 것. 소스 두 개가 같은 오보를 냈으면 기계는 통과시킨다. 다른 하나는 책임이다. 내 이름으로 나가는 글을 내가 안 읽고 내보내는 구조를 만들면, 잘 돌아가는 날에는 편하고 한 번 틀리는 날에 변명이 없다. 아침 30분은 그 값이다.
언론이 아니다
처음부터 정한 선이다. ‘기자·보도·취재·단독·속보’ 같은 말은 쓰지 않고 ‘에디터·매거진·브리핑·이슈·리뷰’만 쓴다. 이것도 말로 두지 않고 Verifier가 린트해서 위반 시 차단한다. 실제로 SK하이닉스 실적 기사가 ‘목표주가’와 ‘신문’이라는 단어 때문에 차단된 적이 있다. 가드가 의도대로 작동한 사례였다. 반대로 출처 각주에 적힌 매체명 ‘전자신문’까지 걸려 멀쩡한 기사가 막힌 적도 있어서, 언론·조언 검사는 본론만 보도록 고쳤다. 금융 소식을 다루더라도 조언이나 권유가 아니라 정보 전달로만 쓰고 면책을 붙인다.
운영하며 겪은 사고
7월 31일 밤, 502. 사이트가 밤새 죽어 있었다. 로컬 서비스가 죽어 터널이 502를 돌려주는 상황이었고, 감시기는 아침 8시 14분에 재기동을 시도했지만 파이썬이 켜지자마자 죽었다. 재현해 보니 범인은 서비스 등록부의 실행 명령이었다. set PYTHONUTF8=1 && python app.py 꼴로 적어 둔 명령에서 cmd가 && 앞 공백까지 값에 포함시켜 환경변수가 “1 “이 됐고, 파이썬은 그 값을 보고 즉사했다. 그동안은 감시기가 남이 띄워 둔 프로세스를 “입양"만 해 와서 냉기동 버그가 숨어 있었고, 전날 잦은 수동 재시작 뒤 첫 냉기동에서 터졌다. 명령을 set "VAR=VAL" 인용부호식으로 바꿨고, 같은 잠복 버그가 있던 다른 서비스 둘도 함께 고쳤다. 교훈은 “수동 재시작 대신 감시기 관리 하에 둘 것"으로 착륙 문서에 남겼다.
아침 미발행. 같은 날 아침 자동발행이 게이트에 막혔다. 일정 항목 수를 세는 검사가, 전날 여러 지표를 한 줄로 묶은 기능 때문에 “1줄 < 2"로 오탐한 것이다. 8월 6일에도 선별 규칙과 게이트 요구 건수가 충돌해 발행이 막혔다. 둘 다 게이트가 잘못 막은 경우지만, 대응은 게이트를 끄는 게 아니라 원인을 고치는 것이었다. 게이트가 발행을 차단하는 건 정상 작동이다.
혼자 돌리는 데 드는 것
매일 드는 사람 시간은 아침 검수 30분이다. 나머지는 고장 났을 때 들어간다. 테스트는 85건이 돌고 전부 통과가 원칙이다. 콘텐츠는 데일리 모닝브리핑, 위클리 기획·리뷰, 먼슬리 호, 그리고 사람이 직접 쓰는 숭블리 칼럼 네 기둥인데 칼럼만 자동화 대상에서 뺐다. 홍보 계획서 첫 줄에 “만들면 온다는 없다"고 적어 두었고, 지금은 콘텐츠와 독자 기반을 쌓는 단계다.
정리하면 이렇다. 밤에는 기계가 모으고 추리고 쓰고 거른다. 아침에는 사람이 읽고 결정한다. 중간에 원문이 Writer로 넘어가지 않고, 승인 없이는 아무것도 공개되지 않는다. 이 두 벽만 지키면 1인 매거진은 돌아간다. 벽을 허물면 더 빨라지겠지만, 그때부터는 내가 운영하는 매거진이 아니라 내가 책임만 지는 기계가 된다.
이 글은 제 여행 기록과 작업 로그를 바탕으로 초안을 AI와 함께 정리하고, 직접 편집했습니다.