--- id: ADR-001 title: cimery 기술 스택 — 웹·데스크톱 듀얼 타깃 Rust 아키텍처 status: accepted date: 2026-04-14 related-wiki: - "[[특징 형상 기반 모델링 FBM]]" - "[[증분형 갱신 알고리즘 LPG]]" - "[[선형 GIS 기반 좌표계]]" - "[[PCE 파라메트릭 변경 엔진]]" - "[[GCS 기하학적 구속조건 솔버]]" principles: [비패밀리, 증분, 선형-GIS] --- # ADR-001 — cimery 기술 스택 확정 ## 결정 cimery는 **Rust 기반의 웹·데스크톱 듀얼 타깃 아키텍처**로 개발한다. 하나의 코드베이스로 **PWA(브라우저)**와 **Tauri(데스크톱)** 양쪽을 커버한다. ## 스택 구성 | 계층 | 선택 | 비고 | |---|---|---| | 언어 | **Rust** | 주 개발 언어 | | 기하 커널 (웹) | **OpenCascade.js** (WASM) | Emscripten 포트, ~30MB | | 기하 커널 (데스크톱) | **opencascade-rs** (C++ FFI) | 네이티브 OCCT | | 커널 추상화 | `GeomKernel` trait | 빌드별 백엔드 스왑 | | 렌더 | **wgpu → WebGPU** | 웹·데스크톱 공통 | | 데스크톱 포장 | **Tauri v2** | Rust 백엔드 + WebView | | 웹 포장 | **PWA** | 서비스워커·설치·오프라인 | | UI 프레임워크 | 미정 (egui / Yew / Leptos 중) | 후속 결정 | ## 순수 Rust 공유 모듈 (빌드 독립) - LPG 기반 **[[증분형 갱신 알고리즘 LPG|증분 엔진]]** - **[[특징 형상 기반 모델링 FBM|FBM]] Feature 정의·생성 규칙** - **[[선형 GIS 기반 좌표계|선형·LRS 코어]]** (IfcAlignment 호환) ## 기각된 대안 - **순수 C# 유지:** 25년 자산 재활용은 매력적이나 [[PCE 파라메트릭 변경 엔진|PCE 직렬화 병목]] 대응(CPU 캐시·메모리 배치 통제)이 GC·박싱으로 제약. 웹 포팅 경로가 자연스럽지 않음. - **순수 Rust + truck 커널:** B-rep·NURBS·boolean 성숙도가 OCCT 대비 부족. 토폴로지 예외 리스크. - **Electron:** Tauri 대비 바이너리·메모리 부담 큼. Rust 네이티브 통합 이점 상실. - **순수 PWA (Tauri 없음):** 데스크톱 파일 시스템 접근·대용량 IFC 처리에 제약. 브라우저 WASM 4GB 한계. - **Unity/Unreal 등 게임엔진 기반:** CAD 시맨틱과 무관한 게임 루프 비용. ## 채택 근거 ### 원칙 정합성 - [[특징 형상 기반 모델링 FBM|비패밀리·FBM]]: 순수 Rust 모듈에서 Feature 생성 규칙을 선언형으로 기술 가능. - [[증분형 갱신 알고리즘 LPG|증분 갱신]]: Rust의 소유권·메모리 통제가 LPG 증분 엔진의 캐시 효율에 유리. - [[선형 GIS 기반 좌표계|선형·GIS 일급 시민]]: 선형·LRS 코어를 네이티브 Rust로 두어 양 빌드 공유. ### 사업·사용성 - **고객 설치 장벽 최소화:** URL 공유(웹) + 단일 설치(데스크톱). - **미래 협업:** Speckle·공통 데이터 환경(CDE)과의 연동 자연스러움. - **보안·배포:** Tauri v2는 Electron 대비 공격면 작고 업데이트 모델 우수. ## 제약 조건 (MVP 경계) - **MVP 타깃 브라우저:** Chromium 기반(Edge, Chrome) + WebGPU 지원 환경. - **Safari/Firefox 호환, 전 브라우저 WebGPU:** v2 이후. - **대용량 IFC 처리(>수백 MB):** 데스크톱 전용. 웹은 경량 모델에 한정. - **OCCT.js 초기 로드 시간:** CDN·캐싱·지연 로딩 설계 필수. - **Tauri v2 API 학습:** v1 → v2 마이그레이션 없는 신규 개발이므로 비용 상대적으로 낮음. ## 기존 C# 자산 처리 - 기존 C# 3D 엔진(sweep/loft/boolean)은 **직접 재사용 없음.** - **알고리즘·도메인 지식은 포팅하며 승계.** 에지 케이스·수치 안정성 노하우가 가장 가치 있음. ## 아키텍처 원칙 1. **기하 커널 접근은 반드시 `GeomKernel` trait 경유.** OCCT 구체 타입 직접 노출 금지. 2. **도메인 코어(LPG·FBM·선형)는 빌드 독립.** 브라우저 API·파일 시스템 API 직접 참조 금지. 3. **플랫폼 특화 코드는 최상위 얇은 계층으로 격리** (Tauri commands / PWA service worker). ## 후속 결정 필요 - [ ] UI 프레임워크 (egui / Yew / Leptos) - [ ] IFC 라이브러리 선택 (ifcOpenShell WASM 포팅 vs 자체 파서 vs Rust 크레이트) - [ ] Feature DSL 형식 — 코드 Feature 먼저 시작은 합의, 선언형 DSL 언제 얹을지 - [ ] 빌드·배포 파이프라인 (CI/CD, 서명, 업데이트 채널) ## 검토 시점 - 1차 MVP 프로토타입 완료 시 이 ADR 재검토. - WebGPU 브라우저 지원 현황이 크게 변하면 재검토. - OCCT.js 또는 opencascade-rs 프로젝트의 유지 관리 상태 악화 시 재검토.