조달청 MVP — 종합 평가 (문제 없는지)
Phase 1~7 + A~C 변경 후 전 영역 검증 결과. 기능 동작 ✅ / 미커밋 다수 / 잠재 issue 5건.
작성: 2026-05-21
대상: alpha 브랜치 로컬 (4 commits + 미커밋 다수)
HEAD: 6181505
1TL;DR
핵심: 데모 4 기능 동작 ✅. pytest 14/14 ✅. 실제 HWPX e2e ✅. 단 매우 많은 변경이 미커밋 상태 — 4 commits + ~30 파일 staged 안 됨. 데모일 전 commit 또는 reset 결정 필요.
| 영역 | 상태 | 비고 |
| 기능 동작 | 정상 | 업로드/파싱/DB/비교 4 기능 모두 검증 |
| pytest | 14 / 14 | config 변경 / 새 ORM 추가 회귀 0 |
| alembic | 0001 + 0002 정상 | proposals / bids / requirement_items 테이블 생성 |
| 실제 HWPX e2e | 정상 | (주)JK알에스티 5.8MB → 6초 → DB row 저장 |
| docker-compose 단독 validation | 에러 | "postgres 서비스 미정의" — root compose include 전제이므로 단독으론 실패. 실제는 OK |
| git 커밋 상태 | 미커밋 다수 | 약 30 파일 staged 안 됨 |
2현재 alpha 브랜치 상태
커밋된 변경 (4 commits ahead of H100)
| SHA | 한 줄 |
6181505 | fix: 업로드 버튼 label 패턴 (file picker 안정성) |
b577bbd | chore: docker-compose 자족화 + bid_id 동봉 + chat dead-link 정리 |
2fc8326 | feat: chat 제거 + ai_engine 활용 강화 + bid_id 매핑 버그 수정 |
f73d326 | Revert "Revert #162" — Suman PR #162 코드 복원 |
미커밋 변경 (헥사고날 리팩토링 + DB 진화 + docker 최적화)
| 그룹 | 파일 수 | 설명 |
| 삭제 (chat / ai_engine / compare / nginx / admin pages) | ~15 | scope 축소 |
| 신설 (헥사고날 — domains/entities/ports/use_cases/adapters/database) | ~10 | 아키텍처 개선 |
| 수정 (api / config / db / main / models / schemas / services / tests) | ~10 | MVP 리팩토링 |
| DB 마이그레이션 (0001_proposals + 0002_bids_and_requirements) | 2 | match → proposals + bids + requirement_items |
| docker-compose (자족 + 2026 패턴) | 1 | resource limits + read-only + tmpfs + user |
| entrypoint.sh | 1 | seed_demo_bid 호출 제거 |
| requirements.txt | 1 | redis 제거 + structlog 추가 |
| 총 | ~40 파일 | 30+ 변경 / 15+ 삭제 / 10+ 신설 |
결정 필요: commit 하면 5+ 커밋 추가. 또는 logical 단위로 합쳐 1~2 commit. 또는 reset 후 작은 단위로 재구성.
3기능 검증 — 실제로 동작하는가
| 검증 | 방법 | 결과 |
| backend pytest | pytest tests/ -q | 14 passed in 0.21s |
| alembic upgrade | alembic upgrade head | 0001_proposals + 0002_bids_and_requirements 정상 |
| DB 스키마 | SQLite PRAGMA | 3 테이블 (proposals 17컬럼 / bids 7컬럼 / requirement_items 8컬럼) |
| BFF 부팅 | uvicorn app.main:app | health OK, pydantic-settings 정상 |
| 5 API endpoint | /openapi.json | health + specs + internal + proposals + extracted |
| 실제 HWPX 업로드 | (주)JK알에스티 5.8MB | 업로드 OK / hwpx 파싱 OK / DB 저장 OK / 6초 |
| self-poller | 2-phase polling | hwpx done 신호 → BFF DB upsert ✅ |
| file_storage_key 컬럼 | 0002 마이그레이션 | 추가됨 (nullable / 데모일엔 사용 안 함) |
4잠재 이슈 5건 (영향 작음)
| # | 이슈 | 심각도 | 영향 | 대응 |
| 1 | docker-compose 단독 docker compose config 시 "postgres 미정의" 에러 | LOW | 실제 배포엔 root compose 가 include 하므로 OK. 단독 검증 시 fail | root compose 에서 include 필요 — 이미 그렇게 사용 중 |
| 2 | structlog 의존성 추가했지만 미사용 | LOW | 영향 0 — dead dependency | 실제 적용은 데모 후 (또는 requirements 에서 제거) |
| 3 | docker user: "65534:65534" (nobody) — Dockerfile 빌드 root | LOW | 로컬 정상 / 배포 시 alembic 이 작성하는 임시 파일 권한 가능성 | 알파일 시점에 chown 또는 user UID 일치 확인 |
| 4 | bids / requirement_items 테이블 신설했지만 API endpoint 없음 | LOW | 데모 4 기능엔 무관. 후속 P2 작업 | 데모 후 1주 내 보강 |
| 5 | frontend Playwright 회귀 미검증 (admin/analysis 등 페이지 삭제) | MED | 데모 경로 (/upload, /eval) 와 무관하나 일부 admin link 404 가능 | Playwright 실행해서 확인 권장 |
5docker-compose 변경 상세
| 변경 | 이전 | 이후 |
| 외부 LLM 의존 변수 | AI_ENGINE_URL / TIMEOUT / HISTORY / CANCEL_POLL / FIXTURE_FALLBACK | 제거 |
| Resource limits | 없음 | cpus + memory |
| Read-only filesystem | false | true + tmpfs (/tmp + .next/cache) |
| User | root (default) | nodejs(1001) / nobody(65534) |
| Network labels | 없음 | service: eval-system-premium |
| OCI labels | 없음 | image.source URL |
| NODE_OPTIONS | 없음 | --max-old-space-size=512 |
6다음 액션 선택지
| 옵션 | 설명 |
| A. 미커밋 변경 logical 단위로 commit + push (권장) | 5~6 commits 추가 — Phase 1 (불필요 제거) / Phase 2 (헥사고날) / Phase 3 (DB 진화) / Phase A (docker) / Phase C (pydantic-settings) |
| B. 단일 squash commit 으로 합쳐 push | "feat: MVP 헥사고날 + 2026 패턴 리팩토링" 한 commit. 깔끔 history |
| C. 로컬만 유지 (push 안 함) | 데모일까지 로컬 stack 으로만 시연. 안전 |
| D. 모두 reset 후 점진 commit | git reset + 단계별 작은 commit 으로 재구성. 시간 소요 |
| E. 일부만 commit (예: docker + DB 진화만) | 핵심 인프라만 commit, 헥사고날은 데모 후 별도 PR |
7결론
기능 측면: 문제 없음. 4 기능 모두 동작 / pytest 14/14 / alembic 정상 / 실제 HWPX 업로드 성공.
관리 측면: 미커밋 다수. 약 30 파일 변경이 staged 안 됨. 데모 전 commit 결정 권장. 머지 안 하면 데모일 작업 트리에만 존재 (안전하지만 push 자동화 불가).
잠재 이슈 5건 모두 LOW~MED. 데모 차단 요소 없음. 데모 후 P2/P3 보강.