Hotwire Native를 활용한 Ruby on Rails 모바일 앱 개발 워크숍

RailsConf 2025 Hotwire Native: A Rails developer’s secret tool to buildin... by Joe Masilotti

작성자
HackerNews
발행일
2025년 08월 07일

핵심 요약

  • 1 Hotwire Native는 기존 Rails 웹 화면을 iOS 및 Android 앱으로 재사용하여 개발 시간과 비용을 절감하는 강력한 도구입니다.
  • 2 Swift 또는 Kotlin 경험 없이도 웹 기술만으로 네이티브 앱을 구축하고, 웹 변경 사항을 앱 스토어 검토 없이 즉시 반영할 수 있습니다.
  • 3 네이티브 탭 바, 브릿지 컴포넌트 등을 통해 웹과 네이티브 기능을 유연하게 결합하여 풍부한 사용자 경험을 제공합니다.

도입

본 워크숍은 Ruby on Rails 개발자를 위한 Hotwire Native의 활용법을 다루며, 기존 웹 애플리케이션의 비즈니스 로직과 화면을 재사용하여 iOS 및 Android 모바일 앱을 효율적으로 구축하는 방법을 소개합니다. Swift나 Kotlin과 같은 네이티브 언어 경험 없이도 웹 기술만으로 모바일 앱을 개발할 수 있다는 점을 강조하며, Hotwire Native가 Rails 개발자들에게 모바일 앱 개발의 '비밀 병기'가 될 수 있음을 제시합니다. 이를 통해 개발 시간과 비용을 절감하고, 앱 스토어 검토 없이 빠른 업데이트를 가능하게 하는 Hotwire Native의 핵심 이점을 설명합니다.

Hotwire Native의 핵심 이점

Hotwire Native의 주요 목표는 기존 웹 화면을 iOS, Android, 웹 세 플랫폼에서 재사용하여 개발 노력을 최소화하는 것입니다. 이를 통해 네이티브 iOS 및 Android 개발자 없이 단일 프레임워크로 앱을 유지보수하고 배포할 수 있으며, Ruby로 작성된 Rails 비즈니스 로직을 그대로 활용하여 개발 시간과 비용을 크게 줄일 수 있습니다. 또한, Hotwire Native 앱은 웹 뷰를 통해 Rails 서버에 접속하므로, 서버 변경 사항이 다음 페이지 로드 시 앱에 즉시 반영되어 앱 스토어 검토 없이 빠른 업데이트가 가능합니다. 필요한 경우 프로그레시브 인핸스먼트를 통해 전체 화면이나 부분 요소를 네이티브 기능(예: 지도, 연락처 목록, 네이티브 버튼)으로 전환할 수 있습니다. Basecamp와 HEY와 같은 수백만 사용자 앱에서 이미 사용되고 있어 프로덕션 환경에서의 안정성과 강력함이 입증되었습니다.

iOS 및 Android 앱 구축 실습

워크숍에서는 Xcode를 사용하여 iOS 앱을, Android Studio를 사용하여 Android 앱을 처음부터 구축하는 과정을 시연했습니다.

iOS 앱 구축

  • 새 iOS 앱 프로젝트를 생성하고, 인터페이스는 Storyboard, 언어는 Swift를 선택합니다.
  • Swift Package Manager를 통해 hotwire-native-ios 라이브러리를 추가합니다.
  • SceneDelegate에서 Hotwire.Native.NavigatorConfiguration과 함께 초기화하고, rootURLlocalhost:3000/posts로 설정합니다.
  • Rails 블로그 데모 앱을 로컬에서 실행하여 iOS 앱이 웹 콘텐츠를 로드하고 네이티브와 유사한 화면 전환, 풀투리프레시, Rails 리다이렉트 처리 등을 보여줍니다.

Android 앱 구축

  • 새 Android 앱 프로젝트를 생성하고, Empty Views Activity, 언어는 Kotlin을 선택합니다.
  • build.gradle.kts 파일에 dev.hotwire:coredev.hotwire:navigation-fragments 의존성을 추가합니다.
  • AndroidManifest.xml에 인터넷 접근 권한과 usesCleartextTraffic 설정을 추가하여 localhost 대신 10.0.2.2:3000으로 로컬 서버에 접속합니다.
  • activity_main.xmlFragmentContainerView를 사용하여 NavigatorHost를 정의하고, MainActivity.kt에서 HotwireActivity를 상속받아 Navigator.Config를 설정합니다.

