# Complete - flutter_first_portal_migration/03+01_web_delete_flutter_deploy

## 완료 일시

2026-05-24

## 요약

Flutter-first Portal web deploy 전환 작업을 2회 리뷰 루프로 완료했다. 최종 판정은 PASS.

## 루프 이력

| Plan | Review | Verdict | 메모 |
|------|--------|---------|------|
| `plan_cloud_G07_0.log` | `code_review_cloud_G07_0.log` | FAIL | `apps/portal/Dockerfile`이 `proto-socket/dart` path dependency를 Docker image에 복사하지 않아 compose web build가 실패할 구조였다. |
| `plan_cloud_G07_1.log` | `code_review_cloud_G07_1.log` | PASS | Dockerfile이 `/workspace/proto-socket/dart` manifest/source를 `flutter pub get`과 build 전에 제공하도록 수정됐다. |

## 구현/정리 내용

- `apps/web` Next.js/TypeScript/npm 제품 경로를 제거하고 Portal 기준을 `apps/portal` Flutter 앱으로 전환했다.
- `bin/web.sh`, `docker-compose.yml`, `apps/portal/Dockerfile`, `apps/portal/nginx.conf`를 Flutter Web build 산출물 정적 서빙 흐름으로 정리했다.
- `apps/portal/Dockerfile`이 `proto_socket` path dependency인 `proto-socket/dart`를 Docker image의 `/workspace/proto-socket/dart`에 복사하도록 보완했다.
- README와 architecture 문서의 web/Portal 설명을 Flutter-first deploy 기준으로 갱신했다.

## 최종 검증

- `make portal-build-web` - PASS; Flutter Web build가 `✓ Built build/web`로 완료됐다.
- `awk '/proto-socket\/dart/ { seen=1 } /RUN flutter pub get/ { exit seen ? 0 : 1 } END { if (!seen) exit 1 }' apps/portal/Dockerfile` - PASS; exit 0.
- `grep -n '^COPY .*proto-socket/dart.* /workspace/proto-socket/dart/' apps/portal/Dockerfile && awk '/^COPY .*proto-socket\/dart.* \/workspace\/proto-socket\/dart\// { seen=1 } /^RUN flutter pub get/ { exit seen ? 0 : 1 } END { if (!seen) exit 1 }' apps/portal/Dockerfile` - PASS; COPY lines before `RUN flutter pub get` confirmed with exit 0.
- `command -v docker || echo "docker missing"` - BLOCKED; current environment reports `docker missing`.
- `if command -v docker >/dev/null 2>&1; then docker compose config && docker compose build web; else echo "docker compose verification skipped: docker missing"; fi` - BLOCKED; Docker CLI unavailable, conditional skip output recorded.
- `git diff --check` - PASS; no whitespace errors.

## 잔여 Nit

- 없음

## 후속 작업

- 없음
