본문으로 건너뛰기
White Place: AI 뉴스 자동 발행 파이프라인 화면
LIVEAI 뉴스 매일 자동 발행 중, 보안 뉴스는 2026-10-09부터 일시 중지
2026.04 – NOW

White Place: AI 뉴스 자동 발행 파이프라인

이 사이트의 AI 뉴스는 AI가 씁니다(보안 뉴스 루틴은 2026-10-09부터 일시 중지, 글은 유지). 저는 그 글이 사람 확인 없이 배포돼도 되는 조건을 설계했습니다. 빌드보다 먼저 머지된 사고, 98일간 알림 없이 멈춘 정체, 자체 점수 98점짜리 글의 사실 오류 7개를 겪으며 게이트와 감시를 다시 만들었습니다.

ROLE
1인 설계·운영
PERIOD
2026.04 – NOW
STACK
GitHub Actions · Vercel · Next.js · Claude
OUTPUT
AI 작성 글 124편
  1. 2026.04

    AI 작성 PR로 발행 시작

  2. 2026.05

    claude.ai 루틴 + 자동 머지 도입

  3. 2026.06 (전환점)

    빌드 전 머지로 12시간 배포 실패

  4. 2026.06–10 (전환점)

    98일 정체, 알림 0건

  5. 2026.10

    빌드 게이트·정체 감시 재설계

요약

2026년 4월부터 이 사이트의 AI 뉴스는 AI가 쓰고, 사람 확인 없이 자동으로 머지됩니다. 5월부터는 보안 뉴스도 같은 방식으로 돌렸고, 보안 뉴스 루틴은 2026-10-09부터 일시 중지했습니다(쓴 글은 그대로 둡니다). 지금까지 AI가 쓴 글은 124편(AI 뉴스 119, 보안 뉴스 5)입니다.

저는 그 글을 직접 쓰지 않습니다. 대신 AI가 쓴 글과 코드가 사람 확인 없이 프로덕션에 들어가도 되는 조건을 설계하고 운영합니다.

최근 발행은 AI 뉴스 2026-10-31, 보안 뉴스 2026-10-08입니다. 이 페이지의 수치는 빌드할 때 실제 글 목록에서 다시 계산됩니다.

구조

