네이버 블로그 매일 자동 포스팅 시스템 설계

report sent · 18분 읽기 · 8648자

작성자 claude-code 시각 2026-05-07 17:38 KST 프로젝트 naver-blog 수신 jadong
📥 MD 📥 PDF

네이버 블로그 매일 자동 포스팅 시스템 설계

작성일: 2026-05-07 환경: vhagar (kontology) + Galaxy S23+ (USB ADB) 계정: 분유타는대표 (tidtyd222) — 1계정 우선, 안정화 후 민지(wngmlxx12) 추가 핵심 도구: mobilerun (droidrun) + DeepSeek V4 + Naver SearchAd API


1. 전체 아키텍처

┌──────────────────────────────────────────────────────────────┐
│  systemd timer (매일 19:00 — 분유타는대표 시간대)              │
│                                                              │
│  ① keyword_engine    → 오늘의 키워드 선정                     │
│  ② content_generator → DeepSeek V4 원고 생성                  │
│  ③ seo_formatter     → SE 호환 HTML 변환                      │
│  ④ phone_poster      → mobilerun → S23 Chrome → SE → 발행    │
│  ⑤ result_logger     → Supabase 로깅 + Telegram 알림         │
│                                                              │
└──────────────────────────────────────────────────────────────┘

파일 구조

~/projects/naver-blog/
├── automation/
│   ├── pipeline.py                  # 메인 오케스트레이터
│   ├── keyword_engine.py            # 키워드 선정
│   ├── content_generator.py         # 원고 생성 (DeepSeek V4)
│   ├── seo_formatter.py             # SE 호환 HTML 변환
│   ├── phone_poster.py              # mobilerun S23 포스팅
│   └── result_logger.py             # Supabase 로깅
├── templates/
│   ├── info_post.jinja2             # 정보성 글 프롬프트 템플릿
│   └── daily_post.jinja2            # 일상 글 프롬프트 템플릿
├── config/
│   ├── accounts.yaml                # 계정별 설정
│   └── keywords_used.json           # 사용된 키워드 이력
├── account_01_분유타는대표/
│   ├── drafts/
│   ├── published/                   # 발행 완료 (날짜별 .md + .html)
│   ├── queue/                       # 발행 대기열
│   └── images/
└── docs/
    └── specs/                       # 이 문서

2. 콘텐츠 생성 파이프라인

2.1 키워드 선정 (keyword_engine.py)

데이터 소스:

선정 로직:

단계 동작
카테고리 결정 비율 준수 라운드로빈: 육아40% / 자영업25% / 보안IT20% / 운동15%
키워드 필터링 미사용 + 경쟁도 낮음~중간 우선 (블루오션 전략)
검색량 확인 SearchAd API로 실시간 검색량 조회 (최소 100+/월)
최종 선택 검색량/경쟁도 밸런스 점수 상위 1개

SaaS 리버싱 포인트 (Blai/BlogTalk 패턴):

2.2 원고 생성 (content_generator.py)

모델: DeepSeek V4 (경량, 한국어 성능 양호, 비용 $0.01~0.02/포스트 수준)

프롬프트 구성:

  1. 페르소나 주입: "보안회사 대표, 5개월 아들 원육아 중, 핏한 아빠. 톤: 솔직, 유머, 약간의 기술 용어 OK"
  2. 키워드 + SmartBlock 소제목 가이드 (Gazet 패턴: 네이버 SmartBlock 키워드 조회 → 네이버가 원하는 소제목 구조 파악)
  3. 템플릿 선택:
    • 정보성 (info_post): 검색 유입용. H2 3~4개, 1500~2500자, 이미지 슬롯 5~8개
    • 일상 (daily_post): 서이추/공감용. 800~1200자, 에피소드 중심, 질문 마무리
  4. marketer-system 규칙 적용:
    • V2(감정적합도) 최적화
    • 카피 파워 5피처 (MR, DA, ET, UC, GG)
    • 바디 핸들링 규칙 5개 + 안티패턴 5개

품질 검증 (자동):

실패 시: 재생성 1회 → 여전히 실패면 queue에 "needs_review" 상태로 저장

2.3 SEO 포매팅 (seo_formatter.py)

기존 검증된 CDP SE 메서드 (2026-05-02 확인):

변환 규칙:

요소 HTML 변환
제목 (H2) <p style="font-size:24px"><b>소제목</b></p>
본문 <p style="font-size:16px">내용</p>
강조 <b> 또는 <span style="color:#...">
이미지 [IMAGE_SLOT_N] 플레이스홀더 → Unsplash 무료 이미지 URL 자동 삽입 (Phase 1: 텍스트만 우선)
구분선 <hr>
해시태그 별도 필드로 분리하여 mobilerun에 전달

출력: clipboard-ready HTML 문자열 + 메타데이터 (title, tags[], category)


3. 폰 포스팅 자동화

3.1 mobilerun 셋업

# 설치 (vhagar)
pip install uv
uv pip install 'mobilerun[anthropic]'
export DEEPSEEK_API_KEY=<config_vault에서 조회>

# S23+ 셋업
mobilerun setup --device R3CW60BHSAT     # Portal APK + 접근성 활성화
mobilerun ping --device R3CW60BHSAT      # 연결 검증
mobilerun configure                       # provider=DeepSeek, model=deepseek-chat

Portal APK: mobilerun이 자동 설치. 접근성 트리 + 커스텀 키보드 IME 제공.

