Hotwire의 Turbo Drive, Frame, Stream, Morph: 상황별 최적의 도구 선택 가이드

Turbo Drive, Frames, Streams, Morph? What to use?! | Rails Designer

작성자
jeff
발행일
2025년 05월 01일

핵심 요약

  • 1 Hotwire를 활용할 때는 Turbo Drive, Frame, Stream, Morph 순서로 도구 사용을 고려하는 점진적 접근 방식이 권장됩니다.
  • 2 Turbo Drive는 기본 페이지 전환과 스크롤 유지를, Turbo Frame은 특정 요소 내의 독립적인 업데이트를 처리하는 데 적합합니다.
  • 3 페이지 내 여러 위치를 동시에 업데이트해야 하는 복잡한 UI 변경에는 Turbo Stream을 사용하는 것이 가장 효율적입니다.

도입

Hotwire는 Rails 환경에서 JavaScript 작성을 최소화하면서도 현대적인 웹 애플리케이션을 구축할 수 있게 해주는 강력한 도구 모음입니다. 하지만 Turbo Drive, Frame, Stream, Morph 등 다양한 옵션이 존재하기 때문에, 개발자는 각 도구의 특성을 이해하고 상황에 맞는 최적의 선택을 해야 합니다. 본 글은 점진적 향상(Progressive Enhancement) 전략을 기반으로 Hotwire의 각 구성 요소를 언제, 어떻게 적용해야 하는지에 대한 실질적인 가이드를 제공하며, 개발자가 가져야 할 기술적 판단 기준을 제시합니다.

1. Turbo Drive: 기본이자 시작점

모든 Hotwire 애플리케이션의 출발점은 Turbo Drive입니다. 이는 전체 페이지를 다시 로드하지 않고 <body> 태그만 교체하여 성능을 높입니다.

  • 스크롤 유지: <meta name="turbo-refresh-scroll" content="preserve">를 사용하여 페이지 새로고침 시 스크롤 위치를 유지할 수 있습니다.

  • 사용 시점: 일반적인 페이지 이동 및 전체적인 상태 갱신이 필요할 때 가장 먼저 고려해야 합니다.

2. Turbo Frames: 특정 영역의 독립적 갱신

페이지의 특정 부분만 독립적으로 업데이트해야 할 때 Turbo Frames를 사용합니다.

  • 장점: 프레임 내부의 상호작용이 외부 페이지 상태에 영향을 주지 않으며, 특정 컨테이너 내부의 스크롤 위치를 완벽하게 유지합니다.

  • 사례: 좋아요 버튼 클릭 시 버튼의 상태만 변경되는 경우처럼 업데이트 범위가 명확히 한정될 때 적합합니다.

3. Turbo Streams: 다중 UI 업데이트

하나의 요청으로 페이지의 서로 다른 여러 곳을 동시에 업데이트해야 할 때 필수적입니다.

  • 구현: 컨트롤러에서 respond_to 블록을 통해 Turbo Stream 포맷을 처리하며, turbo_stream.replace 등을 사용하여 여러 DOM 요소를 조작합니다.

  • 사례: 좋아요 클릭 시 버튼 상태 변경뿐만 아니라, 헤더에 있는 ‘총 좋아요 수’ 카운트를 동시에 업데이트해야 하는 경우에 사용합니다.

4. Turbo Morph: 복잡한 상태 변화

Turbo Morph는 DOM의 변경 사항을 자동으로 계산하여 부드럽게 변환하는 기술입니다. 하지만 현재는 구현 시 예상치 못한 부작용이 발생할 수 있고 동작 원리가 복잡하여, Drive나 Stream으로 해결하기 어려운 특수한 경우에 신중히 접근해야 합니다.

결론

결론적으로 Hotwire의 효율적인 사용법은 단순함에서 복잡함으로 나아가는 계층적 접근에 있습니다. 기본적으로 Turbo Drive를 사용하되, 단일 요소 내의 변화는 Frame으로, 페이지 전반의 다중 업데이트는 Stream으로 해결하는 것이 코드 유지보수와 사용자 경험 측면에서 가장 유리합니다. 이러한 전략을 통해 Rails 개발자는 복잡한 JavaScript 프레임워크 없이도 풍부한 인터랙션을 구현할 수 있습니다.

댓글 0

로그인이 필요합니다

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

로그인 하러 가기

아직 댓글이 없습니다

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