Juris.JS: 모든 규칙(그리고 모든 성능 기록)을 깨는 문서 사이트 | Resti Guay


Juris.JS: 혁신적인 웹 개발 프레임워크의 새로운 패러다임

개요

Juris.JS는 복잡한 빌드 파이프라인과 다중 파일 구조를 필요로 하는 기존 문서 사이트들과는 완전히 다른 접근방식을 제시하는 혁명적인 웹 개발 프레임워크입니다. 단일 HTML 파일로 17,545줄의 코드를 처리하면서도 5ms 이하의 렌더링 시간을 달성하는 것은 기존 웹 개발 상식을 뒤엎는 성과입니다.

주요 성능 지표

놀라운 수치들

  • 16,345줄의 코드: 단일 HTML 파일

  • 5ms 이하 렌더링 시간: 실시간 성능

  • 100% Lighthouse 점수: 모든 메트릭에서 만점

  • 제로 빌드 도구: 컴파일 단계 없음

  • 번들 최적화 불필요: 자동 최적화

  • 완전한 인터랙티브 문서: 라이브 예제 포함

혁신적인 아키텍처

Object DOM: HTML 없는 HTML

기존의 JSX나 템플릿 구문 없이, 순수 JavaScript 객체를 통해 UI 구조를 명확하게 정의하며 네이티브 브라우저 성능을 발휘합니다.

직관적인 반응성 시스템

핵심 원칙: 함수는 반응적, 값은 정적

  • 수동 구독 불필요

  • 이펙트 종속성 관리 불필요

  • 오래된 클로저 문제 해결

  • 컴포넌트가 접근하는 상태만 자동 추적

도메인 기반 전역 상태 관리

  • Prop drilling 제거

  • Context provider 불필요

  • Redux 보일러플레이트 제거

  • 도메인별 상태 구성으로 직접 접근 가능

성능 혁신의 비밀

16,345줄이 5ms에 렌더링되는 이유

1. 직접 DOM 업데이트

  • Virtual DOM 오버헤드 제거

  • 상태 변경 시 해당 DOM 속성만 정확히 업데이트

  • 컴포넌트 트리 재렌더링 불필요

2. 브랜치 인식 반응성

컴포넌트는 실제로 실행되는 상태 경로만 추적합니다.

3. 세밀한 업데이트

  • 카운터 하나 변경 시: 해당 텍스트 노드만 업데이트

  • 테마 변경 시: 테마 사용 요소만 업데이트

  • 전체 컴포넌트 트리 재렌더링 없음

4. 시간적 독립성

컴포넌트는 합리적인 기본값으로 즉시 작동하며, 데이터 도착 시 업데이트됩니다.

문서화 경험의 혁신

살아있는 예제

문서의 모든 코드 예제가 실제로 실행됩니다:

  • 카운터 예제가 실제로 증가

  • 테마 토글이 실제로 작동

  • 상태 관리 예제가 실제 반응성 표시

점진적 향상 실천

사이트는 컴포넌트 기반 개발과 점진적 향상을 모두 보여줍니다. 기존 코드를 다시 작성하지 않고도 반응형으로 변환 가능합니다.

실제 세계 패턴

문서는 개념만 설명하는 것이 아니라 실제로 구현합니다:

  • 라우팅

  • 상태 지속성

  • 모바일 내비게이션

  • 장치 감지

  • 성능 추적

철학적 선언

이 문서 사이트는 복잡성이 선택이지 필수가 아니라는 것을 증명합니다. 현대 웹 개발의 모든 "모범 사례"는 애초에 존재하지 말았어야 할 문제들을 해결하기 위해 존재합니다.

이 사이트가 증명하는 것들

  • 단일 파일 애플리케이션도 엔터프라이즈 복잡성까지 확장 가능

  • 강력한 개발을 위해 빌드 도구가 필수가 아님

  • 성능은 최적화 기법이 아닌 아키텍처에서 나옴

  • 단순함이 복잡성보다 더 확장성이 좋음

  • JavaScript 객체가 JSX 템플릿보다 강력함

기술적 혁신

헤드리스 컴포넌트

비즈니스 로직을 프레젠테이션에서 분리합니다.

컴포넌트 이동성

컴포넌트는 조정 없이 트리의 어디서든 작동합니다.

Props로서의 DOM 객체

혁신적인 컴포지션 패턴으로, 전체 UI 구조를 props로 전달하여 궁극적인 컴포지션 유연성을 제공합니다.

