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>
This commit is contained in:
82
Output/reports/ADR-001-tech-stack.md
Normal file
82
Output/reports/ADR-001-tech-stack.md
Normal file
@@ -0,0 +1,82 @@
|
||||
---
|
||||
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 프로젝트의 유지 관리 상태 악화 시 재검토.
|
||||
Reference in New Issue
Block a user