Capacitor 웹 기반 애플리케이션을 네이티브 앱으로 감싸고, 네이티브 기능에 접근할 수 있게 해주는 프레임워크

    

 Capacitor는 웹 네이티브 앱을 빌드하기 위한 오픈 소스 네이티브 런타임입니다. JavaScript, HTML, CSS로 크로스 플랫폼 iOS, Android, Progressive Web Apps를 만드세요.


https://capacitorjs.com/



🚀 **Capacitor란?**

------------------


**Capacitor**는 **웹 기반 애플리케이션을 네이티브 앱으로 감싸고, 네이티브 기능(GPS, 블루투스, 푸시 알림 등)에 접근할 수 있게 해주는 프레임워크**야.\

📌 **Ionic 팀에서 개발한 오픈소스 프로젝트**로, **Cordova보다 현대적인 웹-네이티브 브릿지** 역할을 수행해.


### ✅ **Capacitor의 핵심 특징**


1.  **웹을 그대로 네이티브 앱(Android, iOS)으로 변환 가능**

2.  **네이티브 기능 (GPS, 카메라, 푸시 알림, 파일 시스템 등) 쉽게 연동 가능**

3.  **PWA, 웹, 네이티브 앱을 하나의 코드베이스에서 운영 가능**

4.  **Cordova보다 현대적이고, 최신 웹 기술과 잘 호환됨**

5.  **React, Vue, Angular, Svelte 같은 프레임워크와도 호환됨**


* * * * *


✅ **Capacitor 사용 방법**

---------------------


### 📌 1️⃣ **설치 및 프로젝트 설정**


먼저, Capacitor를 설치해야 해.


```

npm install @capacitor/core @capacitor/cli


```


📌 **웹 프로젝트를 Capacitor 기반으로 초기화**


```

npx cap init "MyApp" "com.example.myapp"


```


이제 Capacitor가 `capacitor.config.ts` 또는 `capacitor.config.json` 파일을 생성하면서 앱을 설정함.


* * * * *


### 📌 2️⃣ **네이티브 플랫폼 추가**


Capacitor는 기본적으로 웹에서 동작하지만, 네이티브 앱으로 감싸기 위해 Android/iOS 플랫폼을 추가할 수 있음.


```

npx cap add android

npx cap add ios


```


이제 `android/`, `ios/` 폴더가 생성되면서 네이티브 코드가 추가됨.


* * * * *


### 📌 3️⃣ **웹뷰 앱 실행**


웹 애플리케이션을 빌드한 후, 네이티브 플랫폼으로 복사해야 실행할 수 있음.


```

npm run build  # 웹 애플리케이션 빌드

npx cap sync   # 웹 파일을 네이티브 프로젝트로 복사

npx cap open android  # Android 프로젝트 실행

npx cap open ios  # iOS 프로젝트 실행


```


* * * * *


✅ **Capacitor로 네이티브 기능 사용하기**

-----------------------------


Capacitor를 사용하면 네이티브 기능을 쉽게 활용할 수 있어.


### 📌 **1️⃣ GPS (Geolocation)**


```

import { Geolocation } from '@capacitor/geolocation';


const getCurrentLocation = async () => {

  const position = await Geolocation.getCurrentPosition();

  console.log("위도:", position.coords.latitude);

  console.log("경도:", position.coords.longitude);

};


```


📌 **웹에서는 제한이 많지만, Capacitor를 통해 네이티브 GPS를 사용할 수 있음.**


* * * * *


### 📌 **2️⃣ 카메라 (Camera)**


```

import { Camera, CameraResultType } from '@capacitor/camera';


const takePicture = async () => {

  const image = await Camera.getPhoto({

    quality: 90,

    allowEditing: true,

    resultType: CameraResultType.Uri,

  });

  console.log("사진 경로:", image.webPath);

};


```


📌 **웹에서도 동작하지만, 네이티브 카메라 기능과 연동됨.**


* * * * *


### 📌 **3️⃣ 푸시 알림 (Push Notifications)**


```

import { PushNotifications } from '@capacitor/push-notifications';


PushNotifications.requestPermissions().then(result => {

  if (result.receive === 'granted') {

    PushNotifications.register();

  }

});


PushNotifications.addListener('registration', token => {

  console.log("푸시 토큰:", token.value);

});


```


📌 **웹에서는 서비스 워커를, 네이티브에서는 Firebase FCM을 활용 가능.**


* * * * *


✅ **Capacitor vs Cordova vs 플러터 웹뷰**

------------------------------------


|  | **Capacitor** | **Cordova** | **Flutter 웹뷰** |

| --- | --- | --- | --- |

| **네이티브 기능 연동** | 최신 API 지원 | 오래된 API 많음 | 가능하지만 직접 구현 필요 |

| **웹 호환성** | 웹과 100% 호환 | 웹과 호환되지만 무겁고 느림 | 웹 뷰 안에서만 동작 |

| **성능** | 네이티브 수준 | 네이티브보다 느림 | 네이티브 UI 가능하지만 웹 성능 제한 |

| **개발 난이도** | 간단 (웹 개발자 친화적) | 설정이 다소 번거로움 | 플러터 지식 필요 |

| **업데이트 방식** | 웹 변경 즉시 반영 | 앱스토어 업데이트 필요 | 앱스토어 업데이트 필요 |

| **대표적인 사용 사례** | Ionic, Vue, React 프로젝트 | 구형 Cordova 프로젝트 | 플러터 기반 웹뷰 앱 |


* * * * *


🔥 **결론: Capacitor는 웹 중심 개발자에게 최고의 선택!**

----------------------------------------


1.  **웹 기술을 활용하면서 네이티브 기능을 쉽게 추가할 수 있음**

2.  **PWA + 네이티브 앱을 동시에 지원하는 유일한 프레임워크**

3.  **Cordova보다 더 현대적이고 유지보수하기 쉬움**

4.  **Vue, React, Angular 등 최신 웹 프레임워크와 완벽 호환**




댓글

이 블로그의 인기 게시물

js 스트링에서 요소 갯수 세기

STUDY

javascript cheatsheet