---
task_id: task-1959
type: context
scope: task
created: 2026-04-19
updated: 2026-04-19
status: in-progress
---

# 맥락 노트: task-1959

**task**: task-1959

---

## 결정 근거

### 3 Step Why 자문

**1st Why: "왜 이 설계가 필요한가?"**
Phase 4는 인슈로의 핵심 차별화 기능인 AI 자동화를 구현하는 단계. 보험설계사가 콘텐츠를 수동으로 각 채널에 올리는 과정을 자동화하여, 사용자의 시간 절약과 생산성 향상이 핵심 가치.

**2nd Why: "왜 subprocess CLI 호출 방식이 최선인가?"**
ThreadAuto와 티스토리 발행은 이미 검증된 독립 스크립트가 존재. API 직접 호출 시 인증/세션 관리가 복잡해지고, 기존 코드와 이중 관리 문제 발생. subprocess 호출은 (a) 기존 검증된 코드 재사용, (b) 장애 격리 (자식 프로세스 crash가 서버에 영향 없음), (c) 독립 업데이트 가능이라는 이점.

**3rd Why: "왜 subprocess가 API 래퍼나 라이브러리 import보다 나은가?"**
(a) ThreadAuto는 별도 Python 프로젝트로, 의존성이 다름 (Playwright, Chrome 프로필 등). import하면 의존성 충돌 위험.
(b) CLI는 exit code + stdout으로 결과를 반환하므로 인터페이스가 명확.
(c) 작업 지시서의 "절대 규칙"이 API 직접 호출을 명시적으로 금지.
→ A-B-C 논리 일관: 기존 검증 코드 활용 + 장애 격리 + 의존성 분리 = subprocess 최선

### C5 AutomationStepper UI 설계
- 데스크톱: 수평 스텝 타임라인
- 모바일(768px 미만): 수직 타임라인 레이아웃
- 단계: D(데이터) → B(키워드) → A(콘텐츠) → C(발행)
- 실시간 상태 업데이트: Supabase Realtime 구독 (폴백: 5s 폴링)

### C6 OAuth 토큰 관리
- AES-256-GCM 사용 이유: GCM 모드는 인증 태그 포함으로 무결성 보장
- 마스터키: INSURO_TOKEN_MASTER_KEY 환경변수 (32바이트 base64)
- 토큰 갱신: cron으로 만료 7일 전 자동 갱신

## 참조 자료

- 인슈로 시스템 계획서: `memory/plans/insuro-system/plan.md`
- 인슈로 체크리스트: `memory/plans/insuro-system/checklist.md`
- ThreadAuto CLI 가이드: `memory/projects/threadauto/cardnews-cli-guide.md`
- 티스토리 발행 스킬: `skills/blog-publish-tistory/SKILL.md`
- InsuRo 프로젝트: `/home/jay/projects/InsuRo/`
- ThreadAuto 프로젝트: `/home/jay/projects/ThreadAuto/`

## 주의사항

- API 직접 호출 금지 — CLI/subprocess만 사용
- premiumOnly 미완성 디자인 건드리지 말 것
- ThreadAuto/티스토리 발행은 기존 스크립트를 subprocess로 호출
- Phase 3 미완성 항목(H5, K1, B1-B3, D1-D3)은 이 작업 범위 밖
