Hotwire Turbo 8의 '페이지 새로고침' 기능: 기존 Turbo Streams의 한계를 넘어

Rails #156 Turbo 8 Morphing in real life

작성자
모리땅
발행일
2023년 12월 25일

핵심 요약

  • 1 Hotwire Turbo 8의 새로운 '페이지 새로고침(Page Refreshes)' 기능은 스크롤 위치를 보존하며 효율적인 UI 업데이트를 가능하게 하여 기존 Turbo Streams의 복잡성을 줄입니다.
  • 2 `data-turbo-permanent` 속성을 통해 특정 HTML 요소의 상태(예: 드롭다운, 폼 입력값)를 페이지 새로고침 시에도 유지할 수 있습니다.
  • 3 `broadcast_refreshes` 기능을 활용하여 여러 사용자 또는 탭 간에 페이지 변경 사항을 실시간으로 동기화할 수 있어 협업 환경에 유용합니다.

도입

본 영상은 Hotwire Turbo 8에 도입될 예정인 '페이지 새로고침(Page Refreshes)' 기능에 대해 심층적으로 다룹니다. 기존 Turbo Streams가 특정 UI 요소를 업데이트하기 위해 많은 컨텍스트와 복잡한 코드를 요구했던 한계를 지적하며, Turbo 8의 새로운 접근 방식이 개발자의 편의성과 사용자 경험을 어떻게 개선하는지 소개합니다. 특히 스크롤 위치 보존 및 페이지의 특정 부분만 효율적으로 업데이트하는 '모핑(Morphing)' 기술에 초점을 맞춥니다.

Hotwire Turbo 8의 ‘페이지 새로고침’ 기능은 기존 Turbo Streams의 복잡성을 해소하며 Rails 애플리케이션 개발을 간소화합니다.

1. Turbo Streams의 한계와 Turbo 8의 ‘페이지 새로고침’기존 Turbo Streams는 UI 업데이트 시 복잡한 컨텍스트 관리와 전체 요소 재렌더링을 요구했습니다. Turbo 8의 ‘페이지 새로고침’(Turbo Morphing)은 turbo_refreshes_with_morph_scroll_preserve 메타 태그를 통해 스크롤 위치를 보존하고, 서버 응답 HTML과 현재 페이지 HTML을 비교(diff)하여 변경된 부분만 효율적으로 업데이트합니다. 이로써 redirect_to만으로 동적인 UI 구현이 가능해집니다.

2. data-turbo-permanent 속성을 통한 상태 유지’페이지 새로고침’ 시 사용자 상호작용 요소(드롭다운, 폼 입력값)의 상태 초기화 방지를 위해 data-turbo-permanent를 사용합니다. 이 속성은 요소 상태를 유지시켜 사용자 경험을 개선합니다.

3. broadcast_refreshes를 이용한 다중 사용자 동기화TurboStreamChannel.broadcast_refresh_to를 통해 특정 채널 구독자에게 페이지 새로고침 이벤트를 브로드캐스트하여, 한 사용자의 변경 사항이 다른 모든 사용자에게 실시간으로 반영됩니다. data-turbo-permanent와 함께 사용 시 동기화 중에도 각 사용자의 작업 상태를 안전하게 유지할 수 있습니다.

4. 실제 Rails 앱 적용 사례Super Rails 앱 적용 결과, 기존 Turbo Streams 템플릿 및 복잡한 로직을 제거하고 간단한 redirect_tobroadcast_refresh_to만으로 동일한 사용자 경험과 코드 간소화를 이룹니다. 폼 상태 관리는 data-turbo-permanent와 Stimulus 컨트롤러 조합으로 최적화됩니다.

결론

Hotwire Turbo 8의 새로운 '페이지 새로고침' 기능은 기존 Turbo Streams의 복잡성을 크게 줄이면서도 동적인 웹 애플리케이션 개발을 위한 강력한 도구를 제공합니다. `turbo_refreshes_with_morph_scroll_preserve`를 통한 효율적인 UI 업데이트, `data-turbo-permanent`를 통한 중요 요소의 상태 보존, 그리고 `broadcast_refreshes`를 통한 실시간 다중 사용자 동기화는 개발자가 더 적은 코드로 더 나은 사용자 경험을 구현할 수 있도록 돕습니다. 이는 Rails 개발의 '행복한 경로(happy path)'를 더욱 확장하며, 웹 개발의 생산성을 한 단계 끌어올릴 것으로 기대됩니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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