UI 개발 복잡성 끝! 선언형 런타임 LuciaCore 등장
수백 개의 파일과 일관성 없는 코드로 인한 프론트엔드 개발 및 유지보수 복잡성에 지쳐 새로운 접근 방식 모색
HTML, CSS, JS 구현 대신 UI 의도를 데이터(JSON)로 선언하는 방식 채택하여 수작업 조립 단계 제거 시도
LuciaCore는 선언형 UI 런타임(Declarative UI Runtime)으로, JSON 데이터를 해석해 DOM, 스타일, 이벤트 리스너를 일관되게 생성함
컴포넌트(Component)와 콘텐츠(Content) 분리로 재사용성 및 비개발자 협업 용이성 증대
초기 렌더링 성능 개선을 위해 UI 즉시 렌더링 후 백그라운드 작업 및 페이지 캐싱(Page Caching) 기법 도입
프론트엔드 코드 복잡성의 근본 원인 분석
기존 프론트엔드 개발 방식은 수작업으로 HTML, CSS, JS를 조립하는 과정에서 필연적으로 일관성 부족(Inconsistency)과 파일 스플롤(File Sprawl) 문제를 야기함.
CSS의 수동적 스타일링: 각 요소의 스타일을 개별적으로 관리하며 명명 규칙(Naming Convention) 부재 시 중복 및 충돌 발생 가능성 증대
파일 수 증가와 로딩 문제: 모듈화로 파일 수는 늘어나지만, 번들링(Bundling) 시 과도한 요청(Excessive Requests) 문제가 발생하며 근본적인 코드 관리 어려움은 지속됨
유지보수의 어려움: UI 변경이나 버그 수정 시 관련 파일을 일일이 찾아야 하며, 누적된 비일관성(Accumulated Inconsistency)을 머릿속으로 관리하는 것이 큰 부담으로 작용함
결론적으로, 프레임워크는 코드 구성 방식을 개선할 뿐 수작업 조립 자체의 비효율성을 제거하지 못함.
LuciaCore의 선언형 UI 런타임 아키텍처
LuciaCore는 UI 의도를 데이터(JSON)로 선언하고, 런타임 엔진이 이를 해석하여 실제 DOM, 스타일, 이벤트 리스너를 생성하는 선언형 UI 런타임(Declarative UI Runtime) 모델을 채택함.
HTML, CSS, JS의 역할 분리: LuciaCore는 이 세 가지 기술을 대체하는 것이 아니라, 그 위에 위치하여 개발자의 의도(Intent)를 표현하는 데 집중함
JSON 기반 데이터: 실행 모델이 없는 JSON은 구현 세부사항(Implementation Detail)이 침투할 여지를 차단하고, 엔진이 일관된 방식으로 DOM을 생성하도록 함
엔진의 책임: JSON에 명시된 의도를 바탕으로 DOM 노드 생성, 이벤트 리스너 부착, 스타일 스코핑 등 실제 구현은 엔진이 전담하여 반복적인 수작업을 제거함
이는 구현(Implementation)이 아닌 의도(Intent)를 선언하는 방식으로, 기존 프레임워크와 차별화되는 핵심적인 접근 방식임.
데이터 중심 설계: 레이아웃, 원시 타입, 액션 DSL
LuciaCore는 인터페이스를 레이아웃(Layout)과 원시 타입(Primitive)으로 구분하고, 액션(Action) DSL을 통해 동작을 선언적으로 정의함.
레이아웃과 원시 타입: 레이아웃(행, 열, 그리드 등)은 자식 요소의 배치를, 원시 타입(버튼, 텍스트, 입력 등)은 실제 사용자 인터페이스 요소를 나타내며, 이 둘은 중첩 가능한(Composable) 구조를 이룸
액션 DSL (Domain-Specific Language): `navigate::to::signup`과 같은 문자열 형태로 동작을 정의하여, 클릭 핸들러(Click Handler)의 구현 세부사항을 엔진에 위임함. 예를 들어, `api::call |> alert::Saved!`는 API 호출 후 성공 메시지 표시를 순차적으로 선언함
컴포넌트와 Props: 재사용 가능한 UI 정의를 위해 컴포넌트를 도입하고, Props를 통한 데이터 흐름을 지원함. 호출하는 측은 기본값만 제공하고, 호출되는 컴포넌트가 자체 값을 최종 결정하는 방식으로 예측 가능한(Predictable) 컴포지션을 보장함
이러한 구조는 UI를 데이터로 다루는 것을 가능하게 하여, 코드의 일관성과 재사용성을 높임.
성능 최적화: 즉시 페인트와 페이지 캐싱
초기 렌더링 시 발생하는 성능 병목 현상을 해결하기 위해 UI 즉시 페인트(Immediate UI Paint)와 페이지 캐싱(Page Caching) 기법을 도입함.
메인 스레드 양보(Main Thread Yielding): JSON 트리 순회, 데이터 로딩, 액션 실행 등 모든 작업을 단일 스레드에서 순차적으로 처리하는 대신, UI가 먼저 스켈레톤을 렌더링하고 브라우저의 페인트 사이클에 양보함. 이를 통해 사용자는 즉각적인 시각적 피드백을 받을 수 있으며, 백그라운드에서 나머지 작업이 진행됨
콘텐츠 기반 페이지 캐싱: `content.json` 파일의 해시(Hash)를 기반으로 페이지를 컴파일하고 캐싱함. 내용 변경이 없을 경우 재컴파일 작업을 생략하여 반복 방문 시 로딩 속도를 크게 단축시킴
이러한 최적화는 알고리즘 자체의 속도 향상보다는 불필요한 재작업을 줄이는 데 초점을 맞추어, 데스크톱 및 모바일 환경에서 체감 성능을 개선함.
AI 도구와의 시너지 및 협업 모델
LuciaCore의 구조화된 데이터 형식(Structured Data Format)은 AI 도구와의 상호작용에 긍정적인 영향을 미침.
AI의 이해도 향상: 수백 개의 분산된 HTML, CSS, JS 파일과 달리, LuciaCore의 JSON 스키마는 명확하고 일관된 구조를 제공함. 이는 AI 모델이 UI의 관계를 재구성하는 단계를 건너뛰고 의도(Intent) 자체에 집중할 수 있도록 함
작업 범위의 축소: AI는 복잡한 파일 간의 의존성을 파악할 필요 없이, 정의된 스키마 내에서 작업할 수 있어 처리해야 할 컨텍스트(Context)가 줄어듦
컴포넌트와 콘텐츠 분리: 비기술적 협업자가 UI의 텍스트나 데이터를 수정할 때, 구조적 이해 없이 'contents' 섹션만 편집할 수 있도록 하여 협업 효율성을 높임. 이는 AI가 UI의 시각적 요소와 데이터 부분을 분리하여 이해하고 생성하는 데 도움을 줄 수 있음
결론적으로, LuciaCore는 AI가 더 적은 모호성으로 더 빠르고 정확하게 의도를 파악하도록 지원하는 환경을 제공함.