Turbo Frames에서 시각적 로딩 피드백을 개선하는 방법

Visual loading states for Turbo Frames
with CSS only | Rails Designer

작성자
발행일
2025년 10월 02일

핵심 요약

  • 1 Turbo Frames의 기본 로딩 상태는 재로드 시 빈 화면을 보여주어 사용자 경험을 저해할 수 있습니다.
  • 2 `aria-busy="true"` 속성을 활용하여 CSS만으로 기존 콘텐츠 위에 오버레이되는 로딩 인디케이터를 구현할 수 있습니다.
  • 3 텍스트, SVG 스피너, Rails Icons를 활용하여 다양한 형태의 시각적 로딩 피드백을 제공함으로써 사용자 경험을 향상시킬 수 있습니다.

도입

이 글은 Turbo Frames를 사용할 때 발생하는 비동기 요청의 로딩 상태 문제를 다룹니다. 기본적으로 Turbo Frames는 초기 로드 시 `Loading…`과 같은 텍스트를 표시하지만, `link_to` 등을 통한 재로드 시에는 콘텐츠가 비워지는 '깜빡임' 현상이 발생하여 사용자 경험(UX)을 저해합니다. 특히 오버레이나 모달처럼 페이지에 영구적으로 존재하는 프레임이 느리게 로드될 경우, 즉각적인 피드백 없이는 사용자가 아무것도 일어나지 않는다고 느낄 수 있습니다. 본문에서는 이러한 문제를 해결하고 즉각적인 시각적 피드백을 제공하는 효과적인 CSS 기반 기법들을 소개합니다.

본문에서는 Turbo Frames의 로딩 상태를 개선하기 위한 여러 가지 CSS 기반 접근 방식을 상세히 설명합니다.

1. 표준 Turbo Frame 로딩 상태의 한계

기본적인 <turbo-frame> 태그는 src 콘텐츠 로드 전까지 내부 콘텐츠를 표시합니다. 하지만 link_to 클릭 등으로 재로드 시 Turbo가 기존 콘텐츠를 비워 빈 화면이 표시되며, 이는 사용자 경험을 저해합니다.

2. CSS-only 로딩 인디케이터

Turbo가 콘텐츠를 가져오는 동안 프레임에 자동으로 추가하는 aria-busy="true" 속성을 활용합니다. 이 속성을 CSS 선택자로 사용하여 기존 콘텐츠 위에 로딩 인디케이터를 오버레이할 수 있습니다. 프레임에 position: relative를 적용하고 ::after 가상 요소를 오버레이 형태로 숨겨둡니다. aria-busy="true" 속성이 설정되면 ::after 가상 요소가 표시되어 “Loading…” 메시지를 보여줍니다. 이 방식은 기존 콘텐츠를 유지하며 로딩 피드백을 제공합니다.

3. SVG 스피너 활용

텍스트 로더보다 시각적으로 매력적인 스피너를 사용할 수 있습니다. 원리는 aria-busy="true" 상태를 활용하는 CSS-only 방식과 동일하나, ::after 가상 요소의 스타일링이 다릅니다. content는 비워두고, 스피너 그래픽은 데이터 URI로 인코딩된 SVG를 background-image로 설정합니다. CSS animation을 통해 가상 요소를 무한히 회전시킵니다. 이 가상 요소 역시 aria-busy="true" 속성이 있을 때만 표시됩니다.

4. Rails Icons 활용

세 번째 예시의 개선된 형태로, rails_icons Gem을 사용하는 경우 CSS Custom Properties를 활용합니다. 뷰에서 turbo-frame 요소의 인라인 스타일 속성을 통해 Base64 인코딩된 아이콘의 SVG 데이터를 CSS 변수로 전달합니다. CSS에서는 하드코딩된 데이터 URI 대신 var(--icon)을 사용하여 아이콘을 로드합니다. 이는 아이콘 관리를 중앙화하고 CSS를 깔끔하게 유지하는 데 기여합니다.

결론

제시된 기법들은 Turbo Frames를 사용하는 애플리케이션에서 사용자 경험을 크게 향상시킬 수 있는 간단하면서도 효과적인 방법을 제공합니다. `aria-busy="true"` 속성을 활용한 CSS 기반 오버레이는 기존 콘텐츠를 유지하면서 즉각적인 로딩 피드백을 제공하여, 빈 화면으로 인한 사용자 혼란을 방지합니다. 텍스트 메시지부터 애니메이션 SVG 스피너, 그리고 Rails Icons와 같은 전용 Gem을 활용한 방식까지 다양한 시각적 표현이 가능하며, 이는 개발자가 애플리케이션의 디자인 가이드라인에 맞춰 유연하게 적용할 수 있음을 보여줍니다. 이러한 기술은 비동기 로딩이 빈번한 웹 환경에서 사용자에게 더욱 매끄럽고 반응적인 인터페이스를 제공하는 데 필수적입니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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