Hotwire Native 앱에서 웹 기반 모달을 네이티브처럼 보이게 하는 방법

Hotwire Native Modals

작성자
발행일
2025년 08월 05일

핵심 요약

  • 1 Hotwire Native 앱에서 웹 기반 모달이 네이티브 사용자 경험을 해치는 문제를 해결하는 방법을 제시합니다.
  • 2 Ruby 헬퍼 메서드를 활용하여 Hotwire Native 앱 여부에 따라 웹 모달의 렌더링 방식을 조건부로 제어합니다.
  • 3 동일한 HTML 콘텐츠로 웹에서는 Bootstrap 모달, iOS에서는 네이티브 모달, Android에서는 하프 시트 모달을 구현하여 플랫폼별 최적화를 달성합니다.

도입

본 영상은 Hotwire Native를 활용한 iOS 및 Android 앱에서 웹 기반 모달(modal)이 네이티브 앱의 사용자 경험을 저해하는 문제를 해결하는 방안을 다룹니다. 웹에서 구현된 모달이 모바일 앱 환경에서 부자연스럽게 느껴지는 현상을 개선하여, 각 플랫폼에 맞는 최적의 모달 UI/UX를 제공하는 기술적 접근법을 소개합니다. 'Ruby Friends' 앱을 예시로 들어, 친구 추가 기능을 위한 모달 구현 과정을 통해 문제점과 해결책을 상세히 설명합니다.

문제점 및 초기 접근

초기에는 웹 애플리케이션에서 친구 추가 버튼 클릭 시 Bootstrap을 이용하여 모달을 띄웠습니다. 이는 다음과 같은 data 속성을 버튼에 추가하여 구현됩니다.

  • data-turbo-frame="modal"
  • data-bs-toggle="modal"
  • data-bs-target="#modal"

웹에서는 이 방식이 깔끔하게 작동하지만, Hotwire Native iOS 앱에서 동일한 웹 기반 모달을 사용하면 네이티브 앱의 일관성을 해치고 부자연스럽게 보였습니다.

Hotwire Native의 기본 동작

웹 기반 모달 관련 data 속성을 제거했을 때, Hotwire Native iOS 앱에서는 /new로 끝나는 경로에 대해 자동으로 네이티브 모달 컨텍스트로 렌더링하는 기능이 있습니다. 이는 iOS 앱의 경로 설정(path configuration)에서 /new 패턴에 context: modal을 부여했기 때문입니다. 이 덕분에 웹 기반 속성을 제거하면 iOS 앱에서는 네이티브 모달이 올바르게 나타났습니다.

최종 해결책: 조건부 Ruby 헬퍼

그러나 웹 기반 모달 속성을 제거하면 웹에서는 더 이상 모달이 작동하지 않는 문제가 발생했습니다. 이를 해결하기 위해 Hotwire Native 앱 여부를 판별하여 조건부로 모달 속성을 적용하는 Ruby 헬퍼를 구현했습니다.

헬퍼 구현

ModalsHelper 모듈 내에 modal_data 메서드를 정의합니다. 이 메서드는 hotwire_native_app? 헬퍼 메서드를 사용하여 현재 요청이 Hotwire Native 앱에서 왔는지 확인합니다.

ruby # app/helpers/modals_helper.rb module ModalsHelper def modal_data if hotwire_native_app? {} else { data: { turbo_frame: 'modal', bs_toggle: 'modal', bs_target: '#modal' } } end end end

이 헬퍼는 뷰에서 다음과 같이 사용됩니다:

html+erb <%= link_to '친구 추가', new_profile_friend_path(@profile), modal_data %>

결과

이 조건부 헬퍼를 적용한 결과, 동일한 HTML 마크업으로 세 가지 다른 플랫폼에서 최적화된 모달 경험을 제공할 수 있게 되었습니다.

  • : Bootstrap을 활용한 웹 기반 모달이 정상적으로 표시됩니다.
  • iOS: Hotwire Native의 설정에 따라 네이티브 모달이 자연스럽게 나타납니다.
  • Android: 하프 시트(half-sheet) 형태의 네이티브 모달이 구현됩니다.

이를 통해 플랫폼별 사용자 경험을 해치지 않으면서도 코드의 재사용성을 높일 수 있습니다.

결론

이 기술은 Hotwire Native 앱 개발 시 웹과 네이티브 모달 간의 시각적, 기능적 불일치를 해소하는 효과적인 방법입니다. Ruby 헬퍼를 활용한 조건부 렌더링을 통해 단일 코드베이스로 각 플랫폼에 최적화된 모달 UI를 제공함으로써, 앱의 전반적인 완성도와 사용자 만족도를 향상시킬 수 있습니다. 'Ruby Friends' 앱에서 이 기법이 광범위하게 적용되어 앱에 네이티브한 매력을 더하고 있음을 강조하며, 개발자들이 이러한 접근 방식을 통해 더욱 매력적인 하이브리드 앱을 구축할 수 있음을 시사합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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