네이티브 경험 개선 및 기능 추가

웹 인터페이스 개선

  • 조건부 CSS(예: if hotwire_native_app?)를 사용하여 네이티브 앱에서만 특정 웹 요소를 숨겨(예: 웹 내비게이션 바, 제목) 더 네이티브처럼 보이게 합니다.
  • HTML의 <title> 태그 내용을 네이티브 내비게이션 바의 제목으로 자동 반영하여 웹과 네이티브 간의 일관성을 유지합니다. 네이티브 UI 요소를 CSS로 복제하지 말고, 웹 요소를 네이티브 요소와 자연스럽게 어우러지도록 디자인하는 것이 중요합니다.

네이티브 탭 바 추가 (iOS)

  • SceneDelegate에서 Navigator 대신 HotwireTabbarController를 사용하도록 변경합니다.
  • Hotwire.Tab 객체 배열을 생성하여 각 탭의 제목, UIImage(systemName:) (SF Symbols) 아이콘, 시작 URL을 정의합니다.
  • AppDelegate에서 UITabBarAppearance를 설정하여 탭 바의 배경을 불투명하게 만듭니다. 탭 바는 자체적인 내비게이션 스택을 가지며, 동적으로 탭 구성을 서버에서 가져올 수도 있습니다.

브릿지 컴포넌트 활용

  • 웹(Stimulus 컨트롤러)과 네이티브(iOS/Android) 간의 통신을 위한 브릿지 컴포넌트를 소개합니다.
  • @hotwired/hotwire-native-bridge 라이브러리를 importmap에 추가하고, bin/rails g stimulus bridge/confirm으로 브릿지 컴포넌트 스켈레톤을 생성합니다.
  • JavaScript의 BridgeComponent에서 send() 메서드를 사용하여 네이티브로 메시지를 보내고, Swift의 BridgeComponent 서브클래스에서 onReceive() 메서드를 통해 메시지를 처리합니다.
  • AppDelegate에 브릿지 컴포넌트를 등록하여 네이티브 앱이 해당 컴포넌트를 처리할 수 있음을 알립니다. Safari/Chrome 개발자 도구를 통해 웹 뷰의 콘솔 로그를 확인하고 data-bridge-components 속성을 통해 등록 여부를 확인할 수 있습니다.
  • 동적인 네이티브 UIAlertController를 웹에서 트리거하는 예제를 통해, JavaScript에서 데이터(예: title)를 보내고 Swift에서 Decodable 구조체를 사용하여 이를 디코딩하는 과정을 시연합니다. 이를 통해 네이티브 코드에서 웹으로부터 받은 데이터를 기반으로 유연하게 UI를 구성할 수 있습니다.
  • 브릿지 컴포넌트는 confirm, alert, location 등과 같이 가능한 한 범용적인 네이티브 API에 매핑되도록 설계하는 것이 좋습니다. bridgecomponents.dev에서 다양한 사전 구축된 브릿지 컴포넌트를 제공합니다.

결론

Hotwire Native는 Ruby on Rails 개발자들이 기존 웹 애플리케이션의 비즈니스 로직과 화면을 활용하여 iOS 및 Android 모바일 앱을 신속하고 효율적으로 개발할 수 있도록 돕는 강력한 솔루션입니다. 네이티브 언어에 대한 깊은 지식 없이도 네이티브 앱의 이점을 누릴 수 있으며, 앱 스토어 검토 없이 웹 기반의 빠른 업데이트가 가능하다는 점은 개발 및 유지보수 측면에서 혁신적인 가치를 제공합니다. 네이티브 탭 바와 브릿지 컴포넌트와 같은 기능을 통해 웹 콘텐츠와 네이티브 기능을 유연하게 결합하여 사용자에게 더욱 풍부하고 일관된 경험을 제공할 수 있습니다. 본 워크숍은 Hotwire Native의 기본 개념부터 실제 앱 구축, 그리고 네이티브 기능 연동까지의 전 과정을 다루며, Rails 개발자들이 모바일 시장으로 확장하는 데 필요한 실질적인 지식과 도구를 제공했습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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