kintex/docs/deliverables/제안서/_gen/tech_advisory.md
zio ba90b54d81 feat(proposal): G2B-standard 7-chapter proposal deck (97 slides, QA-approved)
- Restructure to KONEPS (조달청 협상계약 별지5호) standard TOC: I general / II strategy-methodology / III tech-function / IV performance-quality / V PM / VI support / VII misc
- 9 new slides: staffing M/M, quantitative eval, standard framework, PM methodology, handover/training, SM/SLA, incident/BCP, managerial security, subcontracting
- Scoring alignment updated to tech 90 (70 qual + 20 quant) / price 10
- Nanobanana win-theme dual placement (II applied-tech + III function)
- Appendix D screen gallery (19 Stitch drafts) with AI-draft disclosure
- QA PASS: RTM 142/142 (3 fixes: F-008/F-010/F-026), no secrets, honesty labels verified
- Preserve rebuild toolchain + source docs in deliverables/제안서/_gen (16 files)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-07-12 00:44:44 +09:00

41 KiB
Raw Blame History

킨텍스 자동전시시스템 구축 — 기술·아키텍처 자문서 (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.md v3.0·docs/SECURITY.md·docs/WORK_STATUS.md(라이브 실적)·kintex CLAUDE.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 — 옥션별 설정형(weight jsonb)".
  • 하이라이트: 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): 가중 스코어(가격+평판+납기, weight jsonb) → 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): 관람객/리드 *_enc AES-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