Ruby에서 아름다운 뷰 구축하기 (Building Beautiful Views in Ruby)

Joel Drapper, "Building Beautiful Views in Ruby with Phlex"

작성자
EuRuKo
발행일
2025년 01월 13일

핵심 요약

  • 1 본 강연은 Ruby의 유연성과 추상화 기능을 활용하여 아름답고 유지보수하기 쉬운 뷰를 구축하는 방법에 대해 다룹니다.
  • 2 특히, HTML 의미론을 Ruby 구문에 직접 매핑하는 객체 지향 컴포넌트 라이브러리인 'Flex'를 소개하며 그 장점을 설명합니다.
  • 3 Flex는 코드 중복을 줄이고 일관성을 높이며, XSS 방지 및 고성능 렌더링을 제공하여 효율적인 웹 개발을 지원합니다.

도입

본 강연은 Joel이 그의 첫 Yuku 컨퍼런스에서 'Ruby에서 아름다운 뷰 구축하기'라는 주제로 진행되었습니다. Joel은 강연 서두에 ADHD를 가진 개발자로서 '너드 스나이핑(nerd snipe)' 기법을 통해 어려운 일에 몰입하여 높은 품질의 결과물을 만들어내는 자신의 작업 방식을 공유합니다. 그는 '완벽함은 선의 적'이라는 통념에 반대하며, 타협보다는 동기 부여를 통한 높은 목표 설정의 중요성을 강조합니다. 이는 '10x 엔지니어'가 특별한 사람이 아니라, 문제 해결 방식에 있어 높은 목표를 설정하고 몰입하는 일반 엔지니어임을 역설하며, 이러한 철학이 본 강연의 핵심인 'Flex' 라이브러리 개발에도 반영되었음을 시사합니다.

Joel은 Ruby 프로그래밍 언어에 대한 깊은 애정을 표현하며, Ruby가 아이디어를 표현하고 추상화를 생성하는 데 있어 매우 유연하고 독보적인 언어라고 설명합니다. 그는 추상화가 개념을 찾고 좋은 이름과 인터페이스를 부여한 뒤 종속성을 줄이는 과정이며, 이는 코드의 일관성을 높이고 변경을 용이하게 한다고 강조합니다. 특히 ‘잘못된 추상화는 없다’는 과감한 주장을 펼치며, 추상화를 통해 코드를 줄이는 것이 장기적으로 코드 변경을 더 쉽게 만든다고 역설합니다. 이러한 철학은 ‘Flex’라는 새로운 Ruby 라이브러리 개발의 기반이 됩니다.

강연은 프론트엔드 개발로 전환되며, Tailwind CSS에 대한 Joel의 견해를 공유합니다. 그는 Tailwind의 유틸리티 클래스 기반 접근 방식이 특정 상황에서는 유용하지만, ‘의미론적 클래스 이름’을 통해 재사용 가능한 개념을 명명하는 Ruby의 방식과 상충될 수 있음을 지적합니다. 이어서 Joel은 ‘Flex’를 소개합니다. Flex는 Ruby에서 객체 지향 컴포넌트를 설계하기 위한 라이브러리로, 단순한 템플릿 언어나 HTML 생성을 위한 DSL이 아닙니다. Flex의 핵심은 HTML의 의미론(요소, 속성, 중첩)을 Ruby 구문(메서드, 키워드 인수, 블록)에 직접 매핑한다는 점입니다. 이러한 접근 방식은 Ruby의 강력한 기능을 활용하여 뷰를 더욱 구조적이고 안전하게 만듭니다.

Flex의 주요 특징은 다음과 같습니다. 기본적으로 XSS(Cross-Site Scripting) 공격을 구조적으로 방지하며, 컴포넌트가 전달받은 데이터에만 의존하도록 설계되어 테스트와 재사용이 용이합니다. Capybara, RSpec 등 다양한 테스트 헬퍼를 지원하며, Rails 자체 외에는 다른 의존성이 없습니다. 또한, 응답 스트리밍을 지원하여 Time to First Byte(TTFB)를 단축하고, 특정 DOM ID를 대상으로 뷰를 렌더링하여 Hotwire(Turbo Frames)와 같은 부분 업데이트에 최적화되어 있습니다. 컴포넌트 키트를 통해 프로젝트 간 재사용 및 커뮤니티 공유가 가능하며, 매우 빠른 렌더링 속도(초당 약 1기가바이트)를 자랑합니다. Flex는 Rails의 모든 헬퍼와 ViewComponent, Action View, Stimulus, Turbo, Tailwind 등 기존 Rails 생태계와도 잘 통합됩니다. 무엇보다 ‘그냥 Ruby’이기 때문에 기존 Ruby 개발 기술과 도구(Ruby LSP, Solargraph 등)를 그대로 활용할 수 있습니다.

Joel은 실제 데모를 통해 Flex의 사용법을 시연합니다. Heading 렌더링, Nav 컴포넌트의 중첩 및 세부 구현 캡슐화, Tabs 컴포넌트에서 ‘deferred rendering’을 통한 링크와 콘텐츠의 분리 렌더링, 그리고 Table 컴포넌트에서 column 메서드를 사용하여 동적으로 테이블을 구성하는 예시를 보여줍니다. 이러한 예시들은 Flex가 코드의 중복을 줄이고, 뷰 로직을 응집력 있게 구성하며, 유연한 인터페이스를 제공함을 명확히 보여줍니다. 또한, Ruby의 일반적인 리팩토링 기법을 뷰 코드에 그대로 적용할 수 있어 대규모 뷰도 쉽게 관리할 수 있음을 강조합니다.

결론

결론적으로 Joel은 Ruby에서 뷰를 구축하는 새로운 패러다임을 제시하며, Flex가 단순한 추상화를 통해 중복과 비일관성을 피하고, 뷰 레이어에서 특정 책임을 완전히 캡슐화한다고 강조합니다. Flex는 유연한 인터페이스와 컴포넌트 키트를 통해 재사용성과 공유 가능성을 높이며, 단 하나의 언어(Ruby)로 뷰를 작성할 수 있게 하여 개발 경험을 단순화합니다. Joel은 Flex가 개발자에게 '재미'를 선사할 것이라고 말하며, HTML 요소 및 속성에 대한 자동 완성, 컴포넌트 정의로 이동, Tailwind 자동 완성 등 언어 서버 구축과 Flex JS, MorFlex, 그리고 폼 빌딩을 위한 제네릭 추상화 등 Flex의 미래 계획을 공유하며 강연을 마무리합니다. Flex는 Ruby의 강점을 최대한 활용하여 더욱 효율적이고 유지보수 가능한 웹 애플리케이션 뷰를 만들고자 하는 개발자들에게 강력한 대안이 될 것입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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