Rails 뷰 레이어의 혁신: Herb와 Reaction View를 통한 HTML-Aware ERB 엔진

Marco Roth - Introducing ReActionView: An ActionView-Compatible ERB Engine

작성자
Ruby on Rails Youtube
발행일
2025년 09월 16일

핵심 요약

  • 1 Herb는 HTML을 인식하는 ERB 파서 및 렌더링 엔진으로, Rails 뷰 레이어의 개발자 경험을 혁신하고 유효하지 않은 HTML 생성을 방지합니다.
  • 2 Reaction View 이니셔티브는 Herb 엔진을 활용하여 향상된 디버깅 도구, 시각적 피드백, 그리고 모던 프런트엔드 아이디어를 Rails에 통합합니다.
  • 3 이 프로젝트는 Rails 뷰 레이어의 한계를 극복하고, 서버 측 렌더링과 클라이언트 측 렌더링 간의 격차를 해소하여 Rails의 매력을 유지하는 것을 목표로 합니다.

도입

발표자는 Rails 뷰 레이어의 오랜 문제점, 특히 ERB 템플릿에 대한 도구 및 피드백 부족 문제를 지적합니다. 과거 Stimulus LSP 개발 경험을 통해 더욱 발전된 HTML-aware ERB 파서의 필요성을 인지하게 되었으며, 이는 Herb라는 새로운 생태계의 탄생으로 이어졌습니다. Herb는 Rails 개발자들이 뷰 레이어에서 겪는 어려움을 해결하고, 개발 경험을 획기적으로 개선하기 위해 고안되었습니다.

Herb 파서의 소개

Herb는 C로 작성된 HTML-aware ERB 파서로, Prism을 기반으로 Ruby 코드를 파싱합니다. 이 파서는 HTML과 임베디드 Ruby의 인터리브 구문 트리를 제공하여 파일의 구조적 인식을 가능하게 합니다. 기존 ERB 파서가 단순히 텍스트와 ERB 태그를 구분하는 것과 달리, Herb는 if...end와 같은 복합적인 Ruby 제어 흐름이 HTML 요소와 어떻게 결합되는지 정확히 파악합니다.

Herb 기반 도구 생태계

Herb의 파싱 능력은 다양한 강력한 도구로 확장됩니다. * 포매터: HTML ERB 코드를 일관된 스타일로 자동으로 포매팅하여 코드의 가독성을 높입니다. * 린터: 일반적인 코딩 실수를 감지하고 모범 사례를 강제합니다. 최근에는 접근성(Accessibility) 관련 규칙 9개와 Stimulus 전용 린트 규칙이 추가되어 총 32개의 규칙을 지원합니다. 이는 페이지 내 ID 중복과 같은 유효하지 않은 HTML 구조도 감지합니다. * Tailwind 플러그인: 향후 Tailwind CSS 클래스를 자동으로 정렬하는 기능을 통합하여 개발 편의성을 더욱 높일 예정입니다.

Reaction View 및 Herb ERB 엔진

Herb 0.7 버전에서 새롭게 선보인 Herb ERB 엔진은 Action View의 기본 엔진인 ERUBY를 대체할 수 있는 HTML-aware 렌더링 엔진입니다. * HTML 유효성 보장: 기존 ERUBY는 유효하지 않은 HTML(예: 닫는 태그 누락)도 렌더링하지만, Herb 엔진은 유효하지 않은 HTML을 컴파일하지 않도록 강제하여 템플릿의 견고성을 높입니다. * 향상된 개발자 경험: Herb 파서의 정확한 구문 분석 정보를 활용하여 개발자에게 훨씬 유용한 피드백을 제공합니다. * 정확한 오류 메시지: 구문 오류 발생 시 브라우저에서 문제의 정확한 위치를 시각적으로 표시하여 디버깅 시간을 단축합니다. * 시각적 디버깅: 개발 모드에서 뷰 파일(views, partials, components)의 경계를 시각적으로 구분하여 표시하며, 동적 ERB 출력 태그의 내용을 호버 시 보여주고, 클릭 시 해당 코드 위치로 에디터를 열어주는 기능을 제공합니다. 이는 복잡한 뷰 구조를 이해하고 디버깅하는 데 큰 도움이 됩니다.

미래 비전

Reaction View 이니셔티브는 Rails 뷰 레이어를 모던 웹 표준 및 프런트엔드 트렌드와 통합하는 장기적인 비전을 제시합니다. * Action View 최적화: 부분 렌더링 호출 및 Action View 헬퍼 인라인화와 같은 최적화 방안을 모색합니다. * 반응형 렌더링: Phoenix LiveView의 영감을 받아 템플릿의 상태 변화를 추적하고 필요한 부분만 렌더링하여 성능을 향상시킬 수 있습니다. * ERB 컴포넌트의 클라이언트 측 활용: ERB 컴포넌트를 웹 컴포넌트나 React 컴포넌트로 트랜스파일하여 클라이언트 측에서 활용하는 방안을 고려합니다. * 외부 컴포넌트 통합: React, Svelte, Vue와 같은 외부 프레임워크의 컴포넌트를 Rails 뷰에 원활하게 통합할 수 있는 방법을 모색합니다. * 개발 편의성 개선: 인라인 Stimulus, 뷰 파일별 스코프 CSS, 선택적 렌더링과 같은 기능으로 개발자 경험을 더욱 향상시킵니다.

결론

Herb는 단순한 파서를 넘어 Rails 뷰 레이어의 강력한 도구 생태계로 발전하고 있으며, Reaction View는 이 Herb 엔진을 활용하여 Rails의 개발자 경험을 크게 향상시키고 유효한 HTML을 강제하며 디버깅을 용이하게 합니다. 이 프로젝트는 Rails가 풀스택 프레임워크로서의 고유한 강점을 유지하면서도, 모던 웹 표준과 프런트엔드 기술의 발전을 수용하여 JavaScript 스택에 뒤처지지 않고 개발자들이 Rails를 통해 매력적인 애플리케이션을 지속적으로 구축할 수 있도록 하는 중요한 진전입니다. 궁극적으로 Herb 엔진은 Rails 핵심에 통합되어 뷰 레이어를 한 단계 더 발전시키는 데 기여할 것으로 기대됩니다. 발표자는 개발자들이 Herb와 Reaction View를 사용해보고 피드백을 제공하여 이 비전을 함께 실현해 나갈 것을 독려합니다.

댓글 0

댓글 작성

0/1000
정중하고 건설적인 댓글을 작성해 주세요.

아직 댓글이 없습니다

첫 번째 댓글을 작성해보세요!