Turbo Streams와 ViewComponent
Turbo Streams는 Rails에서 웹소켓을 통해 실시간 UI 업데이트를 가능하게 합니다. 기존에는 partial: "..."를 사용하여 부분 템플릿을 렌더링했으나, 이는 로직 누수, 재사용성 제한, 대량 렌더링 시 성능 저하 등의 문제를 야기합니다.
ViewComponent는 뷰 로직을 캡슐화하여 재사용 가능하고 테스트 가능한 Ruby 클래스로 만듭니다.
-
캡슐화: 로직을 컴포넌트 내에 집중.
-
재사용성: 다양한 뷰와 스트림에서 활용.
-
테스트 용이성: 독립적인 단위 테스트 가능.
-
성능: 벤치마크에서 부분 템플릿보다 약 2.5배 빠름.
Turbo Streams에서 ViewComponent 활용
Turbo::StreamsChannel.broadcast_append_to 호출 시, partial: "..." 대신 renderable: MessageComponent.new(...) 구문을 사용합니다. 이는 ViewComponent가 HTML을 생성하고, Turbo Streams가 이를 <turbo-stream> 태그로 래핑하여 클라이언트에 푸시합니다.
이점 및 벤치마크
이 방식은 성능 향상(부분 템플릿 대비 1.5~2배 빠름), 유지보수성 증대, 테스트 용이성, 그리고 UI 일관성 확보에 기여합니다.