웹앱을 네이티브 앱으로 만드는 3가지 방법
- WebView
- 네이티브 앱
- 모바일
이미 잘 돌아가는 웹앱이 있습니다. 이제 이걸 App Store와 Google Play에도 올리고 싶습니다. 푸시 알림, 생체 인증 로그인, 홈 화면의 진짜 앱 아이콘까지요.
방법은 크게 세 가지입니다. 각각을 쉬운 말로, 실제로 중요한 차이 위주로 정리했습니다.
1. PWA(프로그레시브 웹앱)로 배포하기
PWA(Progressive Web App)는 웹사이트를 스마트폰에 설치된 앱처럼 사용할 수 있게 만드는 방식입니다. 홈 화면에 아이콘을 추가하고, 브라우저와 별도로 실행할 수도 있습니다. 이를 위해 매니페스트(manifest)와 서비스 워커(service worker) 같은 웹 기술을 사용합니다.
- 좋은 점: 가장 저렴합니다. 별도의 앱을 새로 만들 필요가 없고, 기존 웹 코드도 그대로 사용할 수 있습니다.
- 어려운 점: 네이티브 앱과 비교하면 사용할 수 있는 기기 기능이나 동작 방식에 차이가 있고, 일반적인 네이티브 앱처럼 App Store나 Google Play에 등록하는 방식도 아닙니다.
iOS에서도 홈 화면에 추가한 PWA는 웹 푸시를 사용할 수 있습니다(iOS 16.4부터). 다만 네이티브 앱과 완전히 같은 방식은 아니며, 사용자가 먼저 웹앱을 홈 화면에 추가해야 하는 등의 차이가 있습니다.
따라서 스토어 등록이 중요하지 않고, 웹을 중심으로 서비스를 제공해도 충분하다면 PWA가 가장 간단한 방법입니다.
2. 네이티브 앱으로 새로 개발하기
두 번째 방법은 기존 웹앱과 별도로 모바일 앱을 새로 만드는 것입니다. iOS는 Swift, Android는 Kotlin으로 각각 만들 수도 있고, React Native나 Flutter 같은 크로스플랫폼 프레임워크를 사용할 수도 있습니다. 크로스플랫폼 프레임워크는 하나의 코드베이스로 iOS와 Android 앱을 함께 만드는 방식입니다.
- 좋은 점: 기기의 기능을 폭넓게 사용할 수 있고, 모바일 환경에 맞춘 가장 자연스러운 사용자 경험을 만들 수 있습니다.
- 어려운 점: 기존 웹앱 외에 별도의 앱 코드도 계속 개발하고 관리해야 합니다.
Swift와 Kotlin으로 각각 만든다면 세 개의 코드베이스를 관리하게 될 수도 있습니다.
웹앱 iOS 앱 Android 앱
웹에서 새로운 기능을 만들었다고 끝나는 것이 아니라, 같은 기능을 모바일 앱에도 다시 구현해야 할 수 있습니다. React Native나 Flutter를 사용하면 iOS와 Android 코드를 상당 부분 공유할 수 있지만, 기존 웹앱과는 여전히 별도의 앱 프로젝트입니다.
앱 자체가 핵심 제품이고, 네이티브 앱을 계속 개발하고 유지할 팀이 있다면 이 방법이 가장 적합합니다.
3. 웹앱을 네이티브 앱 안에서 실행하기 (WebView + 네이티브 브릿지)
세 번째는 기존 웹앱을 그대로 활용하면서 네이티브 앱으로 만드는 방법입니다. 앱 안에 WebView를 두고 그 안에서 기존 웹앱을 실행합니다. WebView는 앱 안에서 웹페이지를 보여주는 브라우저 영역이라고 생각하면 됩니다.
하지만 WebView에 웹사이트만 띄우는 것으로 끝나는 것은 아닙니다. 웹에서는 직접 사용하기 어려운 스마트폰의 기능을 연결하기 위해 네이티브 브릿지(native bridge)를 사용합니다 — WebView 안의 JavaScript와 스마트폰의 네이티브 기능을 연결해 주는 역할이죠.
예를 들어 웹앱의 JavaScript에서 이렇게 호출하면:
requestBiometricAuth();
브릿지가 이를 iOS나 Android의 실제 생체 인증 기능과 연결합니다. 이를 통해 기존 웹앱에서도 다음과 같은 기능을 쓸 수 있습니다.
- 푸시 알림
- 카메라
- 생체 인증
- 파일 선택
- 네이티브 화면과 내비게이션
- 인앱결제
- 기타 iOS · Android 기기 기능
좋은 점: 기존 웹 코드베이스를 최대한 그대로 사용할 수 있습니다. 웹에서 만든 기능을 iOS와 Android에서 다시 처음부터 만들 필요가 줄고, 필요한 부분에만 네이티브 기능을 연결하면 됩니다. 즉, 이런 구조입니다.
기존 웹앱
↓
WebView
↕
네이티브 브릿지
↓
iOS / Android 기능
주의할 점: WebView 안에 웹사이트를 보여준다고 해서 자동으로 좋은 네이티브 앱이 되는 것은 아닙니다. 특히 App Store에서는 웹사이트를 단순히 다시 포장한 수준의 앱은 심사에서 문제가 될 수 있습니다 — Apple은 앱이 단순한 웹사이트 재포장을 넘어서는 기능, 콘텐츠, UI와 충분한 유용성을 제공하도록 요구합니다. 그래서 단순히 웹페이지를 보여주는 것보다, 앱의 목적에 맞게 푸시 알림·생체 인증·네이티브 내비게이션·카메라나 파일 기능·인앱결제·앱에 맞는 화면 동작 같은 기능을 연결해 앱으로서 의미 있는 사용 경험을 제공하는 것이 중요합니다. 네이티브 브릿지는 웹앱에서 이런 기기 기능을 쓸 수 있도록 연결해 줍니다.
이미 운영 중인 웹앱이 있고, 별도의 네이티브 앱을 처음부터 다시 만들지 않으면서 App Store와 Google Play에 출시하고 싶다면 이 방법이 적합할 수 있습니다.
빠르게 고르는 법
| 내 상황 | 알맞은 방법 |
|---|---|
| 스토어 등록이 중요하지 않고 웹 중심으로 서비스하고 싶음 | PWA |
| 앱 자체가 핵심 제품이고 네이티브 개발팀이 있음 | 네이티브 앱 새로 개발 |
| 기존 웹앱을 최대한 유지하면서 스토어에 출시하고 싶음 | WebView + 네이티브 브릿지 |
어느 방법이 무조건 더 좋은 것은 아닙니다. 핵심은 지금 가지고 있는 제품과 팀, 그리고 앱에서 필요한 기능입니다. 앱 자체가 제품의 중심이라면 새로 개발하는 것이 더 적합할 수 있습니다. 반면 이미 웹 제품을 운영하고 있고 기존 웹 코드를 최대한 활용하고 싶다면, WebView와 네이티브 브릿지를 이용하는 방식이 현실적인 선택이 될 수 있습니다.
문제는 여기서부터입니다
WebView를 띄우는 것 자체는 어렵지 않습니다. 하지만 실제로 스토어에 배포할 앱을 만들려면 이런 부분을 직접 만들어야 합니다.
- iOS와 Android 프로젝트 구성
- 네이티브 기능 연결
- JavaScript와 앱 사이의 브릿지
- 권한 처리
- 푸시 알림
- 생체 인증
- 인앱결제
- 앱 업데이트
- App Store와 Google Play 출시 준비
웹앱을 다시 만드는 수고는 줄어들지만, 웹과 네이티브 사이를 연결하고 계속 관리하는 일은 여전히 남습니다.
바로 이 부분을 Unveily가 돕습니다. 기존 웹앱은 그대로 유지하면서 필요한 네이티브 기능 — 스토어 출시, 푸시 알림, 생체 인증, 인앱결제 — 을 연결할 수 있습니다. 웹앱을 다시 처음부터 만들지 않고도 네이티브 앱으로 확장하고 싶을 때, 이럴 때 쓰라고 있는 겁니다.