Hotwire Native에 바랐던 Rails 중심 모바일 앱 개발 방식
What I wish Hotwire Native was
핵심 요약
- Hotwire Native는 Rails 개발자에게 Swift와 Kotlin, Xcode, 시뮬레이터 디버깅까지 요구하므로 모바일 앱 출시를 목표로 하는 개발자에게 부담이 된다고 지적한다.
- Ruby Native는 탭 바와 내비게이션 버튼부터 푸시 알림, 딥 링크, 인앱 구매까지 Rails 서버와 뷰에서 제어하고 네이티브 앱을 자동으로 갱신하는 방식을 제시한다.
- Ruby Native는 App Store 계정과 API 키를 연결하면 인증서 처리, 빌드, 스크린샷 생성, 배포까지 수행해 Rails 코드베이스만 유지하려는 개발자를 대상으로 한다.
도입
Hotwire Native는 Rails 앱을 모바일 앱으로 확장하지만, 실제 구현에는 Swift와 Kotlin 작성, Mac과 Xcode 설정, 시뮬레이터 디버깅이 필요하다. 글쓴이는 30개가 넘는 앱을 만들며 대부분의 앱이 네이티브 탭 바, 내비게이션 버튼, 푸시 알림, 일부 네이티브 UI로 구성된다는 점을 확인했고, 이 기능의 대부분을 네이티브 코드 없이 Rails에서 처리하는 Ruby Native를 만들었다.
상세 요약
Hotwire Native에 대한 문제 제기
글쓴이는 Hotwire Native의 가장 적극적인 지지자였고, 관련 서적을 집필했으며 30개가 넘는 앱을 구축했다. 그럼에도 Rails 개발자에게 요구하는 작업이 많다고 평가한다.
- Swift와 Kotlin 코드를 작성해야 한다.
- Mac에서 Xcode 환경을 구성해야 한다.
- 시뮬레이터에서 모바일 동작을 디버깅해야 한다.
- iOS와 Android의 네이티브 계층을 별도로 다뤄야 한다.
이 과정은 모바일 개발 자체를 배우려는 목적이라면 감수할 수 있다. 하지만 Rails 개발자의 목표가 앱스토어 출시라면, 네이티브 개발 도구와 언어를 익히는 일이 핵심 목표와 맞지 않을 수 있다고 글은 주장한다.
대부분의 앱은 반복되는 95%로 구성된다
30개가 넘는 앱에서 공통적으로 필요했던 기능은 다음과 같다.
- 네이티브 탭 바
- 한두 개의 버튼이 있는 내비게이션 바
- 푸시 알림
- 기존 웹 뷰 위에 추가하는 소량의 네이티브 UI
나머지 5%는 실제 커스텀 작업이다. 글쓴이는 이 95%에 해당하는 기능까지 네이티브 코드를 요구해서는 안 된다고 본다. Hotwire Native를 활용한 Rails 방식의 모바일 앱 개발은 Rails 웹 뷰와 비즈니스 로직을 재사용하는 접근을 다룬 관련 사례다.
Ruby Native의 Rails 중심 모델
Ruby Native는 글쓴이가 Hotwire Native에 기대했던 형태로 제시한 도구다. 모바일 개발 경험, Mac, Xcode 없이 Rails 서버가 앱의 동작을 주도하는 것을 목표로 한다.
서버에서 다룰 수 있다고 제시된 항목은 다음과 같다.
- 새 페이지와 콘텐츠
- 네이티브 버튼
- 푸시 알림
- 딥 링크
- 인앱 구매
Rails 코드를 배포하면 네이티브 앱이 변경 사항을 즉시 반영하며, iOS와 Android 앱이 다시 업데이트되지 않아도 되는 구조를 목표로 한다.
네이티브 UI도 ERB에서 비즈니스 로직과 함께 처리
네이티브 UI의 표시 조건은 Rails 뷰에서 결정한다. 예시에서는 native_navbar_tag와 navbar.button을 사용해 사용자의 상태와 역할에 따라 내비게이션 버튼을 다르게 렌더링한다.
- 관리자에게는
Export버튼을 표시한다. - 로그인한 일반 사용자에게는
New order버튼을 표시한다. - 로그인하지 않은 사용자에게는
Sign in버튼을 표시한다.
이 비즈니스 로직은 네이티브 코드에 들어가지 않는다. iOS와 Android 코드 또는 웹과 모바일 프런트엔드에 나누지 않고 Rails에 유지한다.
AI가 Swift를 작성해도 남는 배포 문제
AI가 Swift 코드를 생성할 수 있다는 점은 인정한다. 그러나 글쓴이는 코드 작성 자체가 가장 어려운 작업은 아니라고 말한다. 생성된 코드베이스를 실제 기기에 올리려면 서명 인증서, App Store Connect, 버전 번호, 스크린샷 같은 절차가 남는다. Google Play에서도 같은 종류의 작업을 다시 수행해야 한다.
Ruby Native는 App Store 계정을 하나의 API 키로 연결한 뒤 앱 서명, 빌드, 스크린샷 생성, 배포를 처리한다고 설명한다. Rails 개발자의 앱스토어 진출을 돕는 Ruby Native: Xcode 없이 iOS 앱 배포하기는 이 배포 장벽과 Ruby Native의 방향을 다룬 관련 글이다.
유지하려는 것은 Rails 코드베이스 하나
글쓴이가 제시하는 최종 방향은 Rails 개발자가 앱 출시를 위해 Swift나 Kotlin을 배울 필요가 없도록 하는 것이다. 하나의 Rails 코드베이스가 계속 서비스를 제공하는 동안, 개발자는 기존 방식대로 Ruby 코드를 작성하고 프로덕션에 배포한다. 네이티브 앱의 기능과 배포 과정도 그 흐름 안에서 처리하는 것이 Ruby Native의 목표다.
결론
Ruby Native의 핵심 방향은 모바일 기능과 배포 과정을 Rails 서버와 코드베이스 안에 남기는 것이다. 사용자 역할에 따른 네이티브 버튼 표시도 ERB 뷰에서 처리하고, 앱스토어 배포에 필요한 서명과 빌드, 스크린샷, 배포는 서비스가 맡는다. 글쓴이는 Rails 개발자가 Swift와 Kotlin을 배우거나 iOS·Android 코드를 따로 유지하지 않고 Ruby 작업을 계속하기를 원한다.