ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • WebView?
    CS 2024. 10. 3. 09:42

    WebView ❓

    모바일 애플리케이션이나 데스크톱 애플리케이션 내에서 웹 콘텐츠를 표시할 수 있는 컴포넌트이다.

     

    WebView는 웹 브라우저와 유사한 기능을 가지고 있으며, HTML, CSS, JavaScript로 작성된 웹 페이지를 애플리케이션 내부에서 표시하고 상호작용할 수 있다.

     

    📌 WebView의 주요 특징 📌

    애플리케이션 내에서 웹 페이지 표시

    WebView는 앱 내에서 외부 웹 페이지를 로드하거나 로컬에 있는 HTML 파일을 표시할 수 있다.

     

    이를 통해 네이티브 애플리케이션과 웹 콘텐츠를 통합하여 사용할 수 있다.

     

    하이브리드 애플리케이션

    WebView는 하이브리드 앱을 만들 때 주로 사용된다.

     

    하이브리드 앱은 네이티브 앱과 웹 앱의 장점을 결합한 형태로, 네이티브 코드와 웹 기술(HTML, CSS, JavaScript)을 함께 사용할 수 있다. 대표적으로 Ionic이나 Cordova 같은 프레임워크에서 WebView를 이용해 하이브리드 앱을 만들 수 있다.

     

    JavaScript 실행 가능

    WebView는 웹 페이지 내에서 JavaScript를 실행할 수 있다.

     

    이를 통해 웹 페이지 상에서 사용자 인터랙션을 처리하거나 웹에서 제공하는 다양한 기능을 사용할 수 있다.

     

    네이티브 API와 상호작용

    WebView는 네이티브 애플리케이션의 기능과 상호작용할 수 있다.

     

     

    예를 들어, 웹 페이지에서 네이티브 기능(카메라, GPS 등)을 호출하거나, 네이티브 코드에서 WebView 내의 웹 페이지에 메시지를 보낼 수 있다. 이를 통해 앱과 웹 콘텐츠 간의 통신이 가능해져 더 풍부한 기능을 제공할 수 있다.

     

     

    플랫폼별 WebView

    각 플랫폼에서 제공하는 WebView는 조금씩 다를 수 있다.

     

    • Android WebView: Android 애플리케이션에서 WebView 클래스를 사용해 웹 페이지를 표시할 수 있다. 이는 Android 시스템에 내장된 브라우저 엔진을 사용해 웹 콘텐츠를 렌더링한다.
    • iOS WebView: iOS에서는 WKWebView를 사용해 웹 콘텐츠를 표시한다. 이는 WebKit 렌더링 엔진을 기반으로 하고 있다.
    • Desktop WebView: Electron과 같은 프레임워크에서는 데스크톱 애플리케이션 내에 WebView를 사용할 수 있으며, 웹 기술을 사용해 크로스 플랫폼 애플리케이션을 개발하는 데 사용된다.

     

    ❗️ WebView의 사용 사례 ❗️

    하이브리드 앱

    네이티브 코드와 웹 기술을 결합한 하이브리드 앱에서 WebView는 필수적이다.

    앱의 일부 화면을 웹 페이지로 렌더링하여 개발 효율성을 높일 수 있다.

     

    웹 콘텐츠를 네이티브 앱 내에서 사용

    앱 안에서 뉴스 기사, 블로그, 쇼핑몰 페이지 등 외부 웹 콘텐츠를 표시할 때 WebView가 유용하다.

    외부 웹 페이지를 네이티브 앱 내부에 임베드하여 제공할 수 있다.

     

    크로스 플랫폼 앱 개발

    Ionic, Cordova, React Native와 같은 프레임워크는 WebView를 활용해 한 번 작성한 코드를 Android와 iOS 같은 다양한 플랫폼에서 재사용할 수 있게 한다.

     

    브라우저 기능 내장

    자체적인 브라우저 기능을 가진 애플리케이션을 만들 수 있다.

    예를 들어, 이메일 클라이언트 내에서 링크를 열거나, 채팅 애플리케이션에서 웹 페이지 미리보기를 제공할 때 WebView를 사용할 수 있다.

     

    😊 WebView의 장점 😊

    • 웹 기술을 재사용: 개발자는 이미 익숙한 HTML, CSS, JavaScript 기술을 사용해 앱의 일부를 만들 수 있다.
    • 크로스 플랫폼 지원: 한 번의 웹 페이지 개발로 Android, iOS, Windows 등 다양한 플랫폼에서 동일한 UI와 기능을 제공할 수 있다.
    • 빠른 개발 속도: 웹 콘텐츠를 쉽게 앱에 통합할 수 있어 새로운 기능을 빠르게 배포할 수 있다.

     

    😢 WebView의 단점 😢

    • 성능 문제: WebView는 네이티브 UI에 비해 성능이 떨어질 수 있다. 특히 애니메이션이나 대용량 데이터 처리 시 성능 저하가 발생할 수 있다.
    • 플랫폼별 차이: 각 플랫폼에서 제공하는 WebView의 구현 방식이 다르기 때문에, 완전히 일관된 동작을 보장하기 어려울 수 있다.
    • 보안 문제: 외부 웹 페이지를 로드할 경우 악성 코드나 보안 취약점이 있을 수 있기 때문에 WebView에서 외부 콘텐츠를 로드할 때는 주의가 필요하다.

     

    ⭐️ 앱과 웹뷰의 통신 방식 ⭐️

    네이티브 개발을 하기 위해서는 웹뷰로 감싼 웹 프로젝트와 네이티브가 통신을 해야하는데,

    이 웹뷰 속 URL로 연결되어있는 웹 프로젝트에서 앱 기능을 어떻게 사용할까?

     

    여러 가지 방식이 있는데, 기본적으로 네이티브 앱과 웹 콘텐츠 간의 상호작용을 하는 방식은 다음과 같다.

     

    JavaScript Interface인 JSBridge 사용

    앱에서 JavaScript를 호출하거나, 웹페이지에서 네이티브 기능을 호출할 수 있는 방법이다. 

     

    안드로이드의 WebView.addJavascriptInterface()와 iOS의 WKScriptMessageHandler를 활용해 양방향 통신을 할 수 있다.

     

     

    • 웹에서 앱 호출: 웹뷰 내에서 JavaScript 코드를 통해 네이티브 앱의 기능을 호출할 수 있다. 예를 들어, 앱의 카메라 기능을 웹에서 실행할 수 있다.
    • 앱에서 웹 호출: 네이티브 앱에서 JavaScript 함수를 호출하여 웹뷰의 내용을 제어하거나 데이터를 웹페이지로 전달할 수 있다.

     

    URL Scheme

    웹뷰 내에서 특정 URL 스키마를 사용해 네이티브 앱과 통신하는 방식이다.

     

    웹에서 커스텀 URL 스키마를 호출하면, 네이티브 앱에서 그 요청을 처리하고 적절한 액션을 실행할 수 있다.

     

     

    • 장점: 구현이 비교적 간단하고, 웹에서 쉽게 호출할 수 있다.
    • 단점: 데이터를 전달할 수 있는 양이 제한적이고, 보안 문제가 발생할 수 있다.

     

    웹에서 네이티브 이벤트 전송 (PostMessage API)

    HTML5의 window.postMessage()를 이용해 웹에서 네이티브로, 또는 네이티브에서 웹으로 메시지를 전송할 수 있다. 

     

    이 방법은 주로 안전하게 데이터를 주고받기 위해 사용된다.

     

     

    • 웹에서 네이티브로: 웹뷰에서 postMessage로 데이터를 네이티브로 전달하면 네이티브 쪽에서 해당 메시지를 수신하고 처리할 수 있다.
    • 네이티브에서 웹으로: 네이티브 앱에서 웹뷰에 메시지를 전달하면, 웹페이지에서 이를 처리하는 JavaScript가 작동한다.

     

    파일 기반 통신 (로컬 저장소)

    앱과 웹뷰 간에 통신할 때 로컬 파일 시스템을 이용하는 방법도 있다. 

     

    예를 들어, 앱이 로컬 파일에 데이터를 저장하면 웹에서 그 파일을 읽어들여 처리할 수 있다.

     

    Cookies 및 Local Storage 사용

    웹에서 쿠키나 로컬 스토리지에 데이터를 저장하면, 네이티브 앱에서 이를 읽거나 수정하는 방식이다. 

     

    이는 기본적으로 브라우저 기반의 통신이지만, 앱과 웹 간의 간단한 데이터 교환에 사용할 수 있다.

     

    앱의 요구사항과 보안 수준에 따라 적절한 방법을 선택하는 것이 중요하다.

     

     

     

    'CS' 카테고리의 다른 글

    SWC(Speedy Web Compiler)?  (0) 2024.10.02
    FE(프론트엔드)에서 어떤 test를 해야 할까? (TDD는 또 어떤 걸까?)  (1) 2024.09.27
    웹 워커(Web Worker)  (0) 2024.09.24
    Virtual DOM(가상 DOM)  (0) 2024.09.19
    [TS] Typescript를 왜 쓸까?  (2) 2024.09.18
Designed by Tistory.