Rails World 2025 회고: ReActionView와 새로운 ActionView 호환 ERB 엔진 소개

ReActionView: ActionView-Compatible ERB Engine for Rails View Layer

작성자
HackerNews
발행일
2025년 09월 11일

핵심 요약

  • 1 Rails World 2025에서 ReActionView 이니셔티브와 ActionView 호환 HTML 인식 ERB 렌더링 엔진인 Herb::Engine을 공개하여 Rails 뷰 레이어의 미래 비전을 제시했습니다.
  • 2 Herb v0.7 업데이트를 통해 향상된 린터, 포매터, 언어 서버 및 VS Code 확장 기능과 함께 개발 생산성을 높이는 브라우저용 디버그 도구를 발표했습니다.
  • 3 ReActionView는 기존 .html.erb 템플릿의 하위 호환성을 유지하면서 개발자 경험을 개선하고, 최신 웹 표준을 수용하며, 궁극적으로 Rails 뷰 레이어에 반응형 기능을 도입하는 것을 목표로 합니다.

도입

지난주 암스테르담에서 개최된 Rails World 2025에서 'ReActionView: 새로운 ActionView 호환 ERB 엔진 소개'라는 주제로 발표한 내용을 요약합니다. 이 발표는 2025년 한 해 동안 공유해온 여정의 결론으로, RubyKaigi에서 HTML 인식 ERB 파서인 Herb를 소개하고, RailsConf에서는 Herb 기반의 개발 도구와 Rails 뷰 레이어 현대화 비전을 제시했습니다. Rails World에서는 이 비전을 실현하기 위한 ReActionView 이니셔티브와 Herb v0.7 및 Herb::Engine의 중요 업데이트를 공개했습니다.

ReActionView 이니셔티브는 Rails 뷰 레이어의 가능성을 탐색하며, ActionView와 호환되는 실용적인 발전 경로를 제시합니다. 핵심은 Herb::Engine으로, 이는 Herb 파서를 기반으로 구축된 새로운 ERB 엔진입니다. 기존 .html.erb 파일과 완벽하게 호환되면서도 HTML 유효성 검사, 개선된 오류 피드백, 반응형 업데이트(예정), 내장 도구 등의 기능을 제공합니다.

주요 발표 내용

  • ReActionView 이니셔티브: 뷰 레이어를 위한 실용적이고 ActionView 호환 가능한 발전 경로.
  • Herb v0.7: 린터, 포매터, 언어 서버, VS Code 확장 전반의 업데이트.
  • Herb::Engine: HTML 인식, 프레임워크 독립적인 ERB 렌더링 엔진.
  • 브라우저용 개발 도구: 개발 중 뷰/부분/컴포넌트 개요, 소스 점프, ERB 출력 호버, 해제 가능한 유효성 검사 오버레이.
  • 새로운 린터 규칙: 18개 규칙 추가(9개는 접근성 관련), 총 32개 규칙.
  • Stimulus Lint: Stimulus LSP에서 추출된 진단 도구 (Herb 기반).
  • Tailwind 클래스 재작성기: (예정)
  • Phoenix LiveView 스타일 반응성 초기 실험: ERB를 위한 반응형 기능 도입.

Herb 개발 도구 업데이트

  • Herb Linter: 18개의 새로운 규칙(총 32개), GitHub Pull Request 주석 기능을 위한 --github 플래그 지원, 고급 제어 흐름 분석.
  • Herb Formatter: 안정성과 예측 가능성 향상, Tailwind CSS 클래스 정렬 기능 추가 (새로운 @herb-tools/tailwind-class-sorter 패키지 활용).
  • Stimulus Lint: Stimulus LSP의 진단 기능을 독립적인 패키지로 추출, Herb Linter 인프라를 기반으로 HTML 및 HTML+ERB 문서 모두에서 작동, CI/pre-commit 훅에서 사용 가능.
  • Stimulus LSP 업데이트: Herb 및 Stimulus Lint 통합으로 구현 간소화, Action View Tag Helpers에 대한 진단 기능 제공.

Rails 뷰 레이어의 비전: ReActionView

