{"id":"cmq4r7yfm000to60130110ckp","docId":"cmq4ppzek000jml01u1ia0c4n","version":1,"title":"세션 핸드오프 (최신)","content":"# 세션 핸드오프 (최신 갱신: 2026-06-08 KST)\n\n> 다음 워커가 컨텍스트 즉시 회복할 수 있도록.\n\n## 0. 한 줄\n\nirosafe_shred v5 — Phase A~D **100% 완료** · E **90%** (dry-run 성공, apply 대기) · G **75%** (테스트 141 PASS). 외부 dev 라이브 운영중. MVP 2026-06-30 (D-22).\n\n## 1. 라이브 시스템\n\n| 컴포넌트 | 상태 | 위치 |\n|---|---|---|\n| **외부 dev URL** | UP | https://dev-shred.irosafe.com |\n| Swagger | UP | /swagger-ui/index.html (32 path) |\n| 문서 허브 | UP | /docs/ (docsify) |\n| backend | UP | irosafe 노드 `/opt/shred/shred-backend.jar` (systemd) · port 8081 |\n| frontend | UP | nginx static `/var/www/shred/` |\n| MariaDB | UP | localhost 3306 · `irosafe_shred` / `irosafe` / `irosafe-dev-2026` |\n| Cloudflare Tunnel | UP | tunnel `irocheck` · ingress dev-shred.irosafe.com |\n| 운영 ILSA DB | reach OK | system1472.sldb.iwinv.net · RO 계정 `shred_migrate_ro` |\n\n## 2. 다음 워커 P0\n\n1. **Phase E apply** — dry-run 결과 검토 후 1회. V4 데모 seed 충돌 정리.\n2. **G3 운영자 수용 시연** — A-001 ~ A-004 (사용자 + 작업자 1명).\n3. **갭분석 워커 결과 회수** — AI 어시스턴트 `peer-1780884090575` / antigravity `peer-1780884135087` 응답 대기.\n\n## 3. P1 (코드/인프라)\n\n- Schedule reassign/bulk-cancel UI mutation 연결 (백엔드 endpoint 이미 존재)\n- DailyWork 사진 첨부\n- WORKER/OFFICE 권한별 메뉴 분기\n- 사내 GitLab Runner 등록 → 통합테스트/e2e CI 자동\n- MiniQA 페이지 fix 회수 (peer-1780890008775 / peer-1780890029256)\n\n## 4. P2 (마지막)\n\n- Phase F 안드로이드\n- G4 컷오버 (1472shred.co.kr 폐기)\n- G5 안정화 1~2개월 모니터링\n\n## 5. 실행 명령 모음\n\n```bash\n# 백엔드 빌드 + 부팅 (로컬 dev)\ncd apps/backend\nJAVA_HOME=/opt/homebrew/Cellar/openjdk@21/21.0.11/libexec/openjdk.jdk/Contents/Home \\\n  ./gradlew --quiet build -x test\njava -jar build/libs/shred-backend.jar &\n\n# 프론트 dev 서버\ncd apps/frontend && npm run dev\n\n# 단위테스트 일괄\ncd apps/backend && ./gradlew --quiet test --tests \"*Test\"\n\n# Playwright e2e (로컬)\ncd apps/frontend && npx playwright test\n# 외부 dev 대상\nPLAYWRIGHT_BASE_URL=https://dev-shred.irosafe.com npx playwright test\n\n# 결과서 재생성\npython3 docs/09_테스트/build_test_report.py\n\n# irosafe 노드 배포 (jar)\nscp apps/backend/build/libs/shred-backend.jar sammy@내부 호스트:/opt/shred/\nssh sammy@내부 호스트 sudo systemctl restart shred-backend\n\n# 문서 노드 sync\ntar czf /tmp/shred-docs.tgz -C docs .\nscp /tmp/shred-docs.tgz sammy@내부 호스트:/tmp/\nssh sammy@내부 호스트 'sudo tar xzf /tmp/shred-docs.tgz -C /var/www/shred-docs/'\n\n# Phase E dry-run\nRO_PW=$(cat ~/.miniverse_secrets/ILSA_RO_PASSWORD)\nssh sammy@내부 호스트 \"java -Dspring.profiles.active=migrate \\\n  -Dspring.config.additional-location=/opt/shred/application-migrate.yml \\\n  -Dmigration.legacy.url='jdbc:mariadb://system1472.sldb.iwinv.net:3306/ILSA_SHREDDING?useSSL=false' \\\n  -Dmigration.legacy.user=shred_migrate_ro \\\n  -Dmigration.legacy.password='$RO_PW' \\\n  -Dmigration.mode=dry-run \\\n  -jar /opt/shred/shred-backend.jar\"\n```\n\n## 6. 알려진 이슈 + 룰\n\n- 8080 포트 충돌 시 새 인스턴스 BindException — `lsof -ti tcp:8080 | xargs kill` 후 재시작\n- Vite proxy 는 `127.0.0.1:8080` 명시 (IPv6 ::1 fallback 안 됨)\n- GitLab `default.cache.key.files` 최대 2개 (늘리지 말 것)\n- JwtAuthenticationFilter / SecurityConfig / WebConfig 에 `@ConditionalOnWebApplication` — `profile=migrate` (web=none) 와 호환\n- PasswordEncoder bean 은 별도 `PasswordEncoderConfig` (web/CLI 양쪽 사용)\n\n## 7. 토큰 / 비밀번호 위치\n\n- GitLab: `~/.miniverse_secrets/GITLAB_TOKEN`\n- Cloudflare: `CLOUDFLARE_API_TOKEN` + `CLOUDFLARE_ACCOUNT_ID`\n- ILSA RO: `~/.miniverse_secrets/ILSA_RO_PASSWORD`\n- 운영 DB host: `system1472.sldb.iwinv.net` · RO user `shred_migrate_ro`\n- dev admin 계정: V7 seed (운영자에게 별도 안내 · 운영 컷오버 시 즉시 변경. 로컬 secret 또는 sealed-secrets 사용 권장)\n","sourceHash":null,"archivedAt":"2026-06-08T14:12:16+09:00","archivedBy":"sync"}