바이브코딩으로 웹서비스를 만들다 보면 어느 순간 이런 고민이 생깁니다.
“이걸 아이폰과 안드로이드 앱으로도 출시하고 싶은데…”
“카메라나 푸시 알림 같은 스마트폰 기능도 사용할 수 없을까?”
“웹과 앱을 각각 다시 만들어야 하나?”
이럴 때 검토해 볼 수 있는 도구가 Capacitor입니다.
웹 기술을 그대로 앱으로 가져옵니다
Capacitor는 React, Vue, Next.js 등으로 만든 웹서비스를 iOS와 Android 앱으로 확장할 수 있게 해주는 도구입니다.
웹에서 사용하던 화면과 핵심 로직은 최대한 재사용하면서, 플러그인을 통해 스마트폰의 네이티브 기능까지 연결할 수 있습니다.
예를 들면 다음과 같습니다.
- 카메라와 사진첩
- 푸시 알림
- 위치 정보
- 파일 저장과 공유
- 진동과 햅틱
- 생체인증
- 딥링크
- 블루투스
기존 웹서비스를 버리고 Swift와 Kotlin으로 처음부터 다시 만들 필요가 없다는 것이 가장 큰 장점입니다.
하나의 핵심 코드로 웹과 앱을 함께 관리합니다
구조를 간단히 표현하면 이렇습니다.
웹 공통 코드
├── 웹사이트
├── iOS 앱
└── Android 앱
UI와 서비스 로직은 최대한 함께 사용하고, 카메라나 푸시 알림처럼 기기 기능이 필요한 부분만 Capacitor 플러그인으로 연결합니다.
기능 하나를 수정할 때 웹, iOS, Android 코드를 각각 세 번 고쳐야 하는 일을 크게 줄일 수 있습니다.
특히 웹으로 MVP를 빠르게 만든 뒤 iOS와 Android까지 확장하려는 1인 개발자와 바이브코더에게 잘 맞는 방식입니다.
Cordova와는 무엇이 다를까요?
Cordova와 Capacitor는 모두 웹 코드를 앱 안의 WebView에서 실행하고, 네이티브 기능을 웹 코드와 연결한다는 점에서는 비슷합니다.
하지만 Capacitor는 iOS와 Android 프로젝트를 단순한 빌드 결과물이 아니라 직접 관리하는 소스 코드의 일부로 취급합니다.
- iOS 프로젝트는 Xcode에서 관리
- Android 프로젝트는 Android Studio에서 관리
- iOS 설정은
Info.plist에서 관리 - Android 권한은
AndroidManifest.xml에서 관리 - 필요한 경우 Swift와 Kotlin 코드도 직접 추가 가능
- Capacitor CLI는 프로젝트에 설치하고
npx cap으로 실행
네이티브 프로젝트를 조금은 이해해야 하지만, 플랫폼별 설정이나 오류를 직접 확인하고 수정하기 쉽다는 장점이 있습니다.
공식 문서에서도 이를 Cordova와 Capacitor의 중요한 차이로 설명합니다.
👉 https://capacitorjs.com/docs/cordova#differences-between-capacitor-and-cordova
정말 소스 하나만 관리하면 끝날까요?
핵심 웹 코드는 대부분 공유할 수 있지만, 문자 그대로 파일 하나만 관리하는 것은 아닙니다.
실제 프로젝트에는 보통 다음과 같은 구조가 만들어집니다.
프로젝트
├── 웹 공통 소스
├── ios/ Xcode 프로젝트
└── android/ Android Studio 프로젝트
화면과 서비스 로직은 웹 코드를 중심으로 공유하지만, 앱 아이콘이나 권한 문구, 푸시 알림, 인앱결제처럼 플랫폼에 종속된 부분은 iOS와 Android에서 각각 설정해야 합니다.
앱스토어에 출시하려면 다음 과정도 필요합니다.
- Apple Developer와 Google Play 개발자 등록
- 앱 아이콘과 스플래시 화면 준비
- 카메라·위치 등 권한 사용 이유 작성
- 개인정보처리방침 준비
- Xcode와 Android Studio에서 빌드
- 실제 기기 테스트
- 앱 심사 제출
Capacitor가 앱스토어 등록까지 자동으로 끝내주는 것은 아닙니다.
대신 웹으로 만든 제품을 네이티브 앱으로 확장하고, 앱스토어에 출시할 수 있는 기반을 만들어줍니다.
PWA와는 어떻게 다를까요?
홈 화면 설치와 간단한 푸시 알림 정도만 필요하다면 PWA가 더 빠르고 간단할 수 있습니다.
반면 다음과 같은 경우에는 Capacitor를 검토할 만합니다.
- 앱스토어와 구글 플레이에 출시하고 싶을 때
- 카메라·파일·푸시 등 기기 기능을 안정적으로 사용하고 싶을 때
- 인앱결제나 네이티브 SDK를 연결해야 할 때
- 웹만으로 지원하기 어려운 기능이 필요할 때
- 플랫폼별 기능을 직접 수정하거나 확장해야 할 때
처음에는 웹으로 MVP를 만들고, 시장 반응이 확인되면 Capacitor를 붙여 앱으로 확장하는 것도 현실적인 방법입니다.
바이브코딩할 때는 이렇게 요청해 보세요
기존 웹 프로젝트의 구조와 사용 중인 프레임워크를 먼저 분석해줘.
웹 코드를 최대한 재사용하면서 Capacitor 기반의 iOS·Android 앱으로 전환해줘.
ios와 android 네이티브 프로젝트를 생성하고 소스 관리에 포함해줘.
카메라와 푸시 알림은 Capacitor 플러그인으로 구현하되, 웹 환경에서는 기능 지원 여부에 따라 대체 UI를 제공해줘.
iOS와 Android의 권한 설정, 앱 아이콘, 빌드 방법과 앱스토어 제출 전 체크리스트도 문서화해줘.
바이브코딩 시대에는 Swift와 Kotlin을 모두 깊게 배운 뒤에야 앱을 만들 수 있는 것은 아닙니다.
웹으로 먼저 만들고, 핵심 소스는 함께 관리하면서, 필요한 네이티브 기능만 연결해 iOS와 Android 앱으로 출시하는 것.
Capacitor를 알아두면 웹서비스로 시작한 아이디어의 다음 선택지가 훨씬 넓어집니다.
오 본문에 직접 모델에게 물어볼 수 있는 가이드라니 이거대박입니다