개발자를 위한 이점

  • useEffect 지옥과 수동 구독 제거

  • 작성한 정확한 코드 디버깅 가능 (숨겨진 추상화 없음)

  • 제로 툴링 오버헤드로 더 빠른 빌드

  • 아키텍처 복잡성 없이 애플리케이션 확장

애플리케이션을 위한 이점

  • 모든 규모에서 5ms 이하 렌더링

  • 기본적으로 완벽한 Lighthouse 점수

  • 번들 크기 최적화 불필요

  • 프레임워크 종속 없는 점진적 향상

템플릿 기반 프레임워크의 성능 문제

학습 곡선의 악몽

Vue.js 학습 요구사항

  • 템플릿 구문: HTML과 유사하지만 완전히 다름

  • 지시문 구문: v-if, v-for, v-show, v-model, v-bind, v-on

  • Mustache 보간: {{ expression }}

  • 계산된 속성: 특별한 반응형 함수

  • 슬롯 구문: 과 v-slot

  • 범위 슬롯: 더욱 복잡한 슬롯 패턴

Angular의 더 복잡한 구문

  • 템플릿 구문: 다시, HTML과 유사하지만 다름

  • 구조적 지시문: *ngIf, *ngFor, *ngSwitch

  • 속성 지시문: [class], [style], (click)

  • 양방향 바인딩: [(ngModel)]

  • 파이프: {{ value | pipeName }}

  • 템플릿 참조 변수: #templateVar

데이터 표시만을 위해 6가지 다른 구문이 필요합니다!

Object VDOM의 단순함

하나의 구문만 필요합니다. 순수 JavaScript. JavaScript를 안다면 Object VDOM을 아는 것입니다.

파싱 성능 재앙

템플릿 처리 과정

<div v-if="showElement">{{ message }}</div> 작성 시:

  1. 템플릿 파싱: 템플릿 문자열을 AST로 파싱

  2. 지시문 컴파일: v-if를 조건부 렌더링 로직으로 컴파일

  3. Mustache 컴파일: {{ message }}를 반응형 바인딩으로 컴파일

  4. 코드 생성: AST를 렌더 함수로 컴파일

  5. 함수 생성: 런타임에 새 함수 생성

  6. 실행: 마침내 로직 실행

6단계의 추상화 오버헤드 후에야 단순한 조건문이 실행됩니다!

Object VDOM의 직접성

제로 파싱. 제로 컴파일. 직접 실행. 객체 구조는 렌더러에 의해 즉시 사용 가능합니다.

실제 파싱 오버헤드 측정

복잡한 템플릿에 대한 시작 비용:

  • Vue 3 템플릿 컴파일: 15-25ms

  • Angular 템플릿 컴파일: 30-50ms

  • Svelte 컴파일: 10-15ms (빌드 타임이지만 여전히 오버헤드)

  • Object VDOM: 0ms - 컴파일 불필요

메모리 오버헤드: 숨겨진 킬러

Vue.js 메모리 오버헤드

Vue가 메모리에 생성하는 것들:

  • 원본 템플릿 문자열 (개발 도구용 저장)

  • 파싱된 AST 표현

  • 컴파일된 렌더 함수

  • 데이터용 반응형 프록시 객체

  • 각 반응형 속성용 감시자 객체

  • 가상 노드 트리

  • 컴포넌트 인스턴스 메타데이터

메모리 배수: 실제 데이터 크기의 4-6배

Object VDOM 메모리 사용

Object VDOM이 메모리에 생성하는 것들:

  • 객체 구조 (렌더 후 가비지 컬렉션)

  • 최소한의 상태 추적

  • 직접 DOM 참조

메모리 배수: 실제 데이터 크기의 1.2배

CPU 오버헤드: 천 번의 작은 죽음

반응형 시스템 세금

Angular과 Vue의 반응형 시스템은 모든 데이터 조각에 대해 프록시 객체와 감시자를 생성합니다.

모든 속성 접근이 프록시 트랩을 통과하고, 모든 상태 변경이 종속성 추적을 트리거합니다. 고빈도 애플리케이션에서 이 프록시 오버헤드가 누적됩니다.

Object VDOM의 명시적 상태 관리

프록시 오버헤드 없음. 숨겨진 추적 없음. 예상치 못한 CPU 비용 없음.

자연스러운 지연 계산의 장점

