# 설계 원칙 ## 왜 pccx-lab은 5개가 아닌 1개의 레포지토리인가? 초기 설계에서는 시뮬레이터, 프론트엔드, UVM 브릿지, AI, 공통 라이브러리 등 5개의 개별 레포지토리로 분리하는 구조를 고려했습니다. 하지만 다음과 같은 이유로 기각되었습니다: 1. **개발 속도**: 여러 레포지토리에 걸친 변경 사항을 동기화하고 버전을 관리하는 오버헤드가 매우 큽니다. 2. **단일 목적성**: 모든 모듈이 결국 'pccx 프로파일링'이라는 단일한 목적을 향해 긴밀하게 협력합니다. ## 모듈 경계 규칙 단일 레포지토리의 단점(스파게티 코드)을 막기 위해, 디렉토리 기반의 엄격한 모듈 경계를 강제합니다: - `core/`: 순수 Rust 모듈. 외부 의존성을 최소화하며, UI 프레임워크를 import하는 것을 엄격히 금지합니다. - `ui/`: Tauri + React 기반 모듈. 오직 `core/`의 공개 API만 사용하여 시각화를 처리합니다. - `uvm_bridge/`: SystemVerilog/UVM과 `core/`의 경계. DPI-C 또는 FFI를 사용합니다. - `ai_copilot/`: LLM 호출 래퍼 모듈. 오직 `core/`의 트레이스 포맷(JSON 등)에만 의존합니다. ## 향후 분리 조건 특정 모듈(예: `core/`)이 pccx-lab 외부의 다른 프로젝트에서도 독자적으로 사용될 만큼 범용성을 갖추게 되면, 그때 crate로 퍼블리시하거나 별도 레포지토리로 분리하는 것을 검토합니다.