Rails 기반 웹 및 모바일 앱 구축 전략
PWA(Progressive Web Application) vs. 하이브리드 앱(Hybrid App)
- PWA: 단일 Rails 앱으로 모든 기기에서 작동하며, 웹사이트 매니페스트와 서비스 워커를 필요로 합니다. 특별한 번들링 없이 배포가 용이합니다.
- 하이브리드 앱: 메인 Rails 애플리케이션에 iOS(Swift) 및 Android(Kotlin) 네이티브 래퍼를 추가하는 방식입니다. 세 개의 리포지토리가 필요하지만, 웹, 태블릿, 모바일에서 모두 작동하며 앱 스토어 배포가 가능합니다.
Flamingo 앱의 하이브리드 접근 방식
Flamingo는 초기에는 iOS 및 Android 알림을 목표로 하이브리드 접근 방식을 채택했습니다. 이는 Aush Neatia
의 서적을 참고하여 Rails, Kotlin, Swift 세 가지 리포지토리를 관리하며 구현되었습니다.
알림(Notification) 구현의 복잡성
- 초기 요구사항: iOS 및 Android 푸시 알림.
- 추가 요구사항: 사용자들이 개인/업무 생활 분리를 위해 모바일 앱 설치를 꺼려하면서 브라우저 알림의 필요성이 대두되었습니다. 이로 인해 PWA의 핵심 요소인 서비스 워커와 매니페스트가 하이브리드 앱에도 적용되었습니다.
알림 구현 기술 스택
- 인앱(In-app) 및 네이티브 알림:
notice
Gem과 Firebase Messaging을 사용하여 개별 및 대량 메시지 전송을 처리했습니다. Firebase Messaging은 무료 크로스 플랫폼 메시징 솔루션으로 활용되었습니다. - 브라우저 푸시 알림: 웹 푸시 알림을 위해 Service Worker, Push API, Push Server가 필요합니다.
web_push
Gem을 사용하여 VAPID(Voluntary Application Server Identification) 키를 관리하고, 서버가 클라이언트 브라우저로 푸시 알림을 안전하게 전송하도록 했습니다. 이 모든 로직은 Stimulus 컨트롤러 내에 구현되었습니다.
Hotwire 활용
Rails의 강력한 기능인 Hotwire를 활용하여 동적인 사용자 경험을 제공했습니다.
- Turbo Frames: 양식 편집 등 특정 영역을 인플레이스(in-place)로 업데이트하는 데 사용됩니다.
- Turbo Streams: 새로운 메시지를 채팅에 추가하거나 실시간으로 뉴스/채팅 대화를 업데이트하는 데 활용됩니다.
개발 팁
- 애플리케이션 조기 배포: 앱 스토어 검토에 시간이 소요되므로, 기본적인 내비게이션 구조만 갖춰진 상태에서도 앱을 미리 배포하여 테스트 및 피드백 주기를 단축합니다. Rails 앱 변경 사항은 즉시 반영되므로 업데이트 부담이 적습니다.
- 브라우저 푸시 서비스 활용: 각 브라우저 제조사에서 제공하는 푸시 서비스를 통해 Firebase 없이도 브라우저 알림을 구현할 수 있습니다. 이는 많은 JavaScript 코드를 필요로 하지만, 비용 효율적입니다.
- Rails의 빠른 개발 속도: Rails의 장점인 빠른 개발 속도와 짧은 피드백 주기를 활용하여 버그 수정 및 개선 사항을 신속하게 적용할 수 있습니다.
Rails 모바일 개발의 미래
- PWA 지원 불확실성: Rails 8에서 PWA 지원이 강화될 것이라는 기대가 있었으나, 현재까지는 명확한 진전이 없습니다. Apple의 PWA 지원 정책 또한 불확실성이 존재하여 PWA 채택률이 낮은 원인이 되기도 합니다.
- Action Notifier:
notify
Gem과 같은 알림 솔루션의 Rails 내장 기능화에 대한 논의가 있었으나, 현재 활발한 개발은 이루어지지 않고 있습니다. - Strada: 아직 사용하지 않았지만, 향후 더 많은 네이티브 기능을 구현할 경우 활용 가능성이 있는 도구로 언급됩니다.