Hotwire Native를 활용한 Rails 앱의 iOS 전환 및 동적 탭 구현

Starting a new app, Ruby Friends - Hotwire Native LIVE #4

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

핵심 요약

  • 1 Rails 애플리케이션 'Ruby Friends'를 Hotwire Native를 사용하여 iOS 앱으로 전환하는 과정을 시연합니다.
  • 2 Hotwire Native 앱의 UI/UX 개선을 위해 네비게이션 바 불투명화, 푸터 및 네비게이션 바 숨기기 등 CSS 조정을 수행합니다.
  • 3 사용자 인증 상태에 따라 동적으로 탭을 로드하고, `BridgeComponent`를 통해 서버와 앱 간의 상태 동기화를 구현합니다.

도입

본 세션에서는 Rails 개발자인 Joe Maselotti가 자신이 개발한 Rails 애플리케이션 'Ruby Friends.app'을 Hotwire Native를 활용하여 iOS 앱으로 전환하는 과정을 상세히 시연합니다. RailsConf 이후 사람들과의 연결을 유지하기 위해 개발된 'Ruby Friends'는 컨퍼런스에서 만난 친구들과 다시 연결될 수 있도록 돕는 서비스입니다. 본 세션의 목표는 기존 웹 애플리케이션의 기능을 그대로 유지하면서 네이티브 앱과 같은 사용자 경험을 제공하는 Hotwire Native의 강력한 기능을 보여주는 데 있습니다.

1. Hotwire Native 통합 및 초기 iOS 프로젝트 설정

개발자는 먼저 기존 Rails 프로젝트와 별도로 iOS 프로젝트를 생성하고, Xcode 프로젝트 구조를 정리합니다. 불필요한 파일을 제거하고, gitignore를 설정하여 개인 사용자 데이터를 커밋하지 않도록 관리합니다. 이후 Hotwire Native 패키지를 프로젝트에 추가하고, SceneDelegate를 설정하여 앱이 로컬 Rails 서버(localhost:3000)를 로드하도록 구성합니다. 이로써 웹사이트가 iOS 앱 내에서 정상적으로 렌더링되는 초기 통합 단계를 완료합니다.

2. UI/UX 개선 및 플랫폼별 스타일 조정

기존 웹 UI가 iOS 환경에서 어색하게 보이는 문제를 해결하기 위해 UI 개선 작업을 수행합니다. 특히, 투명하게 보이던 iOS 네비게이션 바와 탭 바를 불투명하게 설정하여 네이티브 앱과 같은 느낌을 줍니다. 또한, .native.css 파일을 도입하고 Rails 레이아웃에서 Hotwire Native 앱일 경우에만 해당 CSS를 로드하도록 조건을 추가합니다. 이를 통해 웹 버전에서는 푸터와 상단 네비게이션 바가 유지되지만, iOS 앱에서는 이들을 숨겨 네이티브 앱에 최적화된 화면을 제공합니다.

3. 동적 탭 구현 및 사용자 인증 처리

앱의 핵심 기능인 ‘내 프로필’, ‘내 친구’, ‘알림’ 세 가지 탭을 Hotwire Tab Bar Controller를 사용하여 구현합니다. 특히, 사용자 인증 상태에 따라 탭 구성을 동적으로 변경하는 로직이 중요하게 다뤄집니다. 사용자가 로그인하지 않은 상태에서는 단일 ‘시작’ 탭만 표시하고, 로그인 시에는 세 가지 ‘인증된’ 탭을 모두 로드하도록 설정합니다. 이 과정에서 BridgeComponent를 활용하여 Rails 서버에서 사용자의 인증 상태(authenticated 여부)를 iOS 앱으로 전달하고, 앱은 이 정보를 바탕으로 탭 구성을 실시간으로 업데이트합니다. 이는 iOS 앱이 서버의 상태를 적극적으로 활용하여 자체적인 상태 관리를 최소화하는 Hotwire Native의 장점을 극대화하는 예시입니다.

4. 경로 설정 (Path Configuration) 및 모달 처리

특정 웹 페이지를 iOS 앱에서 네이티브 모달(Modal) 형태로 표시하기 위한 경로 설정을 구현합니다. /new/edit와 같이 폼이 포함된 페이지를 모달로 띄우도록 Hotwire::ConfigurationsController에서 규칙을 정의합니다. 이를 통해 사용자 경험을 향상시키지만, 폼 제출 후 리다이렉션 시 turbo_action: replace가 모달 내에서 정상적으로 작동하지 않아 스택에 화면이 중복되는 문제에 직면하며, 이에 대한 추가적인 해결 방안을 모색해야 함을 언급합니다.

결론

본 세션을 통해 Joe Maselotti는 Rails 애플리케이션을 Hotwire Native를 활용하여 iOS 앱으로 성공적으로 전환하는 과정을 보여주었습니다. 특히, 동적 탭 구성, 사용자 인증 상태에 따른 UI 변화, 그리고 `BridgeComponent`를 통한 서버-클라이언트 간의 효율적인 통신은 Hotwire Native의 강력함을 입증합니다. 일부 경로 설정 및 모달 처리와 관련된 과제가 남아있지만, Hotwire Native가 Rails 개발자에게 네이티브 앱 개발의 복잡성을 줄이고 서버 중심의 로직을 유지하면서도 풍부한 사용자 경험을 제공할 수 있는 실용적인 대안임을 명확히 제시합니다. 이는 Rails 개발자가 기존의 기술 스택을 활용하여 모바일 앱 시장에 진출할 수 있는 중요한 시사점을 제공합니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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