3.2 포스팅 흐름 (phone_poster.py)

Step 1: HTML → S23 클립보드 복사
        adb -s R3CW60BHSAT shell am broadcast -a clipper.set -e text "<html>"
        (또는 adb shell input 방식 — 테스트 후 결정)

Step 2: mobilerun agent 실행 (vision 모드)
        Goal:
          1. Chrome 열기
          2. m.blog.naver.com 이동
          3. 글쓰기 버튼 탭
          4. SE 에디터 로드 대기
          5. 제목 필드 탭 → 제목 입력
          6. 본문 에디터 탭
          7. 롱프레스 → 붙여넣기
          8. 해시태그 필드 → 태그 입력
          9. 발행 버튼 탭
          10. 발행 확인

Step 3: 발행 결과 확인
        - 스크린샷 캡처 → 성공/실패 판정
        - 발행 URL 추출 (가능한 경우)

3.3 네이버 로그인 세션

3.4 주요 제약 & 대응

제약 대응
SE 에디터 WebView → 접근성 트리 불완전 --vision 모드 필수
클립보드 HTML이 길면 adb 전달 실패 가능 파일 push → 폰에서 읽기 방식 fallback
mobilerun vision 토큰 비용 하루 1회 = ~$0.05~0.10, 월 $1.5~3 수준
UI 변경 시 agent 혼란 max_steps 40 + reasoning 모드로 적응력 확보

4. 스케줄링 & 모니터링

4.1 systemd timer

# /etc/systemd/user/naver-blog-post.timer
[Unit]
Description=Daily Naver Blog Post (분유타는대표)

[Timer]
OnCalendar=*-*-* 19:00:00
Persistent=true
RandomizedDelaySec=600

[Install]
WantedBy=timers.target
# /etc/systemd/user/naver-blog-post.service
[Unit]
Description=Naver Blog Posting Pipeline

[Service]
Type=oneshot
WorkingDirectory=/home/tlswk/projects/naver-blog
ExecStart=/home/tlswk/projects/naver-blog/.venv/bin/python -m automation.pipeline --account 분유타는대표
Environment=DEEPSEEK_API_KEY=...
TimeoutStartSec=600

4.2 모니터링 & 알림

성공: Supabase daily_log 기록 + published/ 이동
실패:
  ├─ 키워드 선정 실패 → 수동 키워드로 fallback, 알림
  ├─ 원고 생성 실패 → 1회 재시도, 여전히 실패 → queue에 needs_review
  ├─ 폰 포스팅 실패 → 3회 재시도, 여전히 실패 → Telegram 알림
  └─ 세션 만료 → Telegram "로그인 필요" 알림

Telegram 알림: 기존 Predator 인프라의 BalerionBot 활용.

4.3 Supabase 로깅

daily_log에 블로그 포스팅 결과 append (기존 컨텍스트 브릿지 트리거 준수):

{
  "type": "blog_post",
  "account": "분유타는대표",
  "keyword": "신생아 홈캠 추천",
  "category": "보안IT",
  "title": "...",
  "status": "published",
  "url": "https://blog.naver.com/tidtyd222/...",
  "word_count": 1850,
  "timestamp": "2026-05-07T19:03:22+09:00"
}

5. 에러 핸들링 & 복구

재시도 정책

단계 재시도 간격 최종 실패 시
키워드 선정 2회 즉시 수동 키워드 풀에서 랜덤 선택
원고 생성 1회 5초 queue/needs_review 저장
SEO 포매팅 0회 - 원고 그대로 plain text 포스팅
폰 포스팅 3회 60초 Telegram 알림, 다음날 재시도

네이버 저품질 방지 가드레일

기존 POSTING_STRATEGY.md 규칙을 코드로 강제:


6. SaaS 리버싱 대상

콘텐츠 생성 로직 고도화를 위한 리버싱 우선순위:

순위 서비스 RE 목표 방법
1 Gazet AI (gazet.ai) SmartBlock 키워드 → 소제목 구조 파이프라인 웹 네트워크 탭 감청
2 Blai (blai.co.kr) C-Rank/DIA 스코어링 모델 API 엔드포인트 분석
3 BlogTalk (blogtalk.io) 블로그 레벨 매칭 키워드 추천 크롬 확장 분석
4 AutoPanda (autopanda.co.kr) SE 에디터 브라우저 자동화 플로우 데스크탑 앱 디컴파일
5 naver-search-mcp (오픈소스) SearchAd API 호출 패턴 소스 직접 활용

7. 구현 순서 (Phase별)

Phase 1: MVP (1~2일)

Phase 2: 콘텐츠 자동화 (2~3일)

Phase 3: 스케줄링 + 모니터링 (1일)

Phase 4: 고도화 (지속)


8. 비용 추정 (월간)

항목 비용
DeepSeek V4 원고 생성 (30회/월) ~$0.30~0.60
mobilerun vision 토큰 (30회/월) ~$1.50~3.00
Naver SearchAd API 무료
Supabase 기존 인프라 (무료 티어)
합계 ~$2~4/월

의존성 정리

패키지 용도 설치
mobilerun[anthropic] 폰 자동화 uv pip install
deepseek SDK 원고 생성 pip install openai (DeepSeek은 OpenAI 호환)
jinja2 프롬프트 템플릿 pip install jinja2
pyyaml 설정 파일 pip install pyyaml
supabase-py 로깅 pip install supabase
requests HTTP 호출 기본 내장