Turbo Native는 웹 UI가 대부분의 데이터 렌더링 화면에서 “충분히 좋다”는 전제하에, 앱 스토어 출시를 위한 지름길을 제공합니다. 이는 몇 년이 아닌 몇 달 만에 앱을 배포하고 가설을 검증할 수 있게 합니다.
Turbo Native의 주요 이점
- “한 번 작성, 어디든 배포” (Write Once, Deploy Anywhere): Rails 개발자는 서버에 코드를 푸시하면 새로운 변경 사항이 앱 스토어 승인 없이 iOS 및 Android 앱에 즉시 반영됩니다.
- 개발 효율성 극대화: API를 구축하고 iOS 및 Android에서 각각 구현하는 값비싼 개발 주기를 건너뛰고, Rails 코드 작성에 집중할 수 있습니다.
- 선택적 네이티브 업그레이드: 가속도계, GPS, 푸시 알림 등 네이티브 SDK 접근이 필요한 특정 화면만 네이티브로 업그레이드할 수 있어, “전부 아니면 전무” 방식이 아닌 유연한 접근이 가능합니다.
Turbo Native 앱 구축 데모발표자는 간단한 Rails CRUD 앱을 Turbo Native iOS 앱으로 변환하는 과정을 시연했습니다.
- 기본 설정: Xcode 프로젝트 생성 후
UINavigationController를 루트 뷰 컨트롤러로 설정합니다. - Turbo iOS 통합: Swift Package Manager를 통해
Turbo iOS라이브러리를 추가하고,Session객체를 생성하여 HTML 렌더링 및 스냅샷 관리를 담당하게 합니다. - 페이지 방문 및 탐색:
rootURL(로컬 Rails 서버)을 방문하도록 설정하고,SessionDelegate프로토콜을 구현하여 링크 클릭 시 새로운 페이지를 방문하도록 처리합니다. - 네이티브 UI 개선:* 웹 내비게이션 바 숨기기:
WKWebViewConfiguration을 통해 User Agent에turbonative-iOS를 추가하고, Rails에서 이 User Agent를 감지하여native.css파일을 조건부로 로드, 웹 내비게이션 바를 숨깁니다. 이는 캐싱 문제를 방지하고 스타일을 유연하게 관리할 수 있게 합니다. * 동적 네이티브 타이틀: Rails의content_for헬퍼를 사용하여 각 페이지의<title>태그를 동적으로 설정하고, 이 값을 네이티브 내비게이션 바의 타이틀로 활용합니다. * 이미지 업로드:<input type="file">과 같은 표준 HTML 요소를 사용하면 Turbo Native가 자동으로 네이티브 이미지 선택 UI를 제공하여 복잡한 네이티브 코드 없이도 이미지 업로드를 처리할 수 있습니다.
고급 기능 및 미래 전망
- Path Configuration: 서버에서 호스팅되는 JSON 파일을 통해 URL 패턴에 따라 네이티브 화면 라우팅 규칙을 정의할 수 있습니다. 이를 통해 앱 스토어 업데이트 없이 네이티브 기능 라우팅을 변경하고 이전 버전과의 호환성을 유지할 수 있습니다. 예를 들어, 특정 지도 화면을 네이티브 Swift UI 지도로 렌더링하도록 설정할 수 있습니다.
- Strada (예정): 전체 화면이 아닌 네이티브 컴포넌트를 HTML로 구동할 수 있게 하여 웹과 네이티브 간의 간극을 메웁니다. 이를 통해 네이티브 오버플로우 버튼과 같은 요소를 쉽게 통합할 수 있습니다.
- Turbo Navigator (예정): Turbo iOS 시작 시 필요한 복잡한 상용구 코드를 줄여주는 패키지로, 모달, 스택 탐색, 스택 초기화 등 15가지 네비게이션 흐름을 간소화합니다. 이는 곧 Turbo iOS 라이브러리에 통합될 예정입니다.