Ruby Friends iOS 앱: 인증 및 푸시 알림 구현 라이브 코딩

Ruby Friends Authentication - Hotwire Native LIVE #5

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

핵심 요약

  • 1 Ruby Friends iOS 앱은 Hotwire Native를 활용하여 인증 및 비인증 상태에 따른 탭 전환 로직을 효율적으로 관리합니다.
  • 2 Rails 8의 기본 인증과 iOS 네이티브 앱 간의 `didSignIn` 알림 기반 상호작용을 통해 사용자 경험을 개선하는 방법을 시연했습니다.
  • 3 Noticed Gem을 활용하여 푸시 알림 기능을 구현하고, iOS 디바이스 토큰을 Rails 백엔드에 안전하게 등록 및 관리하는 과정을 상세히 다루었습니다.

도입

본 라이브 스트림은 Ruby Friends iOS 앱의 개발 과정을 공유하며, 특히 사용자 인증, 탭 전환 메커니즘, 그리고 푸시 알림 기능 구현에 중점을 둡니다. RailsCom 이후 컨퍼런스 참가자들이 서로 친구를 추가하고 연락을 유지할 수 있도록 개발된 이 앱은 이미 앱 스토어에 출시되었으며, Hotwire Native를 통해 웹과 네이티브 경험을 통합하고 있습니다. 이번 세션에서는 이러한 핵심 기능을 어떻게 Ruby on Rails 백엔드와 iOS 클라이언트가 긴밀하게 연동하여 구현하는지 상세히 탐구합니다.

1. 인증 및 탭 전환 메커니즘

  • Rails 서버 측: Rails 8의 AuthenticationConcern을 기반으로 최소한의 인증 로직을 구현하며, 이메일 확인 및 Turbo Stream 요청 처리를 포함합니다.
  • iOS 클라이언트 측: SceneController는 사용자의 인증 상태에 따라 TabBarController(인증됨) 또는 Navigator(비인증됨)를 루트 뷰 컨트롤러로 설정합니다. 서버에서 전송되는 sessions_meta 부분의 BridgeAuthentication 컴포넌트가 didSignIn 알림을 트리거하여 탭 전환을 수행합니다.

2. 프로필 URL 처리 리팩토링

  • 기존 방식: 초기에는 사용자의 실제 프로필 URL(profile_path)을 iOS 앱으로 직접 전달하여 탭 바의 첫 번째 탭을 설정했습니다.
  • 리팩토링: profiles/me와 같은 고정된 엔드포인트를 도입하여 서버 측에서 현재 로그인한 사용자의 프로필을 직접 렌더링하도록 변경했습니다. 이로써 클라이언트는 복잡한 URL 관리가 아닌 profiles/me 경로만 알면 되므로 로직이 단순화되고, NotificationToken과 같은 불필요한 상태 저장을 제거할 수 있었습니다. 이 변경은 flash.keep과 같은 리다이렉션 관련 문제도 회피했습니다.

3. 푸시 알림 기능 구현 (Noticed Gem 활용)

  • 백엔드 설정:
    • appotic Gem 추가 및 APNS(Apple Push Notification Service) 연동을 위한 설정 파일을 구성합니다.
    • NotificationToken 모델을 생성하여 사용자(User)와 1:N 관계를 설정하고, tokenplatform (iOS, FCM) 정보를 저장합니다. enum을 활용하여 platform의 유효성을 관리합니다.
    • NotificationTokensController를 구현하여 iOS 앱에서 전송되는 디바이스 토큰을 find_or_create_by 방식으로 저장하며, CSRF 보호를 건너뛰도록 설정합니다.
    • NewFriendNotifierdeliver_by :ios 설정을 추가하여 Noticed Gem이 iOS 푸시 알림을 처리하도록 합니다.
  • iOS 클라이언트 설정:
    • NotificationTokenViewModel을 생성하여 디바이스 토큰을 서버의 notification_tokens#create 엔드포인트로 POST 요청합니다. 요청 시 Content-Type: application/json 헤더를 설정합니다.
    • AppDelegate에서 didRegisterForRemoteNotificationsWithDeviceToken 콜백을 통해 APNS로부터 받은 디바이스 토큰(Data 형식)을 String으로 변환하여 NotificationTokenViewModel을 통해 서버에 전송합니다.
    • NotificationTokenComponent Bridge 컴포넌트를 사용하여 앱 시작 시 UNUserNotificationCenter를 통해 사용자에게 푸시 알림 권한을 요청합니다. Apple 정책상 이 요청은 사용자당 한 번만 발생합니다.

4. 향후 개선 사항

  • iOS 앱에서 디바이스 토큰을 로컬에 저장하여 로그아웃 시 서버에서 해당 토큰을 삭제하는 기능 구현이 필요합니다.

결론

이번 라이브 스트림을 통해 Ruby Friends iOS 앱의 핵심 기능인 사용자 인증 및 동적 탭 전환 로직을 Hotwire Native와 Rails 8의 강력한 기능을 활용하여 성공적으로 구현하는 과정을 살펴보았습니다. 특히, 프로필 URL 처리 방식의 리팩토링은 코드의 단순성과 유연성을 크게 향상시켰습니다. 또한, `Noticed` Gem을 활용한 푸시 알림 시스템의 백엔드 및 iOS 클라이언트 측 설정은 사용자 참여를 높이는 중요한 기반을 마련했습니다. 이 모든 과정은 Hotwire Native 접근 방식이 Rails 개발자들에게 네이티브 앱 개발을 얼마나 효율적으로 가능하게 하는지 잘 보여줍니다. 더 자세한 내용은 강사의 저서 'Hotwire Native for Rails Developers'에서 확인할 수 있습니다.

댓글 0

댓글 작성

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

아직 댓글이 없습니다

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