41 KiB
킨텍스 자동전시시스템 구축 — 기술·아키텍처 자문서 (Tech Advisory)
작성: proposal-tech-advisor(아키텍처 허브) · 작성일: 2026-07-11 · 버전 v1.0 입력:
rfp_analysis.md(REQ 142)·rtm.md·proposal_strategy.md+proposal_outline.md(Win Theme 5·필수 도식 12종)·docs/architecture/{app,system,tech,data,network}.md(AA/SA/TA/DA/NA 확정 아키텍처 5종)·docs/PLANNING.mdv3.0·docs/SECURITY.md·docs/WORK_STATUS.md(라이브 실적)·kintexCLAUDE.md(스택 확정). 성격: 아키텍처 전문가 풀(AA·SA·TA·DA·NA)이 이미 확정한 5종 아키텍처를 재발명하지 않고, 제안서(writer·visual-designer·deck-designer)용으로 종합·상충 조정·재구성한 기술 자문. 전문가 풀 산출물이 이미 충분해 추가 소집(kintex-sa/ta/da) 불요 — 공백(SM 운영·SLA·WBS/공수·도식 사양)만 본 문서가 저술. 원칙(불변): ①과장 금지 — WORK_STATUS 라이브 확인분만 "구축 완료/검증됨", 나머지는 "구현 계획". ②시크릿(키·비번·내부IP) 미기재. ③실현 가능성 우선 — 확정 스택·기존 스캐폴드·이식 자산으로 뒷받침.
0. 기술 신뢰성 기반 — 라이브 실적 vs 구현 계획 (과장 방지 핵심)
평가위원 최대 관심 = "제안이 말뿐인가, 실제로 되는가". 본 절이 그 답이다. WORK_STATUS(2026-07-11) 라이브 확인분과 구현 계획을 명확히 구분한다. 제안서 P8(사업관리)·P4(아키텍처) 신뢰 근거로 인용.
0-1. 구축 완료·라이브 (검증됨 — "이미 돈다")
| 영역 | 라이브 실적 | 검증 근거 |
|---|---|---|
| 개발/배포 인프라 | kintex.zioinfo.co.kr TLS + 백엔드 8021 + PostGIS + Redis + 나노바나나 워커 systemd 상주 |
WORK_STATUS §4 인프라(라이브) |
| CI/CD 자동배포 | Gitea webhook → deploy_kintex.sh(bootJar+vite build→배포→health→롤백). push 시 자동배포 |
WORK_STATUS §2·§7 |
| 나노바나나 이미지 생성 | Gemini 라이브(G1 소유자 승인 완료), gemini-3.1-flash-image-preview 워커 |
WORK_STATUS §2·§4 |
| 인증(JWT/RBAC/2FA) | JWT+RBAC 6역할 + TOTP OTP + 로그인 실패 잠금 + admin env 시더(admin123 금지) | WORK_STATUS §4, Flyway V7/V8 |
| P0 코어 매퍼(PostGIS) | M2~M5 매퍼 배선(501 해소)·룰엔진·공간 SQL | WORK_STATUS §4 백엔드(라이브) |
| 공통 레이어(WISE 이식) | 시스템관리·공통 업무기능·공개 인증(register/forgot/reset) | Flyway V1~V9(테이블 39) |
| 프론트(Stitch 반영) | 로그인(히어로+CI+회원가입/비번찾기/아이디기억) + 부스 설계 스튜디오·대시보드·갤러리·신규 8+5화면 | WORK_STATUS §4·§6 |
| 평면도/CAD 자산 | 홀별 평면도 JPG 15 + CAD(제1전시장 "평면,트렌치.dwg") 확보 → 트렌치 실측 원천 | WORK_STATUS §4, CLAUDE.md 확보자산 |
→ 메시지: "제안 아키텍처는 도상이 아니라 이미 기동 중인 시스템이다. 스캐폴드·인증·PostGIS 코어·나노바나나·자동배포 파이프라인이 라이브로 검증됐다." (전시테크/범용 SI가 제시하지 못하는 실증 우위)
0-2. 구현 계획 (설계 확정·미완 — "표준대로 채운다")
| 영역 | 상태 | 근거 |
|---|---|---|
| 도메인 모듈 M15 옥션·M10 관람·M12/17 CMS·M16 BI·M18 관리자 | 설계 확정, 구현 대기(Phase D) | IMPLEMENTATION_BACKLOG Phase D |
| 멀티테넌시(tenant_id 전파·컨텍스트 해소) | 데이터모델 확정, 스키마·컨텍스트 구현 대기 | WORK_STATUS §6, data.md §1A |
| 실데이터 집계 전환(신규 5화면 샘플→API) | 화면 이식 완료, 집계 API 미구축 | WORK_STATUS §6, UNDEVELOPED_BACKLOG §1 |
| 접근성/i18n/테마 전면 적용 | NFR 표준 확정, 전면 스윕 대기 | WORK_STATUS §6 |
| 역할별 프론트 번들 분리 | 방식 확정 대기(모노레포 vs 서브패스) | tech.md §9-5 |
| AiTextRouter/AiConfig(텍스트 AI) | 설계 확정(UIWS 패턴), 착수 대기 | tech.md §6-1·R-T7 |
→ 원칙: 위 항목은 제안서에서 **"구현 계획"**으로만 서술. "구현 완료"로 오기 금지(감점/신뢰 훼손 리스크).
1. 목표 아키텍처 종합 (5종 아키텍처 → 제안서 재구성)
1-1. 목표 아키텍처 4-Tier + 사이드카 (한 문장)
React 18/19(Vite·TS) 역할별 분리 프론트 → SSO(JWT+2FA)·이중 RBAC → 공유 Spring Boot 3.2.5(Java 17)+MyBatis 모듈러 모놀리스 → PostgreSQL+PostGIS 단일 공간 원천(+읽기복제) / Redis 비동기 큐 / 오브젝트 스토리지, 그 위에 나노바나나 Python 워커 사이드카(이미지 생성)와 Claude AI(AiTextRouter·Ollama 폴백)(텍스트 지능)를 얇은 큐/HTTP 계약으로 결합한다. (app.md §1·§10, system.md §1~§2, tech.md §1)
1-2. 계층별 종합 (전문가 풀 산출 통합)
| 계층 | 구성(확정) | 권위 문서 | 핵심 근거 |
|---|---|---|---|
| 표현(App) | 역할별 6프론트(organizer·exhibitor·contractor·ops·admin·public/visitor) 번들 분리 + 공유 디자인시스템/컴포넌트/api-client 상속. 데스크톱=설계·에디터, 모바일=현장·조회·승인 | app.md §10, system.md §2-1 | 최소권한·공격면 축소, 중복구현 금지 |
| 인증·인가 | 단일 JWT SSO(HS256, jjwt 0.12.5) + TOTP 2FA(RFC6238) + 로그인 실패 잠금 + 이중 RBAC(플랫폼 plat/행사 roles·hm) |
app.md §6, tech.md §7 | WISE/UIWS 이식(재설계 금지) |
| 애플리케이션(백엔드) | 공유 Spring Boot 모듈러 모놀리스(com.zioinfo.kintex.module.mN, 4계층 Controller/Service/Mapper/DTO) + 룰엔진 + 배치/배선 엔진(PostGIS) + 옥션·BI·CMS 서비스 |
app.md §1~§5·§10-2 | 단일 공유 백엔드·경로/RBAC로 역할 표면 분리 |
| 비동기 | Redis 큐(RenderJob·서류·EDM·알림) + 옥션 실시간 순위/타이머 + 캐시/쿼터/WS 세션 상관. STOMP over WebSocket 실시간 푸시 | app.md §8·§9, system.md §6-3 | 백엔드 무상태화 → 수평 확장 |
| AI(이미지) | 나노바나나 Python 워커(google-genai, gemini-3.1-flash-image-preview) — image-to-image 구조보존 + 워터마크 후처리 + S6 로컬 PIL 래스터 |
tech.md §1-3, system.md ADR-1 | google-genai=Python SDK, Java 재구현 회피 |
| AI(텍스트) | AiTextRouter: Claude 기본(api.anthropic.com 승인 예외) → Ollama 폴백(폐쇄망/장애). 부스 배치는 제약 솔버 주도, LLM은 조건해석만 |
tech.md §6 | 결정론 우선·환각 차단·데이터 주권 |
| 데이터 | PostgreSQL+PostGIS 단일 공간 원천(부스 Polygon·트렌치 Point·배선 LineString, SRID 0) + 프라이머리-스탠바이 복제 + 읽기복제(BI·공개 오프로드) + BI 데이터마트(스타 스키마) | data.md §2~§6 | 단일 공간 원천 불변·운영/분석 분리 |
| 저장(바이너리) | 오브젝트 스토리지(도면·생성이미지·서식·PDF·콘텐츠) — 경로만 DB, CDN 프론팅 | data.md §0-1, system.md §2-1 | 대용량 독립 확장 |
| 네트워크·보안영역 | 4존+관리존(엣지·DMZ·내부망·AI워커·데이터·관리) 계층 방어, DMZ→데이터존 직결 금지, egress 화이트리스트(Claude·Gemini·PG·SMTP) | network.md §2~§5 | 공개/내부 물리·논리 분리·폐쇄망 지향 |
1-3. 멀티테넌시 격리 구조 (다중 전시관 SaaS)
- 격리 축:
tenant_id(전시관: KINTEX #1·COEX #2…) ⊃event_id(행사) ⊃ 행사 RBAC(역할). 3중 격리. - fail-closed 다층 방어(REQ-S-018): ①테넌트 컨텍스트 필터(서브도메인 우선+사용자소속 보조, 불일치 거부) → ②서비스 가드 → ③MyBatis 공통 인터셉터(tenant_id 자동 주입) → ④PostGIS/쿼리(선두 복합 인덱스). 어느 한 층이라도 불일치면 차단.
- 온보딩: 코드 배포 없이 데이터 온보딩(홀·요율·규정 룰셋·마스터데이터 입력). 기능 로직 불변. (app.md §6, data.md §4-4, system.md §3-1 멀티테넌시)
- 주의(현실): 멀티테넌시는 구현 계획(WORK_STATUS §6). 제안 시 "데이터모델 확정→스키마 tenant_id→컨텍스트 배선" 3단계 로드맵으로 서술, 백필 전 단일테넌트 무중단 동작→검증 후 필터 활성화(회귀 방지).
1-4. 필수 도식 12종 — 작도 사양 (deck-designer 직접 작도용)
각 도식의 박스·연결·라벨 텍스트를 명세. visual-designer(선 SVG 아이콘)·deck-designer(python-pptx)가 재해석 없이 작도. 모든 라벨은 한국어, 아이콘은 선(stroke) 스타일.
① 3중 해자 벤다이어그램 (S04·S12)
- 형태: 3원 교집합 벤다이어그램. 3개 동일 크기 원 60% 겹침.
- 원 라벨: 원A "나노바나나 시공 예측 이미지"(부제: image-to-image 구조보존·40초·S1~S7), 원B "PostGIS 실측 공간데이터"(부제: 부스 폴리곤·트렌치 포인트·배선 LineString 단일 원천), 원C "공사 옥션 폐루프"(부제: AI 자료→응찰→낙찰→발주 자동전환).
- 중앙 교집합(3원 겹침): 강조 배지 "재현 난이도 높은 결합 = 우리만의 해자(Moat)". 2원 교집합에는 회색 "단일 요소는 모방 가능".
- 하단 캡션: "셋의 결합은 경쟁 전시테크·범용 SI가 재현하기 어렵다."
② 모듈맵 — 생애주기 × 우선순위 매트릭스 (S16)
- 형태: 가로축=전시 생애주기 6단계(판매·기획 → 설계·시각화 → 발주·계약 → 참가·관람 → 현장운영 → 사후·경영), 세로축=우선순위(P0 코어 / P1 / P2).
- 박스(모듈 칩): P0행에 M2 플로어플랜·M3 부스설계·M4 유틸리티·M5 나노바나나(강조색·굵은 테두리). P1행 M1·M6·M7·M9·M15(옥션 강조)·M10·M12·M16·M17·M18·§5B 공통·§1A 멀티테넌시. P2행 M8·M11·M13·M14.
- 하단 레이어 띠: "공통/시스템관리 레이어(§5B) — 전 모듈 선행 기반" + "멀티테넌시(§1A) — tenant_id 격리".
- 캡션: "18개 모듈 + 공통 레이어를 한 장으로 조망. P0 4개가 심장."
③ 나노바나나 파이프라인 플로우 (S20)
- 형태: 좌→우 수평 플로우, 8박스.
- 박스·라벨:
[사용자: 렌더 요청]→[Spring 백엔드: RenderJob 생성·쿼터 확인]→[Redis 큐 kintex:renderjob:queue(leftPush)]→[나노바나나 Python 워커(BLPOP 소비)]→[Gemini image-to-image(G1 승인·라이브)]→[워터마크 후처리·S6 로컬 PIL 래스터]→[오브젝트 스토리지 적재]→[pub/sub → 백엔드 relay → WebSocket/STOMP /topic/render/{jobId}]→[프론트: 완료 푸시·갤러리 갱신]. - 분기 주석: 워커 하단에 점선 "degraded: G1 미승인/Gemini 장애 시 목(mock) 응답·구조·워터마크 유지". "성공 시에만 쿼터 차감".
- 보안 배지:
GEMINI_API_KEY는 워커 env only(백엔드 미취급). - 캡션: "이미지 생성 전면 비동기 — 사용자 동기 대기 없음, 평균 40초."
④ Before/After 슬라이더 (S21)
- 형태: 좌우 분할 이미지 카드 + 중앙 세로 드래그 핸들.
- 라벨: 좌 "Before: 빈 부스(도면/실측)", 우 "After: 시공 후 예상(AI 생성·워터마크)". 핸들 "드래그로 비교".
- 접근성 배지: "ARIA slider·키보드 좌우 조작 지원(WCAG AA)".
- 하단: 워터마크 텍스트 예시 배지 "AI 생성 예상 이미지 — 실제 시공과 다를 수 있음. 계약·심사 서류 사용 금지."
⑤ 3안 비교 화면 (S24)
- 형태: 3열 카드(안1·안2·안3) + 상단 공통 홀 정보 바 + 하단 액션 바.
- 카드 라벨: 각 카드 상단 "안 N — 최적화 목표"(예: 안1 "통로 효율 최대", 안2 "프리미엄 부스 최대", 안3 "균형"). 카드 본문 미니 배치도 썸네일 + 지표(판매면적 ㎡·부스 수·규정 위반 0/N).
- 액션 바:
[안 선택][구역/블록 병합 편집][병합 후 재검증]. - 캡션: "제약 솔버가 상이한 최적화 목표로 정확히 3안 생성. 사람이 선택·병합·최종 확정."
⑥ PostGIS 배선 오버레이 (S27)
- 형태: 홀 평면도 위 배선 경로 오버레이. 부스 폴리곤(연회색) + 트렌치 포인트(◆) + 분전반(▣) + 배선 LineString(색상별).
- 색상 범례: 전기=적색, 네트워크=청색, 급배수=녹색(S6 규약 정합).
- 주석 배지: "최근접 트렌치 KNN(
geom <-> point)", "최단 경로(ST_Length)·통로 횡단 최소화", 가정 트렌치엔 "가정 좌표(실측 대기)" 배지. - 캡션: "수기 위치표시도 폐지 — 좌표 클릭 자동 작도. SRID 0 홀 로컬 미터, GiST 인덱스 실시간."
⑦ 옥션 폐루프 흐름도 (S29)
- 형태: 순환/좌→우 흐름, 좌측에 AI 자료 패키지 스택.
- 박스:
[M2 배치 + M3 설계 + M4 배선/BOQ + M5 시공예측 이미지](AI 생성 자료 패키지) →[옥션 개설(역경매/RFQ/고정가)]→[등록업체 검증 게이트: 미등록 응찰 차단 403]→[견적서(Quotation) 제출·PDF·버전]→[실시간 순위·라운드 마감(Redis 정렬셋·WS 델타)]→[종합평가 낙찰(가격+평판+납기)]→[Award → 계약/발주 자동전환(M6·M9 연동)]. - 캡션: "AI 설계자료가 곧 발주 근거. 사진 수준 자료로 응찰→발주까지 한 흐름."
⑧ 종합평가 스코어 비교표 (S31)
- 형태: 업체 행 × 평가항목 열 표 + 가중 합계 열 + 낙찰 하이라이트 행.
- 열: 업체명 | 견적금액(점수) | 평판(점수) | 납기(점수) | 가중 종합점수 | 순위.
- 가중치 주석 바: "가중치(예): 가격 0.6 / 평판 0.25 / 납기 0.15 — 옥션별 설정형(
weightjsonb)". - 하이라이트: 1위 행 강조 + "낙찰(Award)" 배지 + "선정 사유·항목별 비교" 캡션.
⑨ 시스템 아키텍처 다이어그램 — 전 계층 (S41)
- 형태: 상하 6밴드 계층도(system.md §2 논리 아키텍처 재구성).
- 밴드1 엣지/DMZ:
[CDN·정적캐시][WAF/Reverse Proxy(nginx)·TLS 종단·레이트리밋]. - 밴드2 역할별 프론트: organizer·exhibitor·contractor·ops·admin(내부 배지)·public/visitor(공개 SSR/SEO/다국어 배지).
- 밴드3 SSO·RBAC:
[JWT SSO + TOTP 2FA · 이중 RBAC(플랫폼/행사)]. - 밴드4 공유 백엔드:
[REST + WebSocket/STOMP]아래[룰엔진][배치·배선 엔진·PostGIS][옥션 M15][BI M16·KpiSnapshot][CMS M17][공개 API read-only]. - 밴드5 비동기:
[Redis 큐·순위·타이머·캐시·쿼터]→[나노바나나 워커][서류·EDM 워커]. - 밴드6 데이터:
[PostgreSQL+PostGIS][읽기복제(BI·공개)][오브젝트 스토리지]. - 우측 외부 게이트 컬럼:
[Gemini(G1·라이브)][Claude(AiTextRouter)][PG 결제][kxwp 릴레이][등록업체 DB 739]. - 연결 주석: 워커→Gemini "egress only", 워커→백엔드 "WebSocket 완료 푸시", 백엔드→읽기복제 "BI/공개 오프로드".
⑩ 보안영역 분리도 (망 구성) (S47)
- 형태: 좌→우 신뢰도 상승 존 다이어그램(network.md §2).
- 존 박스:
[인터넷]→[엣지: CDN·WAF·DDoS]→[DMZ(공개): 공개LB·public SSR·visitor GW·공개 API GW·PG콜백 — 쓰기권한 없음]→[내부망(인증): 내부LB·SSO/2FA·내부 API GW·공유 백엔드]→[AI 워커존(egress 제한): Redis·나노바나나·Ollama]→[데이터존(최내곽): PostgreSQL+PostGIS·오브젝트 스토리지·읽기복제 — 아웃바운드 전면 차단]. 상단[관리존: 배스천·관측성]. - 철칙 배지(굵게): "DMZ → 데이터존 직접 접근 절대 금지", "데이터존 아웃바운드 0(유출 경로 제거)", "admin. = VPN/허용IP+2FA, 인터넷 미도달".
- egress 컬럼: 승인 4목적지만(Claude·Gemini·PG·SMTP), 그 외 DROP.
⑪ 멀티테넌시 격리 아키텍처도 (S56)
- 형태: 수직 4층 방어 스택 + 좌측 테넌트 컨텍스트 진입.
- 진입:
[요청: 서브도메인(kintex./coex.) + JWT 사용자 소속]→[테넌트 컨텍스트 해소: 불일치 시 거부]. - 4층 박스(위→아래):
[①컨텍스트 필터]→[②서비스 가드]→[③MyBatis 공통 인터셉터(tenant_id 자동 주입)]→[④PostGIS/쿼리: tenant_id 선두 복합 인덱스]. - 우측 데이터:
[TB_* … WHERE tenant_id = ctx]격리 표현. 하단 배지 "fail-closed — 한 층이라도 불일치면 차단". - 캡션: "KINTEX #1 검증 → COEX #2 코드 배포 없이 데이터 온보딩. 기능 불변, 데이터·권한만 분리."
⑫ 일정 간트 (Phase × 모듈) (S58)
- 형태: 가로 타임라인 3구간(Phase 1 ~4M / Phase 2 ~4M / Phase 3 ~4M+), 세로 워크스트림 막대.
- 막대(Phase 1): 아키텍처(A)·공통레이어(B, 2FA/시스템관리)·P0 코어(C: M2·M3·M4·M5).
- 막대(Phase 2): 옥션 M15·관람 M10·BI M16·관리자 M18·판매/서류/정산 M1/6/7/9·CMS M12/17.
- 막대(Phase 3): 멀티테넌시·M11·M13·M14·배포 안정화·SM 이관.
- 마일스톤 다이아몬드: G1(나노바나나 승인·완료)·G2(배포서버·완료)·Phase 게이트·QA 게이트·오픈.
- 캡션: "선행 게이트 통제 + Phase 게이트 QA 통과 후 진행."
추가 표준 도식(공공 제안 필수, outline 명시): 추진체계도(S15)=거버넌스(PM/PMO/dev-PM)+아키텍트(AA·SA·TA·DA·NA)+코어/도메인/AI/QA/DevOps 팀 조직도 / 리스크 매트릭스(S59)=발생×영향 2×2에 R-1~R-8·C1~C8 배치 / 기대효과 인포그래픽(S61)=견적·배치·검수·위치표시도·시공예측 5지표 Before/After. 사양은 §2·§5·strategy §4 참조.
2. Win Theme 기술 근거 (5선 — 실현 가능성 입증)
WT-1. 나노바나나 시공 예측 (배점 20 · 최우선)
- 기술 골자: RenderJob 큐(Redis
kintex:renderjob:queue) → Python 워커(BLPOP) → Gemini image-to-image 구조보존 → 워터마크 후처리 → 오브젝트 스토리지 → WebSocket/topic/render/{jobId}완료 푸시. - 구조보존 메커니즘(REQ-A-002·003): 참조 이미지
inlineData+ 구조화 프롬프트 사전(BOOTH_TYPES·BOOTH_STYLES·FIXTURE_LAYERS)에서 보존(골격·치수·통로·카메라 앵글) / 교체(스타일·재질만 사실화) 명시 분리. ReRoomAI 검증 패턴 이식(reroomai-source.md). - 방어(REQ-A-006): 다층 크기가드·mimeType 자동감지·SAFETY 분기·친화적 한글 에러·성공 시에만 쿼터 차감. 간판 한글 렌더 실패 시 간판영역 후처리 합성(REQ-A-008).
- S6 배선 오버레이(REQ-A-004): Gemini 미경유 — 백엔드/워커 로컬 PIL 결정적 래스터 합성(전기 적·네트 청·급배수 녹). 좌표 정확성 확보·비용/지연 제외.
- 실현 근거: 라이브 검증(G1 승인·워커 Gemini 실동작, WORK_STATUS §4). "말이 아니라 이미 돈다."
- 도식: ③파이프라인·④Before/After.
WT-2. 배치·설계·배선 AI 3안 + 규정 자동검증 (배점 20+15 교차)
- 기술 골자: 부스 배치 3안은 결정적 제약 솔버(비-LLM)가 상이한 최적화 목표로 생성, LLM(Claude)은 조건 해석·설명만(REQ-A-009). → 공공 "AI 신뢰성" 프레이밍의 핵심(결정론 주도).
- 규정 자동검증(REQ-F-009·013, REQ-A-010): 룰셋(
compliance-v*.json버전 데이터)을 룰엔진이 평가 + PostGIS 공간 판정(통로폭ST_Distance/ST_Buffer·비상구ST_Intersects·홀 이탈ST_Contains·바닥하중 홀별). 병합 후 재검증. 위반 시COMPLIANCE_BLOCKED(422). - 배선 자동 작도(REQ-F-015~017): 기기목록→kW 합산→분전반 산출, 최근접 트렌치 KNN(
geom <-> point)→최단 배선 LineString(ST_Length, 통로 횡단 최소 휴리스틱), 위치표시도 좌표 클릭 자동 작도(수기 폐지). - AI 신뢰 3층: 결정적 알고리즘(제약 솔버·PostGIS) 중심 + LLM 보조 + 사람 최종 확정. 규정검증=플래깅까지, 구조안전 판정은 구조기술사/킨텍스(Non-Goal). RAG 근거·인용·환각 차단(abstain, REQ-A-017).
- 실현 근거: M2~M5 매퍼(PostGIS 공간 SQL)·룰엔진 라이브(WORK_STATUS §4). 3안 생성·병합·집계 API는 구현 계획.
- 도식: ⑤3안 비교·⑥PostGIS 배선.
WT-3. 공사 옥션 폐루프 (배점 15 · 폐루프 핵심)
- 기술 골자:
TB_AUCTION 1─N TB_QUOTATION ─ TB_AWARD. 옥션 유형 설정형(REVERSE/RFQ/FIXED). AI 자료 패키지(M2~M5 참조attached_refs) 열람 기반 견적서 제출·PDF·버전. 실시간 순위=Redis 정렬셋 + WebSocket/topic/auction/{auctionId}델타 푸시, 라운드 마감=Redis 타이머. - 등록 게이트(REQ-S-007): 미등록 업체 응찰 원천 차단
NOT_REGISTERED_COMPANY(403). M7이TB_COMPANY.kintex_registered검증 권위. → 킨텍스 "등록업체 시공 필수" 규정을 시스템이 강제. - 종합평가·발주 전환(REQ-F-028·032): 가중 스코어(가격+평판+납기,
weightjsonb) → Award → 계약/발주 자동전환(M6·M9 연동, 이벤트 디커플·순환 금지). - 실현 근거: 옥션은 구현 계획(Phase D-M15). 스캐폴드 4계층·큐·WS 패턴·데이터모델 확정으로 실현성 입증.
- 도식: ⑦옥션 폐루프·⑧종합평가 스코어.
WT-4. 3중 보안 — 워터마크·PII·테넌트 (배점 10)
- 워터마크(REQ-S-009): M5 이미지 응답 항상
watermarkRequired:true+watermarkText+notice(계약·심사 서류 금지). 제거 불가(계약 강제, app.md §5-6). 워커 목/live 공통. - PII 격리(REQ-S-013): 관람객/리드
*_encAES-256-GCM 컬럼 암호화, 응답 완전 제외/마스킹, 동의 분리(privacy 필수/marketing 선택/share), 접근 감사 전수. BI 마트는 개인 식별자 비반입(집계만). - 테넌트 3중(REQ-S-018): §1-3 fail-closed 4층(컨텍스트→서비스→MyBatis→PostGIS).
- 외부 API 격리(REQ-S-001·002): Ollama 기본 + Claude/Gemini만 승인 예외.
GEMINI_API_KEY워커 env only(백엔드 미취급), egress 워커존 단일 경로. - 실현 근거: 인증(JWT/RBAC/2FA/admin env)·워터마크 라이브. PII 암호화·테넌트 필터는 구현 계획.
- 도식: ⑩보안영역 분리·⑪멀티테넌시 격리.
WT-5. 멀티테넌트 SaaS 확장 (배점 5 · 미래가치)
- 기술 골자: §1-3. tenant_id 전파 + 2계층 관리자(플랫폼 슈퍼관리자 테넌트스위처 / 테넌트 관리자 단일스코프) + 컨텍스트 해소. 온보딩 6단계=마스터데이터 입력 수준.
- 개발 부담 최소화(strategy R-8): 멀티테넌시=격리 레이어만 추가, 기능 로직 불변. 백필 전 단일테넌트 무중단→검증 후 필터 활성화(회귀 방지).
- 실현 근거: 구현 계획(WORK_STATUS §6). GUARDiA 표준 프레임워크 멀티테넌트 패턴 재사용.
- 도식: ⑪멀티테넌시 격리.
3. 비기능(NFR) 충족안 — REQ-N 21건 전부 대응 (P6·P4)
근거: system.md §3(확장성·HA·성능·용량)·tech.md §5(관측성·성능)·data.md §3·§6·network.md §7. SLO 99.5%(성수기 99.9% 지향).
| REQ-ID | 요구 | 충족 방안(기술) | 측정/게이트 | 근거 |
|---|---|---|---|---|
| REQ-N-001 | 코어 SLO 99.5% | 무상태 백엔드 + Redis 외부화 + HA(§아래) | 월 가용성 ≥99.5%, /actuator/health |
system.md §3-2 |
| REQ-N-002 | 백엔드 2인스턴스·롤링 무중단 | 최소 2 인스턴스 + 헬스체크 LB + 롤링 배포 | 무중단 배포 검증(스테이징→prod) | system.md §3-2 |
| REQ-N-003 | PG 스탠바이·failover·PITR | 프라이머리-스탠바이 스트리밍 복제 + Patroni/관리형 자동 failover + PITR | RPO 최소·RTO 분 단위 | system.md §3-2 |
| REQ-N-004 | Fail-Safe 배포 | 백업→배포→헬스체크 200→실패 시 롤백(이전 jar 유지) | 라이브(deploy_kintex.sh) | WORK_STATUS §2 |
| REQ-N-005 | degraded 모드 | G1 미승인/Gemini 장애=워커 목 응답(구조·워터마크 유지), Claude 실패=Ollama 폴백, PG 복제지연=프라이머리 폴백 | 무네트워크 스모크 통과 | system.md §3-2 |
| REQ-N-006 | 나노바나나 40초·1024px | 전면 비동기(WS 완료 푸시) + 클라 Canvas 1024px 다운스케일+JPEG 0.85 전처리 | 단건 평균 ≤40s | system.md §3-3 |
| REQ-N-007 | 대량 생성 제어 | 자동생성 S1·S7 한정 + 동일 스키마해시 캐시 + 행사별 RenderJob 쿼터(RENDER_EVENT_QUOTA 기본 500·성공 시만 차감) |
쿼터/캐시 히트율 | system.md §3-3, R6 |
| REQ-N-008 | 공간쿼리 GiST 실시간 | 전 geom 컬럼 GiST 인덱스(트렌치 KNN·통로버퍼·비상구 교차) |
배치·배선 P95 <2s | data.md §3-4 |
| REQ-N-009 | 워커 독립 스케일 | 나노바나나·서류·EDM 워커 큐 깊이 기반 증감, 백엔드 응답성과 분리 | 큐 적체 모니터 | system.md §3-1 |
| REQ-N-010 | BI/공개 읽기복제 오프로드 | BI 집계·공개 조회·플로어플랜 열람 읽기복제 라우팅, 운영 프라이머리 보호 | 프라이머리 부하 격리 | system.md §3-1 |
| REQ-N-011 | 워커 장애 재큐(멱등) | 무상태 소비자 N대 + 가시성 타임아웃 후 재큐(멱등 Job) + AOF 지속화 + ACK | 진행 Job 유실 0 | system.md §3-2 |
| REQ-N-012 | WCAG 2.1 AA·KWCAG 2.2 | 시맨틱 마크업·ARIA·키보드·대비, 공공 KWCAG 2.2 병행 점검 | 접근성 자동+수동 감사 | rfp §6-N1 |
| REQ-N-013 | 캔버스/맵 비시각 대안 | 플로어플랜/배선 캔버스에 데이터 테이블·검색·키보드 부스 선택 대안 필수 제공 | 비시각 경로 검증 | rfp §6-N1 |
| REQ-N-014 | 다국어 i18n·hreflang | i18n 외부화(한 기본+영/중/일)·로케일 전환·hreflang·로케일 포맷 | 4로케일 전환 | rfp §6-N3 |
| REQ-N-015 | 라이트/다크 테마 | CSS 토큰 2벌·prefers-color-scheme 연동·선택 영속 | 테마 왕복 | rfp §6-N4 |
| REQ-N-016 | 반응형 | 데스크톱=설계/에디터, 모바일=현장/조회/승인 | 브레이크포인트 검증 | PLANNING §8 |
| REQ-N-017 | 단일 공간 원천 | M2 폴리곤·M4 배선 매퍼 권위, 소비 모듈 조회만·중복 저장 금지 | ArchUnit·계약 검수 | app.md §3-2, data.md §0-2 |
| REQ-N-018 | 관측성·미기록 | 로그·메트릭·트레이스 관리존 수집, 자격증명·PII·스택트레이스 미기록(include-stacktrace: never) |
로그 감사 | tech.md §5, network.md §8 |
| REQ-N-019 | 공개영역 CDN·요청률 상한 | 공개 SSG+CDN 캐시·요청률 상한·slowloris 타임아웃·동시연결 캡 | 스파이크 CDN 흡수 | network.md §7 |
| REQ-N-020 | tenant_id 선두 복합 인덱스 | 격리 쿼리 표준 인덱스(tenant_id 선두) | 격리 쿼리 성능 | data.md, §1-3 |
| REQ-N-021 | BI 데이터마트 배치 ETL | 스타 스키마(FACT/DIM) 야간 배치 ETL 또는 읽기복제 적재, KpiSnapshot | 원천-집계 정합(오차 0) | data.md §6 |
HA 구성 요약(P6 SLA 표 입력): 프론트/공개=CDN 다중엣지+nginx 다중화 / 백엔드=2+ 인스턴스 헬스체크 LB·롤링 / Redis=Sentinel(자동 failover)+AOF / PostgreSQL=프라이머리-스탠바이+자동 failover+PITR / 워커=무상태 N대·재큐 / 배포=Fail-Safe(롤백). SLO: 코어 99.5%(성수기 99.9% 지향), 나노바나나 생성=best-effort 비동기(큐 소진 목표).
용량 산정(P4·P6 근거): 단일 대형 행사 3,000~5,000부스(수만 지오메트리·GiST 필수) / RenderJob 부스 3,000×자동 2샷(S1·S7)+온디맨드=수천~1만 이미지(수 GB~수십 GB, OBJ+CDN·캐시 억제) / 리드·체크인 수만~수십만(파티셔닝 후보) / 동시 사용자 인증 수백+공개 수천~수만(CDN 흡수) / DB 연결풀 Hikari max 3(DB_POOL_MAX)+PgBouncer 권고(공유 PG 포화 방지). (system.md §3-4)
4. 보안 충족안 — REQ-S 20건 전부 대응 (P5 · 시크릿 값 미기재)
근거: SECURITY.md·app.md §5-6·§6·network.md·data.md §5·tech.md §7. 불변(위반=QA 반려).
| REQ-ID | 요구 | 충족 방안(기술) | 근거 |
|---|---|---|---|
| REQ-S-001 | 외부 API 정책 | Ollama 기본 + Claude(api.anthropic.com)·Gemini만 승인 예외, egress 화이트리스트 그 외 DROP |
network.md §5 |
| REQ-S-002 | GEMINI 키 워커 env only | 나노바나나 워커 env only, Spring은 큐/콜백만, 워커존 단일 egress | tech.md §3-5 |
| REQ-S-003 | 자격증명·키 완전 제외 | 응답/로그/에러/커밋 마스킹, *_enc·해시·내부IP·워커토큰 미노출 |
tech.md §7 |
| REQ-S-004 | admin 비번 env 재시드 | ADMIN_PASSWORD_ENC(AES-256-GCM)+별도 키파일→기동 시 BCrypt 재시드, admin123 금지 |
라이브(env 시더) |
| REQ-S-005 | JWT+2FA+실패 잠금 | JWT(HS256)+TOTP(RFC6238)+로그인 실패 잠금(관리자 해제) | 라이브(V7/V8) |
| REQ-S-006 | 행사 RBAC 3중 | 테넌트 격리 ⊃ 행사 RBAC(열람=멤버/홀매니저, 편집=역할별 게이트) | app.md §6 |
| REQ-S-007 | 미등록 업체 차단 | M15 응찰·초대 NOT_REGISTERED_COMPANY(403), M7 검증 권위 |
app.md §6-2 |
| REQ-S-008 | admin/internal 게이트 | /api/admin/**=hasRole(ADMIN), /api/internal/**=X-Worker-Token |
app.md §5-5 |
| REQ-S-009 | 이미지 워터마크 항상 | M5 응답 항상 watermarkRequired:true+text+notice, 제거 불가 | 라이브·app.md §5-6 |
| REQ-S-010 | 오류 스택트레이스 미노출 | server.error.include-*: never + ApiResponse.error 요약만 |
tech.md §5-1 |
| REQ-S-011 | DataAccessException 요약 매핑 | @RestControllerAdvice GlobalExceptionHandler INTERNAL 요약(테이블/컬럼 누출 차단) |
app.md §7-2 |
| REQ-S-012 | 민감 액션 감사 전수 | 승인·낙찰·설계변경·룰셋개정·리드접근·로그인/권한 TB_AUDIT_LOG(tenant_id 포함, @Audited AOP) |
app.md §7-3 |
| REQ-S-013 | PII 동의·마스킹·암호화 | 동의 분리(privacy/marketing/share)·최소수집·*_enc AES-256-GCM·응답 제외·보존/파기 |
data.md §5 |
| REQ-S-014 | 입력 검증 | Bean Validation 화이트리스트·파일 MIME/크기 가드(WAF+앱 이중) | tech.md §7, network.md §4-2 |
| REQ-S-015 | XSS 방지·CSP | React 이스케이프·dangerouslySetInnerHTML 금지·CMS sanitize·CSP | rfp §6-N2 |
| REQ-S-016 | 인젝션 차단 | MyBatis #{} 강제·${} 금지, PostGIS/명령/LDAP 파라미터 바인딩 |
rfp §6-N2 |
| REQ-S-017 | IDOR·CSRF·JWT 회전 | 리소스 소유·tenant_id 검증, CSRF/SameSite, JWT 만료·회전 | rfp §6-N2 |
| REQ-S-018 | fail-closed 테넌트 격리 | 4층(컨텍스트 필터→서비스 가드→MyBatis 인터셉터→PostGIS) | §1-3 |
| REQ-S-019 | 의존성 SCA CI 게이트 | OWASP Dependency-Check CI 게이트·정기 패치 | rfp §6-N2 |
| REQ-S-020 | 보안영역 분리 | 공개 DMZ 쓰기 없음·데이터존 직결 불가·DMZ↔내부 HTTPS(mTLS 권장)만·DB 프로토콜 횡단 금지 | network.md §2·§4 |
보안 성숙도 강조점(P5): ①이미 라이브인 인증·워터마크·admin env(4·5·9번 실증) → "설계가 아니라 동작하는 통제". ②데이터존 아웃바운드 0으로 유출 경로 자체 제거(network.md 철칙). ③외부 AI 키 격리=네트워크 격리 정합(Gemini 워커존만, Claude 백엔드만, 데이터존 무egress).
5. WBS·공수(M/M) 산정 (P8)
근거: IMPLEMENTATION_BACKLOG Phase A~E·PLANNING §9 로드맵(Phase 1~3 각 ~4개월)·142 REQ·18 모듈. 산정 기반=유사 공공 AI SI 생산성 + 기능 규모(100대 기능: 기구현 63·부분 18·신규 19) + 라이브 스캐폴드로 인한 착수 리스크·초기 구축 공수 절감 반영.
5-1. WBS 구조 (Phase × 산출물)
| Phase | 기간(가정) | 주요 작업(WBS) | 완료 게이트 |
|---|---|---|---|
| A 아키텍처·거버넌스 | 착수~1M | AA/SA/TA/DA/NA 5종 아키텍처(완료)·정합 검증 | 아키텍처 확정·불일치 0 |
| B 공통/시스템관리 레이어 | ~Phase1 내 | 인증(JWT/2FA)·시스템관리·공통 업무기능·공통 컴포넌트(WISE 이식) | 2FA/RBAC/감사 왕복(대부분 라이브) |
| C P0 부스 코어 | Phase1(~4M) | M2 플로어플랜(3안·규정검증)·M3 부스설계·M4 배선·M5 나노바나나 | 3안·병합·재검증·시각화 |
| D P1 도메인 | Phase2(~4M) | M15 옥션·M10 관람·M12/17 CMS/공개·M16 BI·M18 관리자·M1/6/7/9 | 각 모듈 왕복·QA 통과 |
| E P2·배포·확장 | Phase3(~4M+) | M11·M13·M14·멀티테넌시·역할별 번들 분리·배포 안정화·SM 이관 | (G2 후)배포·이관 |
5-2. 직군별 공수 산정 (M/M)
12개월(Phase 1~3) 기준. 라이브 스캐폴드/인프라/인증 실적으로 초기 구축 공수를 이미 일부 소화 → 산정에 반영(과다 산정 금지). Phase A는 대부분 완료(감독 공수만 잔여).
| 직군 | Phase 1 | Phase 2 | Phase 3 | 합계(M/M) | 산정 근거 |
|---|---|---|---|---|---|
| 총괄 PM | 4 | 4 | 4 | 12 | 상주 1.0 FTE |
| 아키텍트(AA·SA·TA·DA·NA) | 8 | 4 | 2 | 14 | Phase A 집중(완료)→거버넌스 감독 |
| 백엔드(공통·코어·도메인) | 12 | 16 | 12 | 40 | 18모듈 코어, 최대 투입 직군 |
| 프론트엔드(역할별 6포털) | 8 | 12 | 8 | 28 | Stitch 이식+역할별 번들 |
| DB 엔지니어(PostGIS) | 4 | 4 | 2 | 10 | 공간 스키마·매퍼·BI 마트·멀티테넌시 |
| AI 개발(Claude·제약 솔버) | 4 | 4 | 2 | 10 | 배치 솔버·규정보조·예측·AiTextRouter |
| 시각화(나노바나나 워커) | 4 | 2 | 2 | 8 | 파이프라인(라이브)·샷세트·품질 |
| QA | 4 | 6 | 6 | 16 | 점진 경계면·보안 불변·회귀 |
| DevOps/인프라 | 2 | 2 | 4 | 8 | CI/CD(라이브)·배포·이관 |
| 소계 | 50 | 54 | 42 | 146 |
- 총 공수: 약 146 M/M(핵심 개발) + PMO/형상관리·품질보증 오버헤드(약 4~8 M/M) → 총 ~150 M/M 규모.
- 가격평가·투입계획 정합: 위 산정은 가격제안 투입인력표(직군·기간·M/M)와 1:1 매핑. 라이브 실적(스캐폴드·인증·인프라·나노바나나)이 Phase A/B 공수를 실측 절감 → 동일 규모 대비 착수 리스크·초기 구축비 우위.
- 주의: 예산·사업기간은 실제 RFP 부재로 [가정](공공 SI 통례). 실제 공고 확인 시 M/M·기간 즉시 재정렬.
6. SM 운영 체계 (SLA·장애대응·정기점검·CI/CD 운영)
SI 구축 후 유지보수/운영 제안. 이미 라이브인 자동배포 파이프라인을 실적으로 인용(과장 아님 — WORK_STATUS §2·§7 검증분).
6-1. 운영 체계·조직(R&R)
- 서비스 데스크·ITSM 프로세스: 요청(SR)·장애(Incident)·변경(Change)·배포(Release)·문제(Problem·RCA). 공통 업무모듈(통합검색·알림·회의록)·감사로그 기반 티켓 이력.
- 조직: 운영 총괄 1 + 백엔드/프론트 유지보수 + DB/인프라(DevOps) + AI 워커 담당 + QA. 근무체계=평일 상주 + 행사 성수기(3~5·9~11월) 온콜.
6-2. SLA 지표
| 지표 | 목표 | 측정 |
|---|---|---|
| 코어 서비스 가용성 | 99.5%(성수기 99.9% 지향) | 월 가용성·/actuator/health |
| 장애 응답시간 | 심각도별(P1 즉시·P2 30분·P3 4시간) | 티켓 타임스탬프 |
| 장애 복구시간(MTTR) | P1 ≤2h·P2 ≤1영업일 | 복구 완료 기록 |
| 배포 성공률 | ≥99%(Fail-Safe 롤백 자동) | 배포 로그 health 게이트 |
| 나노바나나 큐 소진 | best-effort(피크 워커 스케일아웃) | 큐 적체·처리량 |
측정·보고: 월간 SLA 리포트(가용성·MTTR·티켓·배포). 페널티 체계는 계약 조건에 따름(RFP 확인 필요).
6-3. 유지보수 활동
- 예방정비·정기점검: DB 인덱스/통계·복제 지연·백업(PITR) 정상성, Redis AOF·큐 백로그, 워커 하트비트, 디스크/스토리지 용량, 인증서(TLS) 만료 점검.
- 패치/보안 업데이트: OWASP Dependency-Check SCA 정기 스캔(REQ-S-019)·의존성 패치, OS/미들웨어 보안 패치. 룰셋(요율·규정) 무중단 개정(버전 데이터, M18 백오피스·감사 기록).
- 성능 튜닝: PostGIS 공간 쿼리(GiST·EXPLAIN ANALYZE)·Hikari 풀·읽기복제 라우팅·BI 배치 ETL 시간 최적화.
- 형상관리: Gitea
zio/kintex·Conventional Commits·main 보호·환경 분리(dev/staging/prod).
6-4. 장애 대응
- 등급분류·에스컬레이션: P1(서비스 중단)~P4(경미). 자동 알림(WebSocket/통합 알림센터)·온콜 에스컬레이션.
- RCA·재발방지: 장애 후 근본원인 분석(RCA) 리포트·재발방지 조치 티켓화. 감사로그·관측성(로그/메트릭/트레이스, PII·스택트레이스 미기록)로 추적.
- degraded/BCP·DR: G1/Gemini 장애=워커 목 응답(구조·워터마크 유지), Claude 장애=Ollama 폴백, PG 장애=자동 failover+PITR, 배포 실패=자동 롤백. 데이터 백업·복구 절차(RPO 최소·RTO 분 단위).
6-5. CI/CD 운영 (라이브 실적 인용)
- 자동배포 파이프라인(라이브·검증됨):
workspace/kintex→ Gitea webhook →deploy_kintex.sh(bootJar + vite build → 배포 → health 게이트 → 실패 시 롤백). push 시 자동배포. (WORK_STATUS §2·§7) - 운영 함정 숙지(실측 교훈): 서버
/opt/zioinfo/deploy_server.py(kintex 블록)·/opt/kintex/수정 시 반영+재시작 필수(로컬만 고치면 웹훅 1ms no-op), 백엔드도 반드시 빌드,sh ./gradlew(실행권한), 로컬 vite rollup win32 크래시=서버 빌드 신뢰(tsc 통과 검증).
6-6. 이행/이관
- 인수인계(WORK_STATUS.md 인수인계 문서 체계 활용)·안정화·지식이전(운영자/개발자 지침서 PPT·프로그램 사양서)·종료 시 이관 계획. 운영 도메인
kintex.wise.ai.kr전환(후속).
7. RTM 기술 파트 갱신 입력 (REQ ↔ tech_advisory 절 매핑)
rfp-analyst RTM 반영상태 갱신용. 각 REQ 계열이 본 자문서 어느 절에서 기술적으로 대응되는지 매핑. QA는 이 표로 기술 파트 커버리지 교차 점검.
| REQ 계열 | 범위 | tech_advisory 대응 절 | 제안서 목차 |
|---|---|---|---|
| REQ-F-007~019(배치·설계·배선 코어) | M2~M4 | §2 WT-2, §1-2, 도식 ⑤⑥ | P3 |
| REQ-F-025~032(옥션) | M15 | §2 WT-3, 도식 ⑦⑧ | P3 |
| REQ-F-037~055(관람·현장·물류) | M8·M10~M14 | §1-2 App/데이터, §3(오프라인 폴백 N-폴백) | P3 |
| REQ-F-061~066(BI) | M16 | §1-2 데이터, §3 REQ-N-021, data.md 마트 | P3 |
| REQ-F-071~081(관리·공통·멀티테넌시·포털) | M18·§5B·§1A | §1-2·§1-3, 도식 ⑪ | P4·P5·P7·P8 |
| REQ-F-001~006·020~024·033~036·048~051·056~060·067~070 | 판매·서류·정산·CMS·공개 | §1-2 계층·§2 WT, §6(룰셋 운영) | P3 |
| REQ-A-001~008(나노바나나) | M5 | §2 WT-1, 도식 ③④ | P3(핵심) |
| REQ-A-009·010·020(배치·규정·비전) | M2/M3 | §2 WT-2 | P3 |
| REQ-A-013·014(예측·KPI·Text-to-SQL) | M16 | §1-2 AI(텍스트), §3 N-021 | P3 |
| REQ-A-016·017(라우터·RAG·환각) | §6 | §1-2 AI(텍스트), §4(abstain) | P4·P5 |
| REQ-A-011·012·015·018·019(검수·챗봇·카피·리드·이상탐지) | 다수 | §1-2 AI(텍스트) | P3 |
| REQ-N-001~021 | 비기능 21 | §3 전체 표(21행 1:1) | P6·P4 |
| REQ-S-001~020 | 보안 20 | §4 전체 표(20행 1:1) | P5 |
| (인프라·HA·배포·관측성) | N-002·003·004·018 | §1-2·§3·§6 SM·§0 실적 | P4·P6·P8 |
요약 보고 (오케스트레이터·writer·deck-designer용)
1. 도식 12종 사양 완비 여부: ✅ 12/12 완비(§1-4). ①3중 해자 벤 ②모듈맵 ③나노바나나 파이프라인 ④Before/After ⑤3안 비교 ⑥PostGIS 배선 ⑦옥션 폐루프 ⑧종합평가 스코어 ⑨시스템 아키텍처 ⑩보안영역 분리 ⑪멀티테넌시 격리 ⑫일정 간트 — 각 박스·연결·라벨 텍스트 작도 사양 기술. 추가 표준 도식 3종(추진체계도·리스크 매트릭스·기대효과)은 사양 위치 지정(§1-4 말미).
2. REQ 대응 커버리지: 미대응 0. REQ-N 21건 전부(§3 표 21행 1:1), REQ-S 20건 전부(§4 표 20행 1:1), REQ-F/REQ-A는 §1-2·§2 Win Theme·§7 매핑표로 전 계열 대응. 총 142 REQ 기술 파트 커버(§7 RTM 갱신 입력).
3. 공수 총 M/M: 약 146 M/M(핵심 개발, 직군 9종×Phase 3구간) + PMO/QA 오버헤드 4~8 → 총 ~150 M/M 규모(12개월·Phase 1~3). 라이브 스캐폴드·인증·인프라·나노바나나 실적으로 Phase A/B 공수 실측 절감 반영 = 동일 규모 대비 착수 우위.
4. 과장 방지 준수: 라이브 확인분(인프라·CI/CD·나노바나나·인증·워터마크·PostGIS 코어·평면도 자산)만 "구축 완료/검증됨", 도메인 모듈·멀티테넌시·집계 API·i18n/접근성 전면 적용은 "구현 계획"으로 명확 구분(§0). 시크릿(키·비번·내부IP) 전면 미기재.
5. 파일: C:\GUARDiA\workspace\kintex\_workspace\proposal\tech_advisory.md