Turbo Morphing: 전체 페이지 새로고침과 Turbo Streams의 한계를 넘어선 효율적인 UI 업데이트

Turbo Morphing —A Cleaner Way to Update Your Rails UI

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

핵심 요약

  • 1 전체 페이지 새로고침의 비효율성과 사용자 경험 저하 문제를 해결하기 위해 Turbo Streams와 Turbo Morphing이 등장했습니다.
  • 2 Turbo Streams는 정밀한 UI 업데이트를 제공하지만, 요소별 템플릿 및 컨트롤러 로직 생성으로 인한 상용구 코드 증가가 단점입니다.
  • 3 Turbo Morphing은 Idiomorph 라이브러리를 활용하여 변경된 부분만 최소한으로 DOM을 업데이트하며, 코드 및 템플릿을 줄이고 사용자 상태를 보존합니다.

도입

웹 애플리케이션에서 전체 페이지 새로고침은 스크롤 위치 소실, 폼 데이터 초기화, 느린 로딩 등 사용자에게 불편함을 야기합니다. 2025년에도 이러한 방식은 마치 다이얼업 인터넷처럼 느껴지며, 매번 전체 HTML을 다운로드하고 DOM을 재구성하며 JavaScript와 CSS를 다시 로드하는 비효율적인 과정을 거칩니다. 이러한 문제를 해결하기 위해 Hotwire 스택의 핵심 기술인 Turbo Streams가 도입되었으나, 특정 시나리오에서는 여전히 개선의 여지가 있었습니다.

전체 페이지 새로고침의 문제점

  • 비효율성: 매번 전체 HTML 다운로드, DOM 재구성, JS/CSS 재실행.

  • 사용자 경험 저하: 스크롤 위치 소실, 입력 중인 폼 데이터 초기화, 전반적인 속도 저하.

Turbo Streams의 등장과 한계

Turbo Streams는 페이지의 특정 부분을 정교하게 업데이트할 수 있도록 append, prepend, update, remove, replace와 같은 액션을 제공합니다. 이는 필요한 요소만 부분적으로 수정하여 전체 페이지 새로고침의 단점을 극복합니다.

  • 장점: 정밀한 제어, 빠른 부분 업데이트.

  • 단점: 요소별 .turbo_stream.erb 템플릿과 컨트롤러 로직을 각각 생성해야 하므로 상용구(boilerplate) 코드가 증가합니다. 이는 앱이 커질수록 관리하기 어려워지는 복잡성을 초래할 수 있습니다.

Turbo Morphing의 도입

Turbo Morphing은 이러한 Turbo Streams의 단점을 보완하며 더 가벼운 방식의 UI 업데이트를 제공합니다. 개발자는 업데이트할 섹션의 새로운 HTML을 보내기만 하면, Turbo가 Idiomorph 라이브러리를 사용하여 기존 DOM과 새 HTML을 비교하고 변경된 부분만 최소한으로 패치합니다.

  • 구현: 애플리케이션 레이아웃에 <%= turbo_refreshes_with method: :morph, scroll: :preserve %> 한 줄 추가로 활성화.

  • 장점:

    • 코드 간소화: 추가 템플릿이나 컨트롤러 액션 불필요.
    • 사용자 상태 보존: 텍스트 선택, 커서 위치, 입력 중인 폼 데이터 등이 유지됩니다.
    • 애니메이션 유지: 요소가 완전히 교체되지 않으므로 애니메이션이 끊기지 않습니다.
    • 작은 페이로드: 가상 DOM 없이 지능적인 diff 기능만 제공.

Idiomorph의 역할

Idiomorph는 지능적이고 최소한의 DOM 업데이트를 위한 JavaScript 라이브러리입니다. 전체 요소를 교체하는 대신, 현재 DOM과 새로운 버전을 비교하여 변경된 노드만 업데이트하고 나머지는 보존합니다.

Turbo Morphing과 Turbo Streams의 선택

  • Turbo Streams: 요소별 append, prepend 등 정밀한 액션, 여러 개의 분리된 타겟을 한 번에 처리할 때 유용합니다.

  • Turbo Morphing: 최소한의 코드/템플릿으로 넓은 범위의 간단한 업데이트, 사용자 입력/스크롤 위치 보존에 유리합니다.

Turbo Morphing은 Turbo Broadcasts와도 원활하게 작동하여, 브로드캐스트된 부분 템플릿을 통해 모든 구독 클라이언트가 즉시 패치될 수 있도록 합니다. 이는 실시간 기능 구현을 더욱 간소화합니다.

결론

Turbo Morphing은 전체 페이지 새로고침의 고통을 해소하고 Turbo Streams의 상용구 코드 문제를 경감시키는 강력한 보완 기술입니다. 이는 Streams를 대체하는 것이 아니라, 함께 사용하여 개발자가 UI 동기화를 위한 더 적은 코드와 템플릿으로 더욱 효율적인 웹 애플리케이션을 구축할 수 있도록 돕습니다. 명시적인 `append`/`prepend`와 같은 특정 시맨틱이 필요할 때는 Turbo Streams를 사용하고, 광범위하고 단순한 UI 업데이트에는 Turbo Morphing을 활용하여 상황에 맞는 최적의 도구를 선택하는 것이 중요합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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