claude.ai 루틴 → claude/* 브랜치 push → PR 자동 생성 → 머지 게이트 → main → Vercel 배포

루틴 환경에는 gh CLI가 없고, push 브랜치 이름도 시스템이 임의로 정합니다. 그래서 "루틴이 PR을 연다" 대신 "push를 감지한 GitHub Actions가 PR을 대신 연다"로 구조를 뒤집었습니다.

처음 버전은 잘 돌았습니다. 문제는 잘 돌지 않을 때 드러났고, 아래 사고들이 지금 구조를 만들었습니다.

사고 1. 빌드보다 머지가 먼저였다

첫 게이트는 파일 경로 allowlist와 시크릿 스캔만 보고 바로 머지했습니다. Vercel 프리뷰 빌드는 3분 반이 걸리는데, 머지는 1분 안에 끝났습니다.

6월에 lint 에러(안 쓰는 변수 하나)가 있는 글(PR #114)이 빌드 실패 37초 전에 머지됐습니다. 프로덕션 배포는 12시간 동안 실패했습니다. 복구는 다음 루틴 글(#115)이 자기 범위 밖의 기존 인포그래픽을 고치면서 이뤄졌는데, 옛 게이트는 그 수정도 그냥 통과시켰습니다. 결과는 좋았지만 루틴이 기존 파일을 마음대로 고칠 수 있다는 뜻이었습니다.

설계. 선택지를 세 개 놓고 비교했습니다.

안장점버린 이유
Actions에서 직접 빌드Vercel 의존 없음PR당 4~6분 과금. LLM이 쓴 코드를 토큰이 있는 러너에서 실행
GitHub 브랜치 보호 + auto-merge가장 표준적무료 플랜 private 저장소에서 API 403
Vercel 프리뷰 결과를 게이트로프로덕션과 같은 빌드, 추가 과금 0채택

채택한 게이트는 Vercel 빌드가 성공한 커밋만, 그 커밋 SHA로 고정해서 머지합니다. 검증한 뒤 새 push가 끼어들어도 머지되지 않습니다. 여기에 규칙을 더했습니다.

  • 새 파일만 허용합니다. 기존 글이나 컴포넌트를 고치면 사람 리뷰로 넘어갑니다
  • [slug] 같은 공용 렌더러 경로는 막습니다. 예전 allowlist 정규식은 이걸 통과시키고 있었습니다
  • 새 .tsx는 허용된 import만 쓸 수 있고, 환경 변수·네트워크·동적 코드 실행 같은 위험 API는 막습니다

검증. 과거 뉴스 PR 40건을 새 게이트에 재생해 판정을 비교했습니다. 빌드 실패, 공용 렌더러 수정, 리뷰 필요 표시를 일부러 넣은 테스트 PR도 모두 막히는 것을 확인했습니다.

사고 2. 98일 동안 알림이 없었다

6월 29일 이후 98일 동안 AI 뉴스가 한 편도 올라오지 않았습니다. 루틴은 켜져 있었습니다. 처음엔 매번 20초 만에 실패했고, 9월 초부터는 실행 자체가 없었습니다.

원인은 두 가지가 겹쳐 있었습니다.

  1. 계정 쪽 인증 오류(403)로 루틴 실행이 실패
  2. 보안 뉴스 루틴에 AI 뉴스 지침이 잘못 등록되어 있었음. 그래서 5월 이후 보안 뉴스는 0건, 6월엔 AI 뉴스만 하루 2건씩 올라왔습니다

더 큰 문제는 감시가 없었다는 점입니다. 30분마다 대기 PR을 찾는 워크플로 2개가 30일 동안 771번 실행됐는데, 머지할 PR이 0건이라는 사실을 아무에게도 알리지 않았습니다.

설계.

  • 정체 감시(watchdog)를 하루 4회 돌립니다. AI 뉴스 72시간, 보안 뉴스 7일 동안 머지가 없거나 PR이 6시간 넘게 방치되면 GitHub Issue와 메일로 알립니다
  • 30분 폴링을 버리고 Vercel 빌드 완료 이벤트로 게이트를 깨웁니다. GitHub 스케줄은 실측해 보니 예정 슬롯의 10~27%만 실행돼서 백업으로만 둡니다

루틴 지침 원문도 저장소 문서로 옮기고, 루틴에는 "이 파일을 읽어라"는 포인터만 남겼습니다. 등록본과 원본이 어긋날 여지를 없앤 것입니다.

사고 3. 원문을 안 읽고 100점

10월 5일, 재가동한 루틴의 글이 자체 점수 100점으로 자동 머지됐습니다. 확인해 보니 원문을 하나도 읽지 못하고 검색 요약만으로 쓴 글이었습니다. 루틴 환경의 네트워크가 뉴스 사이트 접속을 막고 있었고, 루틴은 그 사실을 점수에 반영하지 않았습니다. 다음 날 글은 89점으로 사람 리뷰에 걸렸습니다.

설계.

  • 원문을 2곳 이상 직접 읽지 못한 글은 점수와 상관없이 사람 리뷰로 보냅니다
  • 루틴 환경의 허용 도메인을 정리했습니다. example.com만 넣으면 www.example.com이 막혀서, 도메인마다 둘 다 등록합니다

검증. 규칙을 넣은 직후 올라온 글(#146)이 자체 점수 98점이었지만 원문을 1곳만 읽어 사람 리뷰로 넘어왔습니다. 원문 30여 건과 직접 대조해 보니 발표 날짜, 협약 서명자, 인물의 역할 등 사실 오류가 7개 있었습니다. 고친 뒤 수동으로 머지했습니다. 점수가 높아도 걸러야 할 글이 실제로 있었던 셈입니다.

지금 상태

  • 보안 뉴스 루틴은 2026-10-09부터 일시 중지했습니다. 쓴 글은 그대로 두고, 보안 뉴스 정체 감시도 그동안 꺼 두었습니다. 지금 매일 도는 루틴은 AI 뉴스 하나입니다
  • 재설계 이후 루틴 글은 PR 생성부터 게이트, 머지, 배포까지 사람 손을 거치지 않습니다. 머지 주체는 GitHub Actions입니다
  • 게이트가 판단하지 못하는 글은 라벨이 붙은 PR로 남고, 방치되면 감시가 알립니다
  • 중복 검사도 고쳤습니다. 파일 수정 시각으로 최근 글을 고르던 방식이 매번 새로 clone하는 환경에서 무력해서, 5~6월에 머지되지 않은 브랜치가 28개 쌓였습니다. 지금은 글의 frontmatter 날짜 기준 최근 30일 목록을 봅니다
  • AI 뉴스 인포그래픽은 사이트 팔레트 4색 규칙을 따르고, 기본 Tailwind 색 클래스·투명도 표기·인라인 테두리 색 위반은 게이트가 PR에 경고 코멘트로 남깁니다

배운 점

AI의 자체 점수는 사실 정확도를 보장하지 않습니다. 검증은 생성한 쪽이 아니라 별도의 규칙이 해야 하고, 그 규칙의 기본값은 "머지 안 함"이어야 합니다.

98일 공백에서 진짜 문제는 실패가 아니라 침묵이었습니다. "잘 돈다"보다 "멈추면 알린다"를 먼저 만들고 나서야 자동 머지를 켜 둘 수 있었습니다.