프로세스 분석 · 서비스 기획서
seolcoding_calendar_agent · 2026-04-17

📌 현상 진단

현상
네이버 캘린더 · Slack 강의 공지 · Discord 강사구인 포럼에 흩어진 일정을 매일 수기로 확인하고, [윤희]/[지환]/[지훈] 라벨을 붙여 구글 캘린더에 다시 옮겨 적는다.
빈도
주 15~25회
네이버 일 1~2회 · Slack/Discord 주 2~3회 · 잦은 재동기화/중복 정리
영향 범위
가족 4인
운영자(부) · 배우자(윤희) · 지환(10세, 초등) · 지훈(7세, 유치원 16시 하원 보호자 필수)
시간 낭비 (Before)
월 14.6시간 / 주 3.5시간
네이버 수작업 일 20분 + Slack 강의 파싱 주 80분 + Discord 주 20분. 실수·중복·누락 발생 시 추가 복구.
현재 대안 (수작업 루틴)
네이버 앱에서 눈으로 확인 → 구글 캘린더 수기 입력 → 가족별 캘린더로 드래그 이동 → Slack/Discord 공지를 한 줄씩 읽어 요약 → 중복·오탈자 수동 정리.

🧭 AS-IS 프로세스 (현재 · 수작업)

1
네이버 캘린더 열람 · 오늘/이번주 확인
가족 공유 네이버 캘린더에서 새 이벤트 스캔
5분
2
구글 캘린더에 제목/시간/장소 재입력
건당 1분 × 일 평균 10건
10분
3
[윤희]/[지환]/[지훈] 라벨·캘린더 수동 분류
키워드 판독 → 대상 캘린더 선택 → 색상 조정
2분
4
Slack/Discord 공지 원문 파싱·요약
회사·강의명·일정·인원 추출 후 캘린더 이벤트로 변환
건당 3~5분
5
중복·누락·라우팅 오류 복구
같은 이벤트가 두 번 들어가거나 엉뚱한 캘린더로 간 경우 수동 정정
주 10분+
Pain Point · 소스 3개 × 가족 구성원 4명 × 캘린더 6개의 매트릭스를 사람 머리로 매일 유지해야 한다. 지훈 16시 하원(보호자 필수) 같은 고정 제약은 기억에만 의존 — 충돌 발견이 사후적이다.

🚀 TO-BE 프로세스 (AI 에이전트 적용 후)

1
/sync-all --dry-run 실행 → 미리보기 JSON 확인
Naver CalDAV sync-collection + Slack/Discord incremental fetch → NormalizedEvent 정규화 → triage 자동 라우팅 → 중복 체크
10초
2
승인 후 --execute → gws CLI로 Google Calendar upsert
state.sqlite에 event_map/sync_token 영속화 → 재실행 시 idempotent
15초
자동화 대상 · (1) 다중 소스 incremental fetch · (2) 이벤트 정규화 · (3) 키워드 기반 가족별 triage · (4) 중복 제거 · (5) 소프트 삭제 · (6) 실행 전 dry-run 안전장치.

💡 AI 적용 가설

AI Hypothesis
"Naver·Slack·Discord의 원문 이벤트를 입력하면, 가족 구성원별 타겟 캘린더로 자동 분류·중복 제거된 Google Calendar 이벤트를 15초 안에 출력하는 도구"

🎯 문제 정의 · 사용자 · 시나리오

문제 한 문장
가족 운영자가 네이버·Slack·Discord 3개 소스의 일정을 매일 수기로 구글 캘린더 6개에 분류·복제하느라 주 3.5시간을 쓴다.
대상 사용자
가족 스케줄 운영자(부모) — Claude Code CLI를 쓸 수 있고, 배우자·자녀 일정을 단일 구글 캘린더 체계로 통합해야 하는 사람.
사용자 시나리오 · "가족 운영자아침 출근 전 3분 · 저녁 9시 3분 두 시점에 Claude Code의 /sync-all 슬래시 커맨드를 실행해, Naver·Slack·Discord의 새 이벤트를 dry-run으로 미리 보고 한 번에 승인하면 그 순간 Google Calendar(Family/YoonHee/Kids/SpartaSlack/WokaDiscord)가 최신 상태가 된다."

📊 Before → After · 성공 기준

Before
3.5시간
/ 주 (수작업 + 복구)
After
15분
/ 주 (승인 체크만)
성공 기준 · 시간 절감
주 3.5시간 → 주 15분
약 93% 감축, 월 13시간 확보
성공 기준 · 품질
중복/오분류 ~5% → 0%
state.sqlite dedup + whitelist 라우팅으로 재실행에도 idempotent

✅ Must Have (반드시 만들 것)

Must · 완료

① Naver CalDAV → Google 동기화 + 가족별 자동 라우팅

입력
네이버 CalDAV 엔드포인트 · 앱 비밀번호 · 직전 sync-token
처리
sync-collection → calendar-multiget → NormalizedEvent → triage 키워드 매칭([윤희]/[지환]/[지훈]) → dedup → gws upsert
출력
YoonHee/Kids/Personal 캘린더에 반영된 이벤트 + state.sqlite 갱신 + JSON 런 로그
예상 개발 시간 · 완료 (Phase 0·1)
Must · 완료

② Slack 강의 · Discord 워카 포럼 → 캘린더 등록

입력
Slack xoxc 토큰 + d-cookie · Discord 사용자 토큰 · 포럼/채널 ID
처리
Slack 공지는 GPT-5-mini로 구조화 파싱, Discord는 woka-bot 포맷 regex 파싱 → NormalizedEvent → upsert
출력
SpartaSlack / WokaDiscord 캘린더에 회차별 이벤트(1차/2차 분리)
예상 개발 시간 · 완료 (Phase 2·5)
데모 시나리오 한 줄 · "/sync-all --dry-run을 넣으면 네이버·Slack·Discord의 새 이벤트가 가족별 구글 캘린더로 라우팅된 미리보기 JSON이 나온다."

🧩 Should Have · Won't Have

Should Have (여유 시)

자연어 질의 /query · "다음주 가능 시간" 같은 질문 응답 (Phase 4 스텁)
돌봄 공백 분석 /childcare-help · 지훈 16시 하원 보호자 공백 자동 감지

Won't Have (명시적 제외)

공개 배포 · 외부 사용자용 UI (내부 개인 도구로 고정)
실시간 webhook 푸시 · 모바일 네이티브 앱 · 별도 웹 대시보드

⏱ 시간 필터

Must Have 기능이 주어진 시간 안에 데모 가능한가?   Yes — 이미 구현 완료
예상 개발 시간 합계가 개발 파트 시간 이내인가?   Yes — Phase 0·1·2·5 배포 완료
Python 3.11 + uv Click CLI CalDAV sync-collection GPT-5-mini 파서 gws CLI 래퍼 SQLite 상태 저장 JSON 출력 (agent-native) dry-run 기본