유효

발행: (2026년 5월 25일 AM 03:15 GMT+9)
6 분 소요
원문: Dev.to

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)을 할당합니다. JavaScript requestAnimationFrame 렌더 루프가 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 OperationExecution Time (Mean)Gen 0 / 1000Allocated MemorySpeedup
VALID Slab direct memory write6.62 ns-0 B26.7x
F# Rule Evaluation15.80 ns-0 B10.4x
F# CRDT Convergence86.48 ns0.0391328 B1.8x
Blazor VDOM Mutation (Baseline)172.78 ns0.004840 BBaseline

챌린지에 앞서 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 같은 레거시 프레임워크에서 마이그레이션하는 경로를 완벽히 문서화했습니다.
0 조회
Back to Blog

관련 글

더 보기 »

내 스킬

프로젝트를 위한 AI 지시문을 만들고, 설치하고, 관리하세요 — 코딩이 필요 없습니다. CREATE 이름을 정하고, 카테고리를 선택하고, 원하는 것을 설명하세요 — 마법사가 자동으로 구성합니다.