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:
minsung
2026-04-14 14:59:14 +09:00
parent b011197401
commit 561d2ea4fd
3 changed files with 119 additions and 5 deletions

View File

@@ -7,10 +7,10 @@
## 나의 역할들
### 파라메트릭 모델링 도구 개발자
- **하는 일:** Revit의 토목 버전 파라메트릭 모델링 도구 설계·개발.
### cimery 개발자
- **하는 일:** `cimery` Revit의 토목 버전 파라메트릭 모델링 도구 설계·개발. (명칭: Civil + BIM + -ery)
- **주요 관심사:** 토목 구조물(MVP: 거더교) 모델링, 선형·GIS 연동, 증분 인터랙티브 파라메트릭.
- **기술 자산:** C# 자체 3D 엔진(sweep/loft/boolean 등 솔리드 연산). Rust 재설계 검토 중.
- **기술 스택 (2026-04-14 확정):** Rust 기반. 웹(PWA) + 데스크톱(Tauri) 듀얼 타깃. 기하 커널은 OpenCascade.js(웹) / opencascade-rs(데스크톱) 이원화, `GeomKernel` trait로 추상화. 렌더 wgpu→WebGPU. 기존 C# 엔진은 알고리즘·지식만 승계. 상세: `Output/reports/ADR-001-tech-stack.md`.
### ParaWiki 큐레이터
- **하는 일:** AI가 읽고 활용할 수 있는 파라메트릭 모델링 지식 저장소를 Obsidian 기반으로 구축.
@@ -60,3 +60,25 @@
10. `index.md` 항목은 **한 줄, 120자 이내.**
각 주요 폴더의 세부 규칙은 해당 폴더의 `CLAUDE.md` 참조.
## Obsidian CLI 사용
이 프로젝트 볼트는 Obsidian 공식 CLI(1.12.4+)로 검색 가능. 파일시스템 grep보다 빠르고 Obsidian 인덱스·wikilink·백링크를 활용한다.
**문법:** `obsidian <command> key=value key=value` (Unix 플래그 아님)
값에 공백이 있으면 따옴표: `query="증분 파라메트릭"`
**주요 명령:**
- `obsidian search query="<질의>" path=wiki` — 파일명 목록 반환
- `obsidian search:context query="<질의>" path=wiki` — 매칭 라인 컨텍스트 포함
- `obsidian read file="<페이지명>"` — 파일 내용 읽기 (wikilink 이름으로 해결)
- `obsidian backlinks file="<페이지명>"` — 백링크 조회
- `obsidian outline file="<페이지명>"` — 헤딩 목록
- `obsidian files folder=wiki` — wiki/ 파일 목록
- `obsidian open file="<페이지명>"` — 앱에서 페이지 열기
- `obsidian help` / `obsidian help <command>` — 전체·개별 도움말
**사용 원칙:**
- `wiki/` 검색 시 `obsidian search:context` 우선 (Obsidian 앱이 실행 중이어야 함). 미실행·미설치 시 Grep 폴백.
- 파일 읽기는 경로 대신 이름(`file=...`) 사용 가능 — Read 도구보다 wikilink 친화적.
- 복잡한 질의·개념 QA는 `query` skill이 상위 레이어 (index.md → 필요 시 CLI 보조).

View 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 프로젝트의 유지 관리 상태 악화 시 재검토.

View File

@@ -2,12 +2,13 @@
## 1. 나는 누구인가
BIM SW 시니어 개발자. 25년간 3D 뷰어·에디터·모델링툴, DWG·CAD 엔진 개발.
현재 자산: C# 자체 3D 엔진 (sweep/loft/boolean 등 솔리드 연산 가능, 파라메트릭 아님, 성숙도 낮음). Rust 재설계 검토 중.
현재 자산: C# 자체 3D 엔진 (sweep/loft/boolean 등 솔리드 연산 가능, 파라메트릭 아님, 성숙도 낮음).
cimery는 **Rust 기반 신규 스택**으로 결정 — 기존 C# 엔진은 알고리즘·도메인 지식만 승계.
## 2. 무엇을 만드는가
두 단계로 나눈다.
- **ParaWiki (지금 만드는 것)**: AI가 읽고 활용할 수 있는 파라메트릭 모델링 지식 저장소. "AI를 위한 세컨드 브레인".
- **토목용 파라메트릭 모델링 도구 (다음 단계)**: Revit의 토목 버전. 건축이 아닌 **토목 구조물** 중심. ParaWiki를 재료로 AI와 함께 개발.
- **cimery (다음 단계)**: 토목용 파라메트릭 모델링 도구. Revit의 토목 버전. 건축이 아닌 **토목 구조물** 중심. ParaWiki를 재료로 AI와 함께 개발. (명칭: Civil + BIM + -ery)
## 3. 왜 저장소부터 만드는가
파라메트릭 모델링 개발에는 방대한 도서·논문·수학이 필요하다. AI가 양질의 골든 저장소를 읽고 개발을 도울 수 있어야 한다.
@@ -30,3 +31,12 @@ MVP는 **기능을 좁히는 것**이지 **대충 만드는 것이 아니다**.
- **재료:** 현재는 AI로 조사한 문서가 주 소스.
- **언어:** 한국어 작성, 중요 용어는 영어 병기 (예: 선형(alignment)).
- **구조:** AI가 잘 활용할 수 있는 구조 1순위. 사람은 최상위 index의 링크로 접근 (사람도 결국 AI로 질의).
## 7. cimery 기술 스택 (2026-04-14 확정)
- **언어:** Rust. 웹(PWA)과 데스크톱(Tauri) **하나의 코드베이스**로 듀얼 타깃.
- **기하 커널:** `GeomKernel` trait 추상화 → 웹은 **OpenCascade.js(WASM)**, 데스크톱은 **opencascade-rs C++ FFI**.
- **렌더:** wgpu → WebGPU (웹·데스크톱 공통).
- **UI 프레임워크:** 미정(egui / Yew / Leptos).
- **순수 Rust 공유 모듈:** LPG 증분 엔진, FBM Feature 정의, 선형·LRS.
- **MVP 타깃 환경:** Chromium + WebGPU. 전 브라우저 호환·대용량 IFC는 v2.
- 상세: `Output/reports/ADR-001-tech-stack.md`.