From 561d2ea4fdb337c64f661604e14514a6af4cac52 Mon Sep 17 00:00:00 2001 From: minsung Date: Tue, 14 Apr 2026 14:59:14 +0900 Subject: [PATCH] =?UTF-8?q?cimery=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8?= =?UTF-8?q?=EB=AA=85=20=ED=99=95=EC=A0=95=20=EB=B0=8F=20=EA=B8=B0=EC=88=A0?= =?UTF-8?q?=20=EC=8A=A4=ED=83=9D=20ADR-001=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 도구 명칭을 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) --- CLAUDE.md | 28 +++++++++- Output/reports/ADR-001-tech-stack.md | 82 ++++++++++++++++++++++++++++ 나의 핵심 맥락.md | 14 ++++- 3 files changed, 119 insertions(+), 5 deletions(-) create mode 100644 Output/reports/ADR-001-tech-stack.md diff --git a/CLAUDE.md b/CLAUDE.md index b5e6df3..3de9c05 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -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 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 ` — 전체·개별 도움말 + +**사용 원칙:** +- `wiki/` 검색 시 `obsidian search:context` 우선 (Obsidian 앱이 실행 중이어야 함). 미실행·미설치 시 Grep 폴백. +- 파일 읽기는 경로 대신 이름(`file=...`) 사용 가능 — Read 도구보다 wikilink 친화적. +- 복잡한 질의·개념 QA는 `query` skill이 상위 레이어 (index.md → 필요 시 CLI 보조). diff --git a/Output/reports/ADR-001-tech-stack.md b/Output/reports/ADR-001-tech-stack.md new file mode 100644 index 0000000..a8a4cc3 --- /dev/null +++ b/Output/reports/ADR-001-tech-stack.md @@ -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 프로젝트의 유지 관리 상태 악화 시 재검토. diff --git a/나의 핵심 맥락.md b/나의 핵심 맥락.md index 26076eb..090c58d 100644 --- a/나의 핵심 맥락.md +++ b/나의 핵심 맥락.md @@ -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`.