Herb v0.4.0의 출시는 Rails 뷰 레이어 개발에 중요한 진전을 의미합니다. Herb Linter는 Ruby 코드에 RuboCop과 같은 린터가 있듯이, HTML+ERB 파일에 대한 모범 사례를 안내하고 흔한 실수를 방지하는 데 도움을 줍니다. CLI를 통해 실행하거나 편집기에서 직접 오류를 포착하여 빠른 피드백을 제공하며, 각 린터 규칙에는 문서화된 예시가 포함되어 이해를 돕습니다. Herb Formatter(프리뷰)는 사용자들이 자신의 템플릿에 적용하여 버그와 엣지 케이스를 발견할 수 있도록 하며, VS Code에서 ‘저장 시 포맷’ 기능을 지원합니다. 이와 더불어, 지난 20년간 Rails의 Action View는 많은 개선과 최적화를 거쳤지만, 공용 API는 크게 변하지 않았습니다. Rails는 서버 측 렌더링 HTML을 중심으로 발전해왔으며, 이는 앞으로도 유지될 것입니다. 이에 따라 고급 HTML 도구의 중요성은 더욱 커지고 있습니다.
이러한 배경 속에서 저자는 ‘ReActionView’라는 새로운 ERB 렌더링 엔진의 비전을 제시합니다. ReActionView는 6가지 채택 수준으로 구성되어 있으며, 각 수준은 다음과 같습니다:
- 레벨 1: 더 나은 피드백 및 개발 경험:
*.html.erb
파일에서 문법 오류 발생 시 Vite처럼 즉각적인 오류 메시지를 화면에 표시하여 개발자가 문제를 신속하게 파악하고 해결할 수 있도록 돕습니다. - 레벨 2: HTML 인식 ERB 렌더링 엔진: ERB를 단순한 문자열 템플릿 엔진에서 실제 HTML 템플릿 엔진으로 전환하여, 템플릿 내의 HTML 구조를 인식함으로써 유효하지 않은 HTML을 생성하지 않도록 합니다. 이는 Elixir의 HEEx에서 영감을 받았습니다.
- 레벨 3: Action View 최적화: HTML+ERB 파일에 대한 더 깊은 통찰력과 구조적 인식을 바탕으로 Action View가 템플릿을 컴파일할 때 낮은 수준의 최적화를 수행할 기회를 탐색합니다. 예를 들어, 런타임 부분 룩업을 제거하기 위해
render partial
호출을 컴파일 시점에 인라인하는 것을 고려합니다. - 레벨 4: 반응형 ERB 템플릿: Herb가 템플릿을 차등화하고 변경된 부분만 다시 렌더링할 수 있도록 하여, Phoenix LiveView와 유사한 반응형 업데이트를 가능하게 합니다. 이는
*.html.herb
와 같은 새로운 파일 확장자를 통해 옵트인 방식으로 도입될 수 있으며, Turbo Frames나 Turbo Streams의 필요성을 줄일 수 있습니다. - 레벨 5: 범용 클라이언트 측 템플릿: React Server Components(RSC)처럼 특정 HTML+ERB 템플릿/부분을 서버와 클라이언트 모두에서 렌더링할 수 있도록 하여, 낙관적 UI 업데이트나 오프라인 지원과 같은 사용 사례를 가능하게 합니다.
- 레벨 6: 외부 컴포넌트: React, Vue, Svelte와 같은 외부 UI 컴포넌트를
*.html.herb
템플릿 내에 직접 마운트할 수 있는 기능을 탐색하여, Rails 뷰 레이어를 포기하지 않고도 JavaScript 생태계의 풍부한 컴포넌트를 활용할 수 있도록 합니다.
이러한 비전은 점진적이고 비파괴적인 채택을 목표로 하며, Rails의 본질을 유지하면서도 필요한 부분에 점진적인 개선을 더합니다. 현재의 Herb 도구(린터, 포매터)는 미래의 ReActionView를 위한 빌딩 블록 역할을 합니다. 저자는 사용자들에게 Herb를 자신의 프로젝트에서 실행하고 발견된 문제를 보고하여 파서 개선에 기여해 줄 것을 요청합니다.