P2 - Ruby를 위한 함수형 HTML 템플릿 엔진

Noteflakes - P2 - a Functional HTML Templating Engine for Ruby

작성자
발행일
2025년 08월 07일

핵심 요약

  • 1 P2는 Ruby를 위한 새로운 고성능 함수형 HTML 템플릿 엔진으로, 기존 Papercraft의 개선된 버전입니다.
  • 2 일반 Ruby Proc으로 템플릿을 표현하며, 자동 컴파일을 통해 ERB보다 약 2배 빠른 렌더링 속도를 제공합니다.
  • 3 Ruby의 Prism 파서와 Sirop 젬을 활용하여 DSL 기반 템플릿을 AST로 변환하고 최적화된 HTML 코드로 컴파일합니다.

도입

P2는 최근에 출시된 Ruby용 함수형 HTML 템플릿 엔진으로, 기존 Papercraft 프로젝트를 기반으로 더욱 발전된 형태를 제시합니다. 이 엔진은 템플릿을 일반 Proc으로 표현하며 자동 컴파일을 통해 고성능을 목표로 합니다. 벤치마크 결과, P2는 ERB보다 약 2배 빠른 처리 속도를 달성하여 Ruby 기반 웹 애플리케이션의 렌더링 성능을 크게 향상시킬 잠재력을 입증했습니다.

P2는 Papercraft와 유사하게 HTML을 Ruby DSL 형태로 작성할 수 있게 하여, div { h1 title }과 같이 직관적인 HTML 구조 표현과 동적 값 삽입을 용이하게 합니다. 기존 DSL 방식은 Ruby 블록 호출의 성능 오버헤드를 가졌으나, P2는 이를 해결하기 위해 ERB와 유사한 문자열 기반의 효율적인 컴파일 방식을 도입했습니다.

P2의 핵심은 Ruby의 새로운 파서 젬인 Prism과, Proc의 소스 코드를 동적으로 얻어 AST(추상 구문 트리)로 변환하고 다시 소스 코드로 변환하는 기능을 제공하는 Sirop 젬을 활용하는 것입니다. P2는 이 기술들을 통해 DSL 호출을 최적화된 HTML 문자열로 변환합니다.

템플릿 컴파일 과정은 크게 세 단계로 이루어집니다. 먼저, Sirop을 이용해 템플릿 Proc을 AST로 변환합니다. 다음으로, AST를 변환하여 P2::TagNode를 포함하도록 합니다. 마지막으로, 변환된 AST를 소스 코드로 다시 변환하면서 TagNode를 적절한 HTML 코드로 최종 변환합니다. 이 과정에서는 버퍼링, HTML 이스케이프, 지연 렌더링 등 다양한 요소가 고려됩니다. 또한, 컴파일된 템플릿에서 예외 발생 시 정확한 디버깅을 위해 소스 맵을 생성하여 원본 템플릿 소스 코드의 해당 라인을 가리키도록 처리합니다.

결론

P2는 성능 향상을 넘어 Ruby DSL을 통한 HTML 표현을 더욱 유연하고 강력하게 만들 잠재력을 지니고 있습니다. 향후 HTML 태그 및 속성 구문 확장과 Proc 인라이닝을 통한 DSL 확장 등이 모색되고 있습니다. P2는 Ruby 개발자들에게 더 빠르고 효율적인 HTML 템플릿 작성 환경을 제공하며, Ruby 커뮤니티에 중요한 기여를 할 것으로 기대됩니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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