안녕하세요.
오랜만에 하나의 프로젝트를 잡고 꾸준히 진행하고 있어, 그 과정을 기록해보려고 합니다.
프로젝트의 이름은 Nuri입니다.
Nuri는 WPF, WinForms, MAUI, WinUI 3, Avalonia, Uno Platform, OpenSilver, MewUI와 같은 새로운 UI 프레임워크를 만드는 프로젝트는 아닙니다.
화면을 그리고, 윈도우를 생성하고, GPU나 Skia를 통해 실제 결과물을 표현하는 역할은 기존 프레임워크가 그대로 담당합니다.
Nuri는 그 위에서 UI를 작성하고 상태를 관리하는 새로운 방식을 제공하는 별도의 UI 라이브러리입니다.
개발자는 Nuri의 방식으로 UI를 선언하고, Nuri는 이를 각 프레임워크가 이해할 수 있는 실제 컨트롤로 변환합니다.
즉, 기존 프레임워크를 대체하는 것이 아니라 기존 렌더링 환경을 활용하면서 UI를 구성하는 방식을 새롭게 만들어보는 프로젝트라고 생각하시면 됩니다.
예전부터 C# 코드만으로 UI를 구성하는 방식을 직접 만들어보고 싶었습니다.
현재의 Nuri를 시작하기 전에도 비슷한 아이디어를 검증하기 위해 Delta라는 프로젝트를 개발한 적이 있습니다.
Delta는 WPF에서 MVU 패턴과 useState 형태의 상태 관리, Fluent 방식의 선언형 UI를 구현해보기 위한 초기 실험 프로젝트였습니다.
이를 통해 C# 코드만으로 UI를 선언하고, 상태 변경에 따라 변경된 부분만 실제 컨트롤에 반영하는 방식이 가능한지 확인해볼 수 있었습니다.
하지만 상태 변경, 화면 갱신, 컴포넌트 생명주기, 렌더링 성능까지 본격적으로 다루기 시작하면서 구조적인 한계에 도달했습니다.
결국 혼자 구현하고 검증할 수 있는 범위를 넘어섰다고 느꼈고, 더 나아가지 못한 채 멈춰 있었습니다.
현재의 Nuri는 Delta를 그대로 이어서 확장한 프로젝트는 아닙니다.
Delta를 개발하며 얻은 경험과 당시 해결하지 못했던 문제들을 바탕으로 구조를 다시 설계하고, 상태 관리와 렌더링, 개발 도구까지 새롭게 구현하고 있습니다.
그러다 최근 Codex를 본격적으로 도입하면서, 예전에 막혀 있던 아이디어를 다시 꺼내볼 수 있겠다는 생각이 들었습니다.
그동안 C#과 UI 개발을 하며 쌓아온 경험을 바탕으로 방향과 구조를 설계하고, Codex와 함께 구현과 검증을 반복하며 하나의 라이브러리로 구체화하고 있습니다.
아직 완성된 프로젝트는 아닙니다.
이 글에서는 완성된 결과물만 소개하기보다 Nuri를 만들면서 어떤 문제를 만났고, 어떤 판단을 했으며, 구조가 어떻게 변해가는지를 개발 로그 형식으로 남겨보려고 합니다.




