Herb와 Reaction View: Ruby 뷰 레이어의 혁신과 개발자 경험 향상

Opening Keynote: Marco Roth, Herb to ReActionView. San Francisco Ruby Conference 2025.

작성자
jeff
발행일
2025년 12월 27일

핵심 요약

  • 1 Herb는 HTML 구조를 인식하는 ERB 파서 및 포괄적인 툴링 생태계로, Ruby 뷰 개발 시 즉각적인 피드백과 코드 품질 향상을 제공합니다.
  • 2 Herb 엔진은 개발 모드에서 템플릿 오류에 대한 상세한 브라우저 내 피드백과 시각적 디버깅 도구를 제공하여 뷰 레이어의 디버깅 효율성을 극대화합니다.
  • 3 Reaction View는 Herb 엔진을 Rails에 통합하여 Action View의 미래를 재구상하며, 반응형 템플릿 및 외부 컴포넌트 통합을 통해 Ruby 풀스택 개발의 새로운 가능성을 제시합니다.

도입

본 발표는 Ruby 개발자 Marco가 Hotwire 생태계에서 겪었던 개발자 툴링 부족 문제에 대한 깊은 좌절감에서 시작된 여정을 공유합니다. 그는 JavaScript 생태계의 발전된 툴링(TypeScript, React)에서 영감을 받아, Ruby의 뷰 레이어에서도 유사한 수준의 개발자 경험을 제공하고자 했습니다. Rails의 '오마카세' 철학은 훌륭하지만, 현대 웹 애플리케이션의 기대치와 웹 플랫폼의 진화에 발맞춰 Ruby 뷰 레이어의 한계를 극복하고 개발 생산성을 높이는 새로운 기반을 구축하는 것이 목표입니다.

Herb: HTML-aware ERB 파서 및 툴링 생태계

발표자는 기존 Stimulus 개발 시 컨트롤러 이름 오타와 같은 사소한 실수에도 아무런 피드백이 없어 디버깅에 어려움을 겪었던 경험을 공유하며, 이를 해결하기 위해 새로운 접근 방식이 필요하다고 강조했습니다. 기존 Stimulus LSP는 HTML만 지원하고 ERB나 태그 헬퍼에는 적용되지 않는 한계가 있었으며, Ruby LSP의 ERB 지원 프로토타입 또한 강력한 기능을 제공하기에는 부족했습니다. 이에 대한 해결책으로 HTML 구조를 인식하는 새로운 ERB 파서인 Herb가 개발되었습니다.

Herb의 핵심 기능

Herb는 단순히 파서를 넘어 광범위한 툴링 생태계를 제공합니다. C 언어로 개발되어 높은 이식성을 가지며(Node, Ruby, 브라우저에서 WebAssembly를 통해 실행 가능), 다음과 같은 기능을 포함합니다:

  • 언어 서버 (Language Server)
    • 별도의 설정 없이 즉시 사용 가능합니다.
    • VS Code, Cursor, Zed, Neovim 등 주요 에디터를 지원합니다.
    • 닫는 태그 누락, 구문 오류, ERB 태그 내 Ruby 코드 오류 등 즉각적인 피드백을 제공하여 개발 중 실시간으로 문제를 인지하고 수정할 수 있도록 돕습니다.
  • 린터 (Linter)
    • 뷰 코드 작성에 대한 모범 사례를 안내하고 일반적인 실수를 방지합니다.
    • 스타일 일관성을 강제하고 접근성 규칙 준수를 유도합니다.
    • 현재 50개 이상의 린트 규칙을 제공하며, 잠재적인 중복 ID 감지 등 파일 전체의 제어 흐름을 이해합니다.
    • 진단 메시지에서 문서 링크를 제공하여 오류의 원인과 해결 방법을 쉽게 이해할 수 있도록 돕습니다.
  • 포맷터 (Formatter)
    • 어떤 형태의 HTML ERB 코드라도 일관되고 아름답게 자동 포맷팅합니다.
    • 들여쓰기 및 구조적 문제를 자동으로 해결하며, Tailwind CSS 클래스 정렬 기능도 내장되어 있습니다.
    • CLI 및 에디터 저장 시 자동 포맷팅을 지원합니다.
    • 린트 위반 사항을 자동으로 수정하는 dash-test-fix 명령어를 제공합니다.

