Files
ParaWiki/Output/reports/ADR-003-architecture-followups.md
minsung d90ef2cfe1
All checks were successful
Publish ParaWiki / build-and-deploy (push) Successful in 29s
ADR-003 후속 아키텍처 결정 추가
12개 주제 병렬 조사 기반 결정 통합:
UI(Leptos+wgpu), IFC(ifc-lite-core), CI/CD(Gitea+GH 미러),
USD(Codeless schema), Alignment 단계 도입, WASM plugin 3단계,
Feature 카탈로그, FEM(MIDAS), LOD 300, 리본 12탭,
선택/필터, 설정 3계층 모델.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-14 16:42:06 +09:00

15 KiB
Raw Blame History

id, title, status, date, related-wiki, related-adr, principles
id title status date related-wiki related-adr principles
ADR-003 cimery 후속 아키텍처 결정 — UI·IFC·CI/CD·USD·Alignment·Plugin·Feature 카탈로그·FEM·LOD·UX accepted 2026-04-14
특징 형상 기반 모델링 FBM
증분형 갱신 알고리즘 LPG
선형 GIS 기반 좌표계
PCE 파라메트릭 변경 엔진
Revit 조립 단위 분류
ADR-001-tech-stack
ADR-002-feature-dsl
비패밀리
증분
선형-GIS

ADR-003 — cimery 후속 아키텍처 결정 (12개 주제)

결정 요약표

# 주제 결정
A1 UI 프레임워크 Leptos (UI) + <canvas>wgpu (3D 뷰포트)
A2 IFC 라이브러리 이원 전략 — 런타임 ifc-lite-core, 검증 IfcOpenShell
A3 빌드·배포 파이프라인 하이브리드 B — Gitea 메인 CI, GitHub Actions 미러로 Win/macOS 빌드·서명. 중기 Cloudflare R2/Worker
A4 USD 스키마 매핑 Codeless USD Applied API Schema (CimeryBridgeAPI 등) + IFC alias 이중 태깅
A5 LandXML·IFC Alignment import 단계 도입 — MVP 자체 포맷만 / v1.1 LandXML 자체 파서 / v2 IFC 4.3
A6 WASM plugin 승격 3단계 — MVP 내부 모듈 / v2 Extism / v3 Component Model (WIT)
B7+B8 Feature 카탈로그 + 파라미터 Must 6 (거더·슬래브·교각·교대·받침·선형) / Should 3 / Won't 철근·사장·현수
B9 FEM 연동 하이브리드 단계 — MVP MIDAS Civil NX API export / v2 IFC SAV 2.0 / v3 간이 빔·프레임 내장
B10 LOD·렌더 BIM LOD 300 고정 + graphics LOD = discrete 2단 + 동적 tessellation. v2 meshlet.
C11 리본·패널 레이아웃 12탭 구성 (Home·Alignment·Structure·Feature·Site&GIS·Annotate·Analyze·Construction·Insert·View·Manage·Modify) + contextual 탭
C12 선택·필터 Category = Feature kind. cimery 고유: 선형 스테이션 선택·규칙 선택·영향권 하이라이트
C13 사용자 설정 VS Code 3계층 모델 (Default→User→Project→Project.local) JSON. 좌표계·tolerance는 Project 잠금

A1. UI 프레임워크 — Leptos + wgpu

결정: UI 셸은 Leptos, 3D 뷰포트는 <canvas>wgpu 직접 렌더.

근거

  • Tauri v2는 본질상 WebView 기반 → Leptos 하나로 PWA·Tauri 양쪽 커버. 자산·패키징 단일화.
  • Revit식 복잡 UI(리본·도킹·트리·속성창·IME·접근성)는 HTML/CSS 생태계 재사용이 현실적. egui의 immediate mode는 커스텀 위젯 비용 누적.
  • Leptos의 fine-grained reactivity증분형 갱신 알고리즘 LPG의 부분 전파 모델과 정합.
  • egui(이미 wgpu 통합 강점)도 고려했으나 다국어·리본·속성창 밀도·Tauri/PWA 공유 면에서 열세.

기각: Yew(VDOM 오버헤드·둔화), Dioxus(후보지만 Leptos 우위), egui(위 이유).


A2. IFC 라이브러리 — 이원 전략

결정:

  • 런타임(Rust+WASM): ifc-lite-core (louistrue) — IFC4X3 스키마 876 엔티티, IFC5/IFCX 알파, WASM 일급 타깃.
  • 검증·참조 구현(개발 파이프라인 전용): IfcOpenShell.

