유효
Source: Dev.to
이 글은 GitHub Finish‑Up‑A‑Thon 챌린지를 위한 제출물입니다.
저는 V.A.L.I.D. (Vectorized Asynchronous Logic & Intelligent Diagnostics)를 만들었습니다 — .NET 8 및 Blazor WebAssembly 애플리케이션용 경량 고성능 상태 추적 및 비즈니스 로직 프레임워크입니다.
CSLA 같은 엔터프라이즈 .NET 프레임워크나 Fluxor 같은 상태 컨테이너는 리플렉션과 힙에 할당되는 추적 컬렉션에 크게 의존합니다. V.A.L.I.D.는 이를 모두 제로 할당 컴파일 타임 모델로 대체합니다:
- 비트마스크 레지스터 상태 추적:
System.UInt128비트마스크를 사용해 최대 128개의 속성 플래그(Dirty, Error, Busy, Deleted)를 $O(1)$ 시간에 0 B 할당으로 추적합니다. - VDOM & JS 직렬화 우회: WebAssembly 선형 힙에 연속적인 네이티브 메모리 슬랩(
UnmanagedSlab)을 할당합니다. JavaScriptrequestAnimationFrame렌더 루프가 WASM 힙(HEAPU8)을 직접 읽어 요소를 정밀하게 업데이트함으로써 Blazor의 Virtual DOM diff를 우회합니다. - Roslyn 소스 제너레이터: 속성, 순환 Undo/Redo 히스토리, F# 레코드 매핑을 생성하고, 단위/퍼즈 테스트를 자동으로 만들어냅니다.
- F# 규칙 엔진: C# 상태를 불변 F# 구조체 레코드에 투사하여, 수학적 Add‑Wins Observed‑Removed Set (AWORSet) CRDT로 오프라인‑우선 복제 충돌을 해결합니다.
GitHub Repository: UnitBuilds-CC/V.A.L.I.D.
Official Documentation: V.A.L.I.D. Wiki
Architecture Overview
아래는 우리만의 WASM 우회 아키텍처 흐름을 시각화한 그림입니다:
다음은 V.A.L.I.D.의 직접 메모리 쓰기 속도를 표준 Blazor VDOM 변형과 비교한 공식 BenchmarkDotNet 결과입니다:
| Benchmark Operation | Execution Time (Mean) | Gen 0 / 1000 | Allocated Memory | Speedup |
|---|---|---|---|---|
| VALID Slab direct memory write | 6.62 ns | - | 0 B | 26.7x |
| F# Rule Evaluation | 15.80 ns | - | 0 B | 10.4x |
| F# CRDT Convergence | 86.48 ns | 0.0391 | 328 B | 1.8x |
| Blazor VDOM Mutation (Baseline) | 172.78 ns | 0.0048 | 40 B | Baseline |
챌린지에 앞서 V.A.L.I.D.는 로컬 디렉터리에 남아 있던 실험적인 증명 개념이었으며, 코드에는 컴파일 오류가 있었고 패키징 설정이 깨져 있었으며, JS‑WASM 브리지에서 WASM 메모리 버퍼가 리사이즈될 때 메모리 할당 충돌이 발생하곤 했습니다.
우리가 결승선을 통과하기 위해 수행한 작업은 다음과 같습니다:
- 핵심 라이브러리 의존성을 리팩터링하여 깨끗한 .NET 8 빌드를 지원하고, 100 % 테스트 커버리지를 검증했습니다.
- 수술용 브리지(
vavid-bypass.js)의 JS 메모리 재배치 버그를 수정했습니다. WASM 메모리의 매직 펄스 헤더를 확인하는 백그라운드 하트비트 인스펙터를 추가해, WASM 버퍼가 리사이즈될 경우 JS 루프가 자동으로 힙에 다시 바인딩되도록 했습니다. - NuGet 패키징 파이프라인을 정리하고 자산 버전을 지정했습니다 (VALID 3.0.3 및 VALID.FSharp 3.0.1).
- 공식 릴리스 파이프라인을 구축해 태그된 릴리스(v3.0.3)를 푸시하고
.nupkg자산을 릴리스 탭에 업로드했습니다. - Core Concepts, Getting Started, Business Objects, Validation Rules, Blazor Integration을 다루는 6페이지 분량의 종합 위키를 작성했습니다.
- GitHub Projects 보드에 Blazor Cashbook Demo를 채워 개발자들이 바로 사용할 수 있는 샌드박스를 제공했습니다.
- GitHub Copilot은 최종 다듬기 과정 전반에 걸쳐 귀중한 조력자 역할을 했습니다:
- 보일러플레이트 및 제너레이터 작성: Copilot 덕분에 Roslyn 소스 제너레이터 구문 트리를 몇 분 안에 만들고, 재귀적인 C# 속성‑비트 매핑 코드를 빠르게 작성할 수 있었습니다.
- 저수준 JS‑Interop 디버깅: Copilot이 안전 하트비트와 포인터 재배치 코드를 JavaScript로 작성하도록 도와 WASM
HEAPU8배열 오프셋 변경을 부드럽게 처리했습니다. - 문서 및 위키 생성: Copilot이 코드베이스를 분석해 명확하고 간결한 API 문서를 위키 페이지에 자동으로 컴파일해, CSLA 같은 레거시 프레임워크에서 마이그레이션하는 경로를 완벽히 문서화했습니다.