Files
ParaWiki/Output/reports/ADR-001-tech-stack.md
minsung 561d2ea4fd cimery 프로젝트명 확정 및 기술 스택 ADR-001 추가
도구 명칭을 cimery(Civil + BIM + -ery)로 확정. 웹(PWA)·데스크톱(Tauri) 듀얼
타깃의 Rust 기반 스택을 잠정 확정하고 근거와 후속 결정 항목을 ADR로 기록.

- 기하 커널: OpenCascade.js(웹) / opencascade-rs(데스크톱) 이원화, GeomKernel trait 추상화
- 렌더: wgpu → WebGPU
- 순수 Rust 공유 모듈: LPG 증분 엔진, FBM Feature, 선형·LRS
- 기존 C# 엔진은 알고리즘·지식만 승계

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

4.5 KiB

id, title, status, date, related-wiki, principles
id title status date related-wiki principles
ADR-001 cimery 기술 스택 — 웹·데스크톱 듀얼 타깃 Rust 아키텍처 accepted 2026-04-14
특징 형상 기반 모델링 FBM
증분형 갱신 알고리즘 LPG
선형 GIS 기반 좌표계
PCE 파라메트릭 변경 엔진
GCS 기하학적 구속조건 솔버
비패밀리
증분
선형-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 공유 모듈 (빌드 독립)

기각된 대안

  • 순수 C# 유지: 25년 자산 재활용은 매력적이나 PCE 파라메트릭 변경 엔진 대응(CPU 캐시·메모리 배치 통제)이 GC·박싱으로 제약. 웹 포팅 경로가 자연스럽지 않음.
  • 순수 Rust + truck 커널: B-rep·NURBS·boolean 성숙도가 OCCT 대비 부족. 토폴로지 예외 리스크.
  • Electron: Tauri 대비 바이너리·메모리 부담 큼. Rust 네이티브 통합 이점 상실.
  • 순수 PWA (Tauri 없음): 데스크톱 파일 시스템 접근·대용량 IFC 처리에 제약. 브라우저 WASM 4GB 한계.
  • Unity/Unreal 등 게임엔진 기반: CAD 시맨틱과 무관한 게임 루프 비용.

채택 근거

원칙 정합성

사업·사용성

  • 고객 설치 장벽 최소화: 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 프로젝트의 유지 관리 상태 악화 시 재검토.