근거

  • ifc_rs는 알파·정체, Alignment/Bridge 미지원.
  • IfcOpenShell LGPL은 WASM 배포에 까다로워 런타임 의존 비권장.
  • 어댑터 레이어로 감싸 단일 유지보수자 리스크 격리 — 향후 교체 가능.

A3. 빌드·배포 파이프라인 — 하이브리드 B

결정:

  • 단기(MVP~v1): Gitea Actions가 main CI(소스·PR·웹 배포), GitHub Actions 미러가 Windows/macOS Tauri 빌드·서명·릴리스 담당. 자동업데이트는 GitHub Releases 호스팅 latest.json.
  • 중기: Cloudflare R2 + Worker로 아티팩트·업데이터 엔드포인트를 자체 인프라로 회수.

구성 요소

  • Tauri v2 updater: Ed25519 키쌍, .sig + latest.json, 개인키는 CI 시크릿.
  • Windows 서명: Azure Trusted Signing 우선 (EV 하드웨어 토큰 불필요).
  • macOS 서명: Apple Developer ID + notarization.
  • 채널: nightly / beta / stable = Git 태그 prefix + 별도 latest-{channel}.json.
  • 웹(PWA): 기존 Cloudflare Pages 확장 — cimery-web.pages.dev.

기각: Pure Gitea(macOS 러너·matrix 제약 부담), CrabNebula Cloud(벤더 락인, MVP 불필요).


A4. USD 스키마 매핑 — Codeless Applied API Schema

결정: cimery 고유 개념을 codeless USD applied API schema로 정의하고, IR → USD evaluator가 Prim 단위 증분 export.

핵심 매핑 (초안)

cimery Feature USD Prim Applied API
Alignment UsdGeomBasisCurves CimeryAlignmentAPI (stations·designSpeed·cantRef)
Bridge Xform (kind=assembly) CimeryBridgeAPI
Girder Xform + child Mesh CimeryGirderAPI (sectionType·spanLength·materialGrade)
Pier / Abutment Xform + Mesh CimeryPierAPI / CimeryAbutmentAPI
Bearing Xform + Mesh, v2 UsdPhysicsJoint CimeryBearingAPI
Deck Slab Mesh CimeryDeckAPI
Material UsdShade.Material + MDL + UsdPreviewSurface
Coord / GIS Root Xform CimeryGeoRefAPI (EPSG·origin·rotation)

규칙

  • 이중 태깅: 같은 Prim에 CimeryGirderAPI + IfcGirder 커스텀 속성 동시 적용 → AOUSD·IFC5 공식 스키마 등장 시 1-shot alias/migration.
  • Alignment 3층 보존: 평면·종단·편경사를 sibling prims(/Align/Horizontal·/Vertical·/Cant)로 분리 over.
  • Assembly + Payload: Bridge = assembly, Girder = component. 대형 모델은 payload로 lazy load.
  • 파라메트릭 종속은 USD에 내보내지 않음 — derived geometry만. 규칙은 DSL IR에 유지 (ADR-002 재확인).

A5. LandXML · IFC 4.3 Alignment import — 단계 도입

결정:

  • MVP (v0.1): import 미구현. 자체 JSON 포맷만 공식 입력 (ADR-002 R).
  • v1.1: LandXML 자체 파서 (quick-xml 기반). 범위: <Alignment><CoordGeom> 수평 + <Profile> 종단. 스파이럴은 polyline tessellation 수용.
  • v2: IFC 4.3 Alignmentifc-lite-core(A2) 활용, 부족 시 fork. 수평·종단·캔트만 매핑.

근거

  • 거더교 본질은 내부 파라미터 복잡도(ADR-002 배경) — 선형 입력 품질이 MVP 차별점 아님.
  • IFC 4.3 Alignment 실무 라운드트립 2026년 아직 미성숙(Civil 3D·OpenRoads 모두 부분 지원).
  • LandXML이 실무 교환 빈도·자체 구현 부담에서 우위.

A6. WASM plugin 승격 — 3단계 경로

결정:

  1. MVP~v1: 내부 Rust 모듈. WASM 승격 보류. IR/DSL 안정화 선행.
  2. v2: Extism 얇은 래퍼 (cimery-plugin crate). Feature trait → Extism host 함수 매핑. #[param(...)] 메타를 WIT 유사 스키마로 export. Tauri + PWA 듀얼 (webxtism).
  3. v3: Component Model + WIT 마이그레이션. GeomKernel·Feature 인터페이스 표준화. ABI 레이어만 교체.

