배포·잔여 작업 체크리스트 (와카뷰)
Phase 1 A~C 이후 실행 트랙. 작업 단위를 하나씩 처리한다.
권위 문서: roadmap.md · decision-log.md · AGENTS.md.
사람 PoC(D)와 Phase 1 §3 기본값은 맨 마지막. 추측으로 채우지 않는다.
0. 통합 현황 (Claude + Cursor)
DONE — Claude (claude/project-planning-approach-ukdz31 계열)
DONE — Cursor 후속
NOW
- 앱 코드는 클로즈드 베타 직전 수준
https://msn.iykyka.com 라이브 + N3 완료 + Gemini 실초안 OK. 다음: N4 FCM·Android QA (선택)
- 실 FCM · Android UI 수동 QA · 사람 PoC 실행은 남음
NEXT 순서
N1 스모크 → N2 Docker(msn.iykyka.com) → N3 배포 안정화
→ N4 FCM·Android QA 등 → N5 사람 PoC(D) → 실제 베타 오픈
LOCKED
항목 템플릿
각 ID를 처리할 때 아래로 상태를 갱신한다.
Status: todo | doing | done | blocked
Depends on:
Acceptance: (체크리스트)
Notes:
N1 — 배포 전 스모크
| ID |
작업 |
Status |
완료 조건 |
| N1-1 |
서비스 기동 |
done (2026-07-31) |
8080/8001/5555 health·web 200. 코어를 현재 main으로 재기동 (ADMIN_API_TOKEN=dev-admin-token, ALLOW_DEMO_INVITE=1) |
| N1-2 |
API E2E |
done (2026-07-31) |
python3 scripts/e2e_a3.py → 16 passed, 0 failed |
| N1-3 |
Web 가입 스모크 |
done (API) |
DEMO-YKAVU 재사용 가입 + 토큰 발급 확인. /demo → DEMO-YKAVU. (브라우저 클릭 스모크는 로컬/테스터) |
| N1-4 |
말투 온보딩 스모크 |
done (코드경로) |
온보딩은 기기 로컬(drift); API 스모크에서는 대화 목록 진입 경로까지 확인. UI 탭은 테스터 |
| N1-5 |
핵심 메신저 스모크 |
done (API) |
DEMO 두 유저 → 연락처 → 대화 → 메시지. E2E에 draft/L1·거부권·화이트리스트 포함 |
| N1-6 |
프로덕션 CORS/API 메모 |
done (2026-07-31) |
아래 Notes |
로컬 포트 참고: 앱 5555, 코어 8080, AI 8001. Dart VM Service 고포트(예: 39369)는 디버그용 — 무시 가능.
데모 초대 코드(현재): DEMO-YKAVU (구 DEMO-BUNSIN 아님).
N1-6 Notes — msn.iykyka.com 변경 목록
| 항목 |
로컬 지금 |
프로덕션 필요 |
Flutter CORE_API_BASE |
http://127.0.0.1:8080 / emulator 10.0.2.2 |
https://msn.iykyka.com (또는 API 서브경로/서브도메인 — compose에서 확정) |
| CORS Allow-Origin |
corsMiddleware()가 요청 Origin 반사(로컬 localhost:5555 확인됨) |
동일 미들웨어면 same-origin 또는 https://msn.iykyka.com Origin 허용. 와일드카드+Credentials 조합 주의 |
| AI |
AI_SERVICE_URL=http://127.0.0.1:8001 |
compose 내부 http://ai-service:8001 (외부 미노출, N2-A3) |
| DB |
SQLite dev.db |
DATABASE_URL=postgres://… (N2-A2) |
| Admin |
ADMIN_API_TOKEN env |
Portainer secret (N2-A5) |
| Demo |
ALLOW_DEMO_INVITE=1, DEMO-YKAVU |
on 유지 (N2-A6) |
| WebSocket |
ws://host:8080 |
wss://msn.iykyka.com (AppConfig.wsBase) |
N2 — Docker 배포 (https://msn.iykyka.com) — Plan A
N2-A. 착수 전 결정 (Master 확인)
| ID |
결정 |
값 |
Status |
| N2-A1 |
구 Node MSN 교체 |
교체(Plan A) — msn.iykyka.com에 와카뷰 스택으로 컷오버 |
done (2026-07-31 Master 확정) |
| N2-A2 |
DB |
PostgreSQL (tech-design.md §8). compose에 postgres 서비스 + DATABASE_URL. SQLite는 로컬/테스트 전용 |
done (2026-07-31 Master 확정) |
| N2-A3 |
AI 서비스 노출 |
내부망만 — 외부 포트/도메인 미공개, core-backend만 AI_SERVICE_URL로 호출 |
done (2026-07-31 Master 확정) |
| N2-A4 |
클라이언트 제공 |
Web 우선 — compose에 Flutter web 서빙. 내부 APK는 N4/릴리즈 경로로 후속 |
done (2026-07-31 Master 확정) |
| N2-A5 |
시크릿 관리 |
Portainer/호스트 env만 — GEMINI_API_KEY, ADMIN_API_TOKEN, DB 비밀번호, FCM 등 git 커밋 금지 |
done (2026-07-31 Master 확정) |
| N2-A6 |
데모 초대 |
프로덕션 ALLOW_DEMO_INVITE=1 (on) — 테스터용 DEMO-YKAVU 유지. 베타 확대 전 재검토 |
done (2026-07-31 Master 확정) |
N2-A 전체 확정. 다음 구현 트랙은 N1 스모크 → N2-B (Dockerfile/compose, Postgres 포함).
N2-B. 이미지·compose
| ID |
작업 |
Status |
완료 조건 |
| N2-B1 |
core-backend Dockerfile |
done |
core-backend/Dockerfile — 이미지 빌드 성공 (GOTOOLCHAIN=auto, CGO) |
| N2-B2 |
ai-service Dockerfile |
done |
ai-service/Dockerfile — 이미지 빌드 성공 |
| N2-B3 |
Flutter web 빌드/서빙 |
done |
mobile/Dockerfile (flutter multi-stage) + deploy/nginx-web.conf (API/WS 프록시). 대안: mobile/Dockerfile.prebuilt |
| N2-B4 |
docker-compose.yml |
done |
root docker-compose.yml — postgres + ai(internal) + core(internal) + web 포트 |
| N2-B5 |
env 템플릿 |
done |
.env.example에 Postgres/PUBLIC_API_BASE/WEB_HOST_PORT 등 추가 |
| N2-B6 |
데이터 볼륨 |
done |
compose 볼륨 ykavu_pgdata |
| N2-B7 |
내부 DNS |
done (정의) |
compose 서비스명 postgres / ai-service / core-backend. 에이전트 VM은 bridge TCP 제한으로 런타임 검증 불가 — Portainer 호스트에서 확인 |
| N2-B8 |
CORS + API base |
done (2026-07-31) |
PUBLIC_API_BASE=https://msn.iykyka.com. OPTIONS CORS + 가입 확인 |
| N2-B9 |
리버스 프록시 |
done (2026-07-31) |
Nginx Proxy Manager host #7 → ykavu-web-1:80 |
| N2-B10 |
Portainer 스택 |
done (compose CLI) |
서버 ~/project/ykavu 에서 docker compose up -d --build (Portainer UI 아님) |
| N2-B11 |
구 MSN 컷오버 |
done (2026-07-31) |
iykyk_msn-service stop. NPM msn.iykyka.com → 와카뷰. 롤백: MSN start + NPM upstream 복구 |
| N2-B12 |
배포 스모크 |
done (2026-07-31) |
/health=status, /demo=DEMO-YKAVU, root 200, DEMO 가입 OK |
| N2-B13 |
운영 runbook |
done |
deploy-docker.md · deploy-portainer.md |
관련: 라이브 https://msn.iykyka.com · 서버 path ~/project/ykavu · web 포트 8788(+ NPM). 시크릿 git 금지.
N3 — 배포 직후 안정화
| ID |
작업 |
Status |
완료 조건 |
| N3-1 |
헬스/로그 |
done (2026-07-31) |
전 컨테이너 healthy. 공개 /health OK. 최근 로그에 OOM/502 없음 |
| N3-2 |
초대 발급 리허설 |
done (2026-07-31) |
POST /invites note=N3-rehearsal 발급·GET /invites 목록 확인 |
| N3-3 |
admin metrics |
done (2026-07-31) |
Bearer로 /admin/metrics·/admin/dashboard 200 |
| N3-4 |
Gemini |
done (2026-07-31) |
서버 GEMINI_API_KEY 주입·ai-service 재기동. 라이브 draft status=ok (예: 딱히? ㅋㅋ) |
| N3-5 |
백업 리허설 |
done (2026-07-31) |
pg_dump gzip → restore test DB → drop. ops-backup.md |
| N3-6 |
테스터 안내 |
done (2026-07-31) |
tester-guide.md |
N4 — 베타 품질 잔여
Track A — 메신저 UX (대화 열기 경로)
| ID |
작업 |
Status |
완료 조건 |
| N4-A1 |
내 사용자 ID 표시·복사 |
done |
대화목록·연락처에 MyUserIdChip |
| N4-A2 |
연락처 원탭 대화 + ID 필수 |
done |
숫자 peer ID 없으면 추가/대화 차단·안내 |
| N4-A3 |
빈 상태·에러·L0 패널 |
done |
L0는「입력창으로 옮기기」 |
| N4-A4 |
대화 목록 이름·밀도 |
done |
연락처 표시명 매핑 |
| N4-A5 |
프로덕션 web 재빌드 |
done |
msn.iykyka.com health 200 (3d00b00) |
| N4-A6 |
ID 없는 연락처 수정(PATCH)·배너 |
done |
「ID 입력」으로 peer ID 보강 |
Track B — 데모 콘텐츠 (테스터 페어링)
| ID |
작업 |
Status |
완료 조건 |
| N4-B1 |
/demo pairing_steps·notes |
done |
GET /demo에 페어링 단계 |
| N4-B2 |
테스터 가이드 페어링 문서화 |
done |
docs/tester-guide.md ID 교환 플로우 |
| N4-B3 |
가입 화면 페어링 안내 |
done |
Signup 데모 패널에 한 줄 팁 |
| N4-B4 |
프로덕션 core+web 재배포 |
done |
/demo pairing_steps OK (c7029ab) |
FCM
| ID |
작업 |
Status |
완료 조건 |
| N4-1 |
Firebase + google-services.json |
todo |
Android 앱 연결 |
| N4-2 |
실 FCM registration token |
todo |
install-id 플레이스홀더 제거 |
| N4-3 |
서버 FCM 자격증명 |
todo |
env만 (FCM_SERVER_KEY 또는 HTTP v1) |
| N4-4 |
푸시 수신 |
todo |
/admin/push-test + 에스컬레이션 수신 |
Android UI 탭 (mobile/README.md)
| ID |
작업 |
Status |
| N4-5 |
가입 → 말투 저장 |
todo |
| N4-6 |
연락처 → 대화 → 메시지·히스토리 |
todo |
| N4-7 |
L1 초안 수정/버리기/승인·뱃지 |
todo |
| N4-8 |
에스컬레이션 → 사후알림 함 |
todo |
| N4-9 |
되돌리기·거부권 |
todo |
| N4-10 |
자율성 L0~L2 + 화이트리스트 |
todo |
후순위
| ID |
작업 |
Status |
비고 |
| N4-11 |
오프라인 메시지 큐 |
todo |
멀티디바이스 고도화 |
| N4-12 |
자연스러움 피드백 UI |
todo |
vision 지표 |
| N4-13 |
prototype.md SHARE_URL |
todo |
Master 기입 |
| N4-14 |
내부 release APK |
todo |
docs/android-release.md |
| N4-15 |
roadmap/[~] 동기화 |
todo |
완료 시 체크 |
N5 — 사람 PoC (D) — 지금 열지 않음
N1~N4(배포·품질에 필요한 최소분) 이후에만 착수. roadmap.md Phase 1 §3과 동일.
| ID |
작업 |
Status |
| N5-1 |
PoC #1/#3 참가자 모집·실행 |
locked |
| N5-2 |
Q3 인터뷰 → 자율성 기본값 |
locked |
| N5-3 |
화이트리스트 기본 주제 |
locked |
| N5-4 |
신뢰 UX 문구/위치 확정 |
locked |
| N5-5 |
vision 게이트 → 실제 클로즈드 베타 오픈 |
locked |
자료: poc-plan.md · poc-materials.md · user-interview-guide.md.
바로 다음 5개 (권장)
N2-A1~A6 결정 체크 done
N1 스모크 done (E2E 16/16 + DEMO API 경로; 브라우저 UI 탭은 테스터)
N2-B1~B7 이미지·compose done (파일 랜딩·이미지 빌드)
N2-B8~B12 컷오버 done (msn.iykyka.com 라이브)
N3 배포 안정화 done — 다음: N4 FCM/Android QA 또는 서버에 GEMINI_API_KEY 주입
완료 시 본 표의 Status를 done으로 바꾸고, roadmap.md §4/§5의 대응 [~]/[ ]도 같이 갱신한다.