Object VDOM은 자연스럽게 지연 계산을 구현하는 JavaScript 로직을 사용합니다. 비싼 계산은 조건이 참이고 컴포넌트가 실제로 렌더링될 때만 실행됩니다. 특별한 프레임워크 마법 없이 기본적으로 지연됩니다.

Object VDOM 모범 사례

1. 2-스페이스 들여쓰기로 최적 스캔

2. 탐색을 위한 끝 주석 항상 사용

3. 프레젠테이션과 로직 함께 배치

최대 유지보수성을 위해 모든 관련 로직을 렌더 함수에 유지합니다.

4. 조건부 콘텐츠를 위한 스프레드 연산자 사용

5. 지연 평가를 위한 함수 래핑

성능을 위해 전략적으로 함수 래퍼를 사용합니다.

6. 함수와 속성 함수: 마법이 일어나는 곳

Object VDOM의 진정한 힘은 함수 컴포넌트와 속성 함수를 모두 지원하는 것에서 나옵니다. 모든 반응형 마법이 특별한 구문 없이 내부적으로 일어납니다.

주의사항 및 실용적 팁

성능 최적화 팁

  • 조건부 렌더링 시 함수 래핑 활용

  • 스프레드 연산자로 선택적 요소 처리

  • 2-스페이스 들여쓰기로 가독성 향상

  • 끝 주석으로 중첩 구조 탐색 용이성 확보

메모리 관리 주의사항

  • 메모리 제약 환경(임베디드 시스템, 모바일 장치, 고부하 서버)에서 특히 유리

  • 전통적인 프레임워크 대비 4-5배 메모리 효율성

개발 환경 고려사항

  • 빌드 도구 없이 개발 가능

  • DevTools에서 직접 검사 가능

  • 숨겨진 추상화 없이 작성한 정확한 코드 디버깅

학습 리소스 및 참고 자료

공식 자료

추가 읽을거리

  1. “Juris: Returning to the Source of Universal Development” - 범용 개발의 근원으로 돌아가기

  2. “Juris: Object-First Web Development: A New Paradigm for Reactive User Interfaces” - 반응형 사용자 인터페이스의 새로운 패러다임

  3. “The Great eCommerce Migration: Why Non-Blocking Architecture is No Longer Optional” - 비차단 아키텍처가 더 이상 선택사항이 아닌 이유

  4. “The Hidden Million-Dollar Cost: Why Modern JavaScript Frameworks Are Bankrupting Enterprise Development” - 현대 JavaScript 프레임워크가 기업 개발을 파산시키는 이유

  5. “The JSX Trap: Why JurisJS’s Object-First Development is the Future” - JSX의 함정과 Object-First 개발의 미래

  6. “Vue Composition API vs Juris enhance(): The Ultimate Computational Layout Challenge” - 궁극적인 계산 레이아웃 도전

코드 예제

기본 Object VDOM 구조


const component = {

tag: 'div',

class: () => `container ${theme} ${isLoading ? 'loading' : ''}`,

style: () => ({

backgroundColor: theme === 'dark' ? '#333' : '#fff'

}),

children: [

{

tag: 'h1',

text: () => `Welcome, ${user.name}`

},

() => isLoading ? {

tag: 'div',

text: 'Loading...'

} : {

tag: 'div',

text: () => `Status: ${user.isOnline ? 'Online' : 'Offline'}`

}

]

}

조건부 속성 처리


{

tag: 'button',

...(isLoading && { disabled: true }),

onclick: () => handleClick(),

text: () => isLoading ? 'Please wait...' : 'Click me'

}

상태 관리


// 직접 상태 접근 - 프록시 없음, 숨겨진 오버헤드 없음

const value = context.getState('path.to.value');

context.setState('path.to.value', newValue);

미래 전망

Juris 문서 사이트는 단순히 프레임워크를 보여주는 것이 아니라 다음과 같은 미래를 보여줍니다:

  • 개발자들이 도구와 싸우는 대신 비즈니스 문제를 해결

  • 영웅적인 최적화가 아닌 좋은 아키텍처에서 나오는 성능

  • 복잡성이 아닌 단순함을 통한 애플리케이션 확장

  • 웹 개발이 다시 즐거워짐

모든 규칙을 깨뜨리는 문서 사이트는 그 규칙들이 틀렸음을 증명합니다. 웹 애플리케이션 구축에 대한 모든 가정을 의문시하고, 복잡성보다 단순함을 선택하며, 문제를 관리하는 대신 문제 자체를 없애는 것이 가능함을 보여줍니다.

1개의 좋아요