승격 게이팅 기준 (셋 다 충족 전엔 내부 모듈 유지)

  • (a) 써드파티/사내 별도 팀이 Feature 공급 실수요 발생
  • (b) 핵심 Feature 10개 이상 안정화
  • (c) salsa query 경계와 plugin 경계 일치

B7+B8. Feature 카탈로그 + 파라미터 구조

MoSCoW 우선순위

우선순위 Feature
Must (MVP v1) Girder · Deck Slab · Pier · Abutment · Bearing · Alignment(입력)
Should (v1.1) Cross Beam / Diaphragm · Expansion Joint · Parapet / Barrier
Could (v2) Pile Cap / Foundation · Approach Slab · Drainage · Sign Mount
Won't (v3+) Rebar / Tendon · Cable-stay · Suspension · Arch · Truss · Moveable

Must Feature 파라미터 (발췌)

Girder: alignment_ref, station_start/end, offset_from_alignment, section_type (PSC_I·PSC_U·Steel_Box·Steel_Plate_I), section (composite: height·flange·web·haunch 등), camber, material, count_per_span, spacing.

Deck Slab: alignment_ref, station_start/end, width_left/right, thickness, haunch_depth, cross_slope, overhang_left/right.

Pier: station, skew_angle, type (Wall·Single_Column·Multi_Column·Hammerhead·Portal), column_count/spacing, column_section, height, cap_beam (composite), foundation_level.

Abutment: station, skew_angle, type (Reverse_T·Counterfort·Wall·Semi_Integral·Integral), parapet_wall, breast_wall, wing_wall_left/right, footing, bearing_seat_level.

Bearing: station, girder_ref, support_ref, type (Elastomeric·Pot·Spherical·Rocker·Fixed·Expansion_Uni/Bi), capacity_vertical/horizontal, plan_dimension_x/y, total_height, anchor_bolt, installation_level.

단위: 구조물 Mm, 선형 M (ADR-002 C).


B9. FEM 연동 — 하이브리드 단계

결정:

  • MVP (v1): MIDAS Civil NX API 한방향 export. 국내 설계자 즉시 채택 가능. cimery = 모델링, MIDAS = 해석의 역할 분담.
  • v2: IFC 4.3 Structural Analysis View 2.0 export 병행. Robot·SOFiSTiK·Dlubal 커버. AnalysisExport trait 추상화.
  • v3+: 간이 빔·프레임 내장 solver (fenris + diffsol). 실시간 피드백(자중 처짐 등)용. 본격 해석은 외부 위임 유지.

근거

  • PCE 파라메트릭 변경 엔진 교훈: 변환 지점이 많을수록 파라메트릭 논리가 죽음. 내장이 이상적이나 MVP 리스크 과대.
  • Rust FEM 생태계(2026-04)는 연구/2D 수준, 교량 실무용 성숙도 부족.
  • MIDAS는 Python/Grasshopper 연동 사례 풍부, HTTP/FFI로 호출 가능.

B10. LOD · 렌더 전략

결정:

  • BIM LOD: MVP = LOD 300 고정 (설계자 인도·수량 산출 가능). LOD 350/400은 v2, 철근은 v2+.
  • Graphics LOD: discrete 2단 (근·원) + 동적 tessellation (편집 Feature만 고해상도) 하이브리드.
  • 컬링·인스턴싱: Frustum culling + per-Feature instancing(동일 세그먼트 거더). UsdGeomBasisCurves가 아닌 인스턴스는 LRS station 기반 인스턴스 버퍼.
  • 클리핑: WebGPU clip-distances 기반 단면(section) — 교량 종단 단면 필수 UX.
  • 메모리: Memory64(Chrome) 전제로 웹 4GB+ 확보. 원본 B-rep은 데스크톱만 상주, 웹은 tessellated mesh + Feature 메타만.
  • v2: meshlet (Nanite-like) 파이프라인. 교량 군·도심 회랑 단위.

기각: MVP에서 meshlet 전면 도입 (nanite-webgpu 가능성 입증되나 atomic<u64> 미지원·SW raster 복잡도로 MVP 부담).


C11. 리본·패널 레이아웃

기본 워크스페이스

┌── QAT + 앱 메뉴 + Info Center ────────────────────┐
├── Ribbon (탭 + 패널) ────────────────────────────┤
├Properties (좌상) ─┬── Drawing Area ──┬─(도구)────┤
├Project Browser   │   ViewCube(우상)  │           │
├─(좌하)           │   Nav Bar         │           │
└── View Control Bar + Status Bar ────────────────┘

