기획부터 포스팅까지 자동화: Zenn(GitHub 연동)과 Qiita(API v2)를 하나의 리포지토리에서 운영하는 방법
요약
본 글은 AI 에이전트와 GitHub를 활용하여 기획부터 포스팅까지 전 과정을 자동화하는 시스템 구축 경험을 공유합니다. 핵심 원칙은 모든 기사 파일을 하나의 리포지토리에 보관하고, Zenn과 Qiita 등 여러 플랫폼에 공식 API만을 이용해 분산 처리하는 것입니다.
핵심 포인트
- 기사 파일 하나로 다중 매체 포스팅 자동화 가능
- 표준 라이브러리만 사용한 간결한 Python 스크립트 구현
- GitHub 리포지토리를 기획/로그 저장소로 활용하여 세션 연속성 확보
- 각 플랫폼의 공식 API 연동 방식을 준수하는 것이 중요함
기술 기사를 꾸준히 발행하는 것은 글을 쓰는 것 자체보다, 작성 후의 작업(두 매체로 옮기기, 태그 지정, 기록, 회고) 때문에 포기하기 쉽습니다.
이 글에서는 AI 코딩 에이전트와 함께 기획 → 집필 → 검증 → 포스팅 → 개선 과정을 하나의 GitHub 리포지토리에서 운영하는 시스템을 구축한 경험을 공유합니다.
방침은 단 하나입니다.
공식적으로 제공된 수단만을 이용해 자동화하기 위함입니다.
비공식 API를 호출하거나, 브라우저를 자동으로 조작하여 로그인 상태를 재현하는 방법은 선택하지 않았습니다. 그 이유는 후반부에 설명하겠습니다.
- 환경: Windows + Python 3.11 (추가 라이브러리 없음)
- 포스팅 대상: Zenn(주) + Qiita(부)
[기획] loop/queue.md (후보 및 상태)
|
[집필] articles/<slug>.md (본문 + frontmatter)
...
핵심은 기사 파일을 오직 하나만 가진다는 것입니다. Zenn용 frontmatter(title / emoji / topics / published)를 Qiita 포스팅 스크립트가 그대로 읽어와, 태그만 변환하여 포스팅합니다. 매체 간의 전송 작업이 발생하지 않습니다.
.
├─ AGENTS.md # AI 에이전트를 위한 운영 규칙
├─ articles/ # 기사. 여기가 유일한 원본입니다.
...
- Python 스크립트는 표준 라이브러리만 (urllib)을 사용했습니다. 가상 환경도,
pip install도 필요 없습니다. - API 토큰은.secrets/qiita_token.txt에 한 줄로 저장하고,.gitignore로 제외합니다. AI 에이전트에게는 '토큰을 채팅창에 붙여넣지 않기'와 함께 운영 규칙에 명시했습니다.
Zenn에는 GitHub 리포지토리와의 연동이 공식 기능으로 제공됩니다.
- Zenn 대시보드 → 'GitHub에서 배포(Deploy from GitHub)' → '리포지토리 연결'
- 연결할 리포지토리와, 배포 대상 브랜치(여기서는
main)를 설정합니다. - 그 후에는articles/*.md만 push하면 됩니다.
한 가지 주의할 점이 있습니다. 연결은 반드시 Zenn 측에서 시작해야 합니다. 먼저 GitHub 측에서 Zenn Connect를 설치해 버리면, Zenn으로 돌아왔을 때 연결 기록이 남지 않는다는 알려진 문제가 있습니다.
기사의 frontmatter는 다음과 같습니다.
---
title:
또한 `loop/queue.md`에 기획 후보와 상태(후보 / 집필 중 / 공개됨 등)를 저장하고 있습니다. AI 세션은 매번 깨끗하기 때문에, **큐와 공개 로그를 리포지토리에 보관**함으로써 다음에 어떤 세션부터 재개하더라도 동일한 루프를 계속할 수 있습니다.
note는 개인용 포스팅 API가 없습니다(note pro용 'note API'는 제휴 서비스의 초안 저장에 한정됩니다). 게다가 2026년 2월에는 기계적인 대량 포스팅이나 외부 서비스를 이용한 자동화에 대한 대응 강화가 공식 발표되었으며, '위반 시 사전 통지 없이 이용이 정지될 수 있으며, 통지 의무를 지지 않는다'는 내용도 약관에 명시되어 있습니다.
'약관상 특정 언급이 없으면 괜찮다'라고 해석하는 것은 판단의 여지가 모두 운영 측에 있다는 의미이므로, 이쪽(사용자)에게 유리한 자료가 될 수 없다는 것이 조사 후 내린 결론이었습니다.
X API는 2026년 2월부터 종량제(従量課金制)로 전환되며, 신규 계정은 최초 $5의 충전 없이 포스팅할 수 없습니다(포스팅당 $0.01). 따라서 기사 게시처로는 주축에서 제외하고, 공지용으로 나중에 추가하거나 검토하는 중입니다.
Zenn은 push 이후 Zenn 측에서 배포가 실행됩니다. 성공 여부는 대시보드의 배포 이력에서 확인할 수 있으므로, 여기는 사람의 눈(또는 스크린샷을 찍는 메커니즘)이 필요한 지점입니다. 반대로 말하면, 그 외의 과정은 전부 명령어로 완료됩니다.
- 게시처는 **공식적인 수단이 있는 곳** (Zenn = GitHub 연동, Qiita = API v2)을 선택하는 것이 약관 리스크를 피하면서 push와 API만으로 자동 포스팅을 돌릴 수 있습니다. 기사 파일을 하나로 만들고 미디어별 차이점(태그 표시명)만 코드로 흡수하면, 복사 붙여넣기 없이 양쪽 매체에 게시할 수 있습니다.
- 자동화 자체보다는 **'검증을 강제하는 AGENTS.md'와 '기획 큐'**가 AI와 함께 하는 기사 운영에서는 더 효과적입니다.
Zenn도 Qiita도 무료 플랜만으로 구성되어 있으므로, 같은 형태는 그대로 따라 할 수 있습니다. 이 구성이 누군가의 참고가 되기를 바랍니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Qiita AI의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기