ReActionView는 ActionView를 2025년 이후를 위해 재구상하는 이니셔티브입니다. Erubi와 같은 문자열 템플릿 엔진에서 벗어나, 유효하지 않은 HTML을 생성할 수 없고 구문 오류를 정확히 알려주는 HTML 템플릿 엔진으로의 전환을 목표로 합니다. 이를 통해 개발자 경험을 개선하고, 최신 웹 표준 및 브라우저 기능을 적극적으로 수용하며, 궁극적으로 ActionView를 반응형으로 만들어 JavaScript 사용을 최소화하면서도 풍부한 UI를 구축할 수 있도록 합니다.

Herb::Engine의 작동 방식

Herb::Engine은 Herb Parser를 사용하여 템플릿을 구문 분석하고 구문 트리를 생성합니다. 이 트리를 순회하며 add_text(), add_expression(), add_code() 등의 메서드를 호출하여 컴파일된 템플릿을 생성합니다. Erubi::Engine이 정규식을 사용하는 것과 달리, Herb::Engine은 구문 트리를 통해 정확한 오류 메시지와 위치를 제공하며, 토큰 압축을 통해 효율성을 유지합니다.

개발 환경 개선

Herb::Engine은 Rails에 쉽게 통합되어 향상된 오류 페이지와 해제 가능한 유효성 검사 오버레이를 제공합니다. 또한, 개발 모드에서 뷰 파일 이름 대신 HTML 요소에 디버그 데이터 속성을 주입하여 시각적인 뷰 개요(view outlines)를 제공하고, 클릭 시 소스 코드로 바로 이동하는 ‘점프 투 소스’ 기능을 구현합니다. ERB 출력 태그에 대해서도 동일한 기능을 제공하여 동적 콘텐츠의 출처를 쉽게 파악할 수 있도록 돕습니다.

ReActionView 로드맵 (채택 수준)

  • 레벨 1 & 2 (현재): reactionview Gem을 통해 로컬에서 기능 체험 가능. Herb Dev Tools 오버레이, 개선된 오류 페이지, 해제 가능한 유효성 검사, 디버그 뷰 주석 기능 포함.
  • 레벨 3 (Action View 최적화): 부분 렌더링 호출 인라인화, 태그 헬퍼 인라인화, 불필요한 공백 최소화 등 성능 최적화.
  • 레벨 4 (반응형 ERB 뷰): 템플릿 변경 사항을 감지하여 필요한 부분만 다시 렌더링하는 반응형 기능 (Phoenix LiveView와 유사).
  • 레벨 5 (클라이언트 측 템플릿): 서버와 클라이언트 모두에서 렌더링 가능한 ‘ERB 클라이언트 컴포넌트’ 도입 (React Server Components와 유사).
  • 레벨 6 (외부 컴포넌트): React, Vue, Svelte 등 외부 UI 컴포넌트를 *.html.herb 템플릿 내에 직접 마운트하여 사용 가능하게 함.

추가 아이디어

  • 일회성 Stimulus 컨트롤러: Alpine.js나 Svelte처럼 파일 내에 스크립트 태그를 사용하여 일회성 JavaScript를 작성하는 방식.
  • 뷰 파일 범위 지정 CSS: Vue.js의 <style scoped>와 같이 특정 파일에만 적용되는 CSS 스타일링.
  • 선택적 렌더링: Turbo Frames와 결합하여 템플릿의 특정 부분만 미리 컴파일하고 렌더링하여 성능 최적화.

결론

Prism이 Ruby 내부 및 도구 환경에 큰 영향을 미쳤듯이, Herb는 HTML 템플릿 및 도구 분야에서 유사한 효과를 가져왔다고 믿습니다. Herb는 단순한 파서에서 시작하여 현재 Rails 개발자들이 일상적으로 사용하는 귀중한 도구 생태계로 발전했습니다. ReActionView는 Rails 뷰 레이어의 단점을 해결하기 위한 비전으로 시작했지만, 현재는 대안적인 ERB 렌더링 엔진을 넘어선 가능성을 보여주고 있습니다. 이 이니셔티브를 통해 Rails 프레임워크 전체를 발전시키고, 최신 JavaScript 스택과 경쟁하며, 팀들이 Action View의 장점을 포기하지 않고도 풍부한 프론트엔드 경험을 구축할 수 있도록 지원하고자 합니다. Rails가 풀스택 프레임워크로서의 독점적인 위치를 유지하고, 신규 및 기존 사용자 모두에게 매력적이고 경쟁력 있는 프레임워크로 남을 수 있도록 뷰 레이어의 수준을 높이는 것이 목표입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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