리본 탭 12개

순서 용도
1 Home Select · Create · Modify 시작 허브
2 Alignment 선형·프로파일·측점·단면
3 Structure Girder · Pier · Abutment · Deck · Bearing
4 Feature FBM 피처 라이브러리 · Place · DSL Editor
5 Site & GIS 지형 · CRS · GIS import · Geo-reference
6 Annotate 치수 · 태그 · 텍스트 · 심볼
7 Analyze 수량 · 간섭 · 리포트
8 Construction 단계 · 공정 · 4D · Shop Drawing · (Rebar v2)
9 Insert IFC/LandXML link · CAD import · Point cloud
10 View 2D/3D 뷰 · Sheet · Visibility
11 Manage Project Info · Units · Standards · Shared Params
12 Modify (contextual; 항상 맨 오른쪽) Clipboard · Geometry · Modify

contextual 탭: Civil 3D식. 거더 선택 → "Modify | Girder" 탭이 Modify 오른쪽에 자동 활성화.

단축키 관습 유지: Esc·VG·WT·ZE·SD 등 2글자 키인, 탭 더블클릭 → 리본 최소화.


C12. 선택 · 필터 개념

Revit ↔ cimery 대응

Revit cimery 비고
Element Feature instance (IR 노드) 규칙 결과물
Category Feature kind (Rust 타입) #[param] 메타에서 자동 추출
Type(패밀리 타입) Feature template (struct + 파라미터 세트) CSV 라운드트립 단위
Tab 호버 순환 composite 트리 상하 순환 (2단 결정적) 그래프 금지 → 모호성 0
Selection Filter (수동) Named selection set (JSON) Git diff 가능
Rule-based Filter Parameter predicate (flange_thickness > 180mm) 타입 안전 질의
View Filter View preset (filter + 오버라이드, TOML) AI·diff 친화
Temporary Hide / Isolate 동일 UX 세션 한정

cimery 고유 확장

  1. 선형 기반 선택 — "스테이션 120180 m 구간의 모든 Girder".
  2. 규칙 선택 — 생성 규칙 자체를 selector로 재사용.
  3. 영향권 하이라이트 — salsa 의존성 그래프로 "이 파라미터 변경 시 무효화될 Feature" 시각화.
  4. Tab 범위 명시 — 2단 계층이므로 instance ↔ composite parent 2상태 토글.

C13. 사용자 설정 — VS Code 3계층 모델

저장 레이아웃

~/.cimery/settings.json                 # User (전역, 장비별)
~/.cimery/keybindings.json              # 키맵 분리
<project>/.cimery/settings.json         # Project (Git 커밋)
<project>/.cimery/settings.local.json   # 개인 override, .gitignore

병합 순서: Default ← User ← Project ← Project.local.

허용/제한 범주

범주 스코프 허용도
키맵 User 완전 허용 (Revit 기본값 + override)
휠 방향·감도 User 허용 (반전 토글 + 계수 0.254.0)
테마·언어·폰트·UI 스케일 User 허용
최근 파일·창 레이아웃 User (state) 자동 저장
표시 단위 Project 기본 + User override 설계 일관성
좌표계·선형 CRS·LRS Project 전용 (잠금) 데이터 무결성
tolerance · snap Project 전용 (잠금) 재현성·솔버 결과
자동저장 주기 User 허용
텔레메트리 · 업데이트 채널 User (global only) 워크스페이스 override 금지

안전장치

  • UI에 Project 전용 항목 잠금 표시.
  • 키맵 충돌 검출기 (Revit 기본값 덮어쓸 때 경고).
  • "$schema" · "version" 필드 초기부터 포함(마이그레이션 대비).

후속 결정 필요

  • 첫 Feature 엔드-투-엔드 프로토타입 (Girder · DSL → IR → 기하 → USD)
  • Revit 조작 관습 표 raw/tools/revit/ 수집
  • IFC 5 + USD 전환 자료 raw/standards/ 수집 (ADR-002에서 이미 예정)
  • MIDAS Civil NX API 접근 권한·개발 키
  • WASM plugin 승격 게이팅 기준 달성 시점 감시

검토 시점

  • 첫 Girder 엔드-투-엔드 동작 시 ADR 전체 재검토.
  • AOUSD AECO 스펙 발표(2026~27 예상) 시 A4 재검토.
  • Component Model 브라우저 성숙(~2027-2028) 시 A6 v3 승격.
  • IFC 4.3 Alignment 실무 라운드트립 성숙 시 A5 조기 도입.