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>
15 KiB
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 |
|
|
|
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 Alignment —
ifc-lite-core(A2) 활용, 부족 시 fork. 수평·종단·캔트만 매핑.
근거
- 거더교 본질은 내부 파라미터 복잡도(ADR-002 배경) — 선형 입력 품질이 MVP 차별점 아님.
- IFC 4.3 Alignment 실무 라운드트립 2026년 아직 미성숙(Civil 3D·OpenRoads 모두 부분 지원).
- LandXML이 실무 교환 빈도·자체 구현 부담에서 우위.
A6. WASM plugin 승격 — 3단계 경로
결정:
- MVP~v1: 내부 Rust 모듈. WASM 승격 보류. IR/DSL 안정화 선행.
- v2: Extism 얇은 래퍼 (
cimery-plugincrate). Feature trait → Extism host 함수 매핑.#[param(...)]메타를 WIT 유사 스키마로 export. Tauri + PWA 듀얼 (webxtism). - 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 커버.
AnalysisExporttrait 추상화. - 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 고유 확장
- 선형 기반 선택 — "스테이션 120–180 m 구간의 모든 Girder".
- 규칙 선택 — 생성 규칙 자체를 selector로 재사용.
- 영향권 하이라이트 — salsa 의존성 그래프로 "이 파라미터 변경 시 무효화될 Feature" 시각화.
- Tab 범위 명시 — 2단 계층이므로
instance ↔ composite parent2상태 토글.
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.25–4.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 조기 도입.