Herb 엔진: HTML-aware 렌더링

Herb는 템플릿의 내부 구조를 파악하는 능력을 바탕으로 렌더링 엔진을 혁신했습니다. 이는 ERB 엔진 API와 호환되며, 다음과 같은 향상된 기능을 제공합니다.

  • 향상된 오류 메시지: 브라우저에서 템플릿 오류 발생 시, 에디터에서와 동일하게 정확한 라인과 컬럼 정보를 포함한 상세한 오류 페이지를 제공합니다.

  • 개발 디버그 속성: 개발 환경에서 렌더링된 HTML에 파일명, 타입(컴포넌트, 부분 템플릿, 뷰), 상대 경로, 전체 경로 등 디버그 속성을 자동으로 주입합니다. 이를 통해 브라우저에서 뷰 파일의 시각적 윤곽선을 확인하고, 클릭 시 해당 파일의 에디터 특정 라인으로 바로 이동할 수 있습니다.

  • 디버그 메뉴: ERB 윤곽선 토글, 태그 호버 시 렌더링에 사용된 ERB 부분 표시 등 편리한 디버깅 기능을 제공합니다.

Reaction View: Action View의 미래 재구상

Reaction View는 Herb 엔진을 Rails 애플리케이션에 통합하여 Action View의 기능을 확장하고 재구상하려는 이니셔티브입니다. 현재 Herb 엔진의 모든 디버깅 및 향상된 오류 메시지 기능을 Rails에서 바로 사용할 수 있도록 지원합니다.

Reaction View의 미래 비전

  • Action View 최적화: 렌더링 성능 향상, 부분 템플릿 인라인화, 불필요한 공백 최소화 등을 통해 뷰 레이어의 효율성을 높입니다.

  • 반응형 템플릿: Phoenix LiveView나 Stimulus Reflex와 같은 라이브러리의 아이디어를 차용하여 Rails에 반응형 기능을 도입합니다.

  • 클라이언트 측 렌더링: 제한된 ERB를 웹 컴포넌트나 React 컴포넌트로 트랜스파일하여 클라이언트 측 렌더링을 가능하게 합니다.

  • 외부 컴포넌트 통합: React나 Vue와 같은 외부 컴포넌트를 ERB 뷰에서 직접 사용할 수 있도록 지원하며, 엔진이 컴포넌트의 하이드레이션 및 마운팅을 처리합니다. Import maps를 사용하여 컴포넌트 종속성을 관리합니다.

결론

Marco는 Herb와 Reaction View가 Ruby 뷰 레이어에 대한 오랜 기간의 개발자 경험 문제를 해결하고, Ruby 프론트엔드 개발의 밝은 미래를 열 것이라고 강조합니다. Prism Ruby 파서가 Ruby 생태계에 큰 영향을 미쳤듯이, Herb는 템플릿 렌더링 및 컴파일 방식에 혁신을 가져올 잠재력을 가지고 있습니다. 이 프로젝트는 단순한 파서에서 시작하여 언어 서버, 린터, 포맷터, 렌더링 엔진을 아우르는 포괄적인 툴링 생태계로 발전했으며, C 언어와 WebAssembly 학습을 통해 개발자의 역량을 확장하는 계기가 되었습니다. 개발자들은 이제 Herb와 Reaction View를 통해 Ruby를 포기하지 않고도 현대적이고 야심찬 풀스택 애플리케이션을 구축할 수 있으며, 이는 Ruby 커뮤니티 전체의 성장과 혁신에 기여할 것입니다.

댓글 0

로그인이 필요합니다

댓글을 작성하거나 대화에 참여하려면 로그인이 필요합니다.

로그인 하러 가기

아직 댓글이 없습니다

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