MiniApp 표준화 백서 버전 2

W3C 그룹 초안 노트

이 문서에 대한 자세한 정보
이 버전:
https://www.w3.org/TR/2022/DNOTE-mini-app-white-paper-20220701/
최신 공개 버전:
https://www.w3.org/TR/mini-app-white-paper/
최신 편집자 초안:
https://w3c.github.io/miniapp/white-paper/
이력:
https://www.w3.org/standards/history/mini-app-white-paper
커밋 이력
편집자:
Qing An (Alibaba)
Dan Zhou (Baidu, Inc)
Martin Alvarez-Espinar (Huawei)
Zitao Wang (Huawei)
Wanming Lin (Intel Corporation)
Kaining Yuan (Intel Corporation)
Canfeng Chen (Xiaomi)
Yinli Chen (Xiaomi)
Anqi Li (W3C)
Fuqiao Xue (W3C)
이전 편집자:
Dapeng Liu (Alibaba)
Hongru Zhu (Alibaba)
Qingqian Tao (Baidu, Inc)
Zhixing Lei (Baidu, Inc)
Lei Zhao (China Mobile)
Zhiqiang Yu (Huawei)
Xiaowei Jiang (Xiaomi)
피드백:
GitHub w3c/miniapp (풀 리퀘스트, 새 이슈, 열린 이슈)
public-miniapps-wg@w3.org 제목 줄은 [mini-app-white-paper] … 메시지 주제 … (아카이브)

초록

이 문서는 MiniApp이라는 모바일 애플리케이션을 위한 새로운 형식을 소개하며, 이는 Web 기술에 의존하면서도 네이티브 앱의 기능과도 통합되는 매우 인기 있는 하이브리드 솔루션입니다.

이 문서의 상태

이 절은 이 문서가 공개된 시점의 문서 상태를 설명합니다. 현재 W3C 공개 문서 목록과 이 기술 보고서의 최신 개정판은 W3C 기술 보고서 색인인 https://www.w3.org/TR/에서 확인할 수 있습니다.

이 문서는 MiniApps 워킹 그룹에서 노트 트랙을 사용하여 그룹 초안 노트로 공개했습니다.

그룹 초안 노트는 W3C나 그 회원들의 승인을 받은 것이 아닙니다.

이는 초안 문서이며 언제든지 다른 문서로 업데이트, 대체 또는 폐기될 수 있습니다. 진행 중인 작업 이외의 것으로 이 문서를 인용하는 것은 적절하지 않습니다.

W3C 특허 정책은 이 문서에 대해 어떠한 라이선스 요구사항이나 약속도 수반하지 않습니다.

이 문서는 2021년 11월 2일 W3C 프로세스 문서의 적용을 받습니다.

1. 서론

1.1 문제

네이티브 앱은 우리의 일상에서 좋은 반응을 얻고 있지만, 사용자를 위해 더 잘할 수 있는 점이 여전히 많습니다.

Web은 이러한 문제를 피하기에 이상적인 플랫폼이지만, 아직은 매우 불완전합니다.

1.2 MiniApp이란 무엇인가?

MiniApp은 Web 기술(특히 CSS와 JavaScript)에 의존하고 네이티브 앱의 기능과 통합되는 하이브리드 솔루션인 새로운 모바일 애플리케이션 형식입니다.

슈퍼 앱은 다른 애플리케이션(즉, MiniApp)을 호스팅하고 지원하여 플랫폼의 리소스를 사용해 실행할 수 있게 하는 소프트웨어 플랫폼입니다.

MiniApp은 몇몇 슈퍼 앱에서 사용되면서 인기를 얻었으며, Web과 네이티브 사이의 간극을 메우는 데 도움이 되는 몇 가지 특징을 가지고 탄생했습니다.

1.3 MiniApp과 PWA 간의 차이

MiniApp은 Progressive Web Applications (PWA), 네이티브 앱 또는 Web을 대체하려는 것이 아닙니다.

넓게 보면 이러한 기술 간의 중요한 차이 중 하나는 실행 환경입니다. PWA는 브라우저가 있는 거의 모든 Web 지원 환경에서 실행될 수 있지만, MiniApp은 특정 플랫폼이나 슈퍼 앱에 묶여 있습니다. 또 다른 핵심 차이는 배포 메커니즘으로, MiniApp은 패키징되고 자체 포함되는 반면 PWA의 리소스는 Web 전반에 분산됩니다.

코딩 측면에서 두 기술은 유사한 프로그래밍 및 마크업 언어와 CSS 기반 스타일시트를 사용합니다. MiniApp은 HTML 하위 집합에 기반한 전용 도메인 특화 언어와 데이터 바인딩 및 이벤트 관리를 위한 특정 메커니즘을 구현하며, Virtual DOM 관리를 포함한 MVVM 패러다임을 따릅니다. MiniApp 벤더는 HTML에 항상 직접 대응되는 것은 아닌 유사한 UI(User Interface) 요소를 정의합니다.

서비스 측면에서 PWA와 MiniApp 개발자는 동일한 목적과 동등한 기능을 가진 API에 접근할 수 있지만, 정확히 같은 사양을 따르지는 않습니다.

MiniApp 벤더는 자사 채널을 통한 앱 출시 및 배포 관리를 지향하는 독점 API를 정의합니다. 다른 전용 API는 구체적인 시나리오와 실행 플랫폼에 묶여 있습니다. 예를 들어 기기의 네이티브 알람 및 캘린더 기능을 사용해 알림을 설정하는 서비스, 전화 걸기, 성능 경고 트리거 등이 있습니다. 두 기술은 유사한 API와 서비스를 가지고 있지만 각 애플리케이션 유형의 API 사양 사이에는 상당한 차이가 있습니다. PWA는 표준 Web API에 의존하는 반면, MiniApp은 기기별 기능과 벤더 독점 서비스 같은 플랫폼 기능을 최대한 활용하기 위해 비표준 API를 구현합니다.

구현에 따라 MiniApp 사용자 에이전트는 운영 체제, 슈퍼 앱, 또는 서로 다르고 다양한 렌더링 엔진과 WebView를 기반으로 하는 기타 호스팅 플랫폼일 수 있습니다. MiniApp 사용자 에이전트의 아키텍처는 다음 그림에서 볼 수 있듯이 PWA 사용자 에이전트와 다릅니다.

MiniApp과 PWA의 아키텍처
그림 1 MiniApp과 PWA의 아키텍처

부록의 비교표는 Progressive Web Applications (PWA)와 다양한 MiniApp 구현 간의 차이를 식별하고 강조합니다. 이러한 차이 중 일부는 다음 표에 요약되어 있습니다.

기능 Progressive Web App MiniApp
소스 코드 표준 마크업 언어(HTML), 스타일시트(CSS), 스크립트(JavaScript). HTML, CSS, JavaScript의 비표준 방언
배포 형식 Web 리소스(주로 HTML, CSS, JavaScript 코드 및 WebAssembly 모듈) ZIP 컨테이너에 패키징된 HTML, CSS, JavaScript 및 기타 리소스.
패키징 아니요. Web에 연결된 리소스입니다. 예. 벤더마다 서로 다른 패키지 형식입니다.
Web 서버에 파일을 호스팅해야 함 아니요
설치 없는 사용 예, 브라우저에서 실행됩니다. 슈퍼 앱 또는 OS에서 실행됩니다.
독립 실행형 아이콘으로 설치 브라우저 또는 앱 마켓플레이스에서 가능(선택 사항) 아니요
서비스 Web API에 접근 일부 시스템 네이티브 API를 포함한 비표준 Web API에 접근

1.4 사례 연구

1.4.1 사례 1: 공유 자전거 서비스

MiniApp의 보급은 공유 자전거를 번거로운 애플리케이션이 아니라 매끄러운 서비스로 만드는 데 도움이 됩니다.

  • 사용자는 모바일 기기에서 MiniApp 플랫폼 중 하나를 선택하며, 이는 보통 이미 로그인되어 있는 슈퍼 앱입니다.
  • 사용자는 슈퍼 앱 안에서 공유 자전거에 부착된 QR 코드 라벨을 스캔합니다.
  • 호스팅된 앱은 자동으로 공유 자전거 MiniApp으로 이동하고 즉시 자전거의 잠금을 해제합니다.
  • 도착하면 사용자는 MiniApp에서 자전거를 잠급니다.
  • 거래가 완료되고 결제 세부 정보 메시지가 사용자에게 전송됩니다.
공유 자전거 서비스
그림 2 MiniApp을 사용한 공유 자전거 서비스

사용자에게 MiniApp은 여러 관점에서 편의성을 가져올 수 있습니다.

Web 네이티브 앱 MiniApp
다운로드/설치 아니요 아니요
검증됨/신뢰됨 아니요
로그인/등록 사용자 권한
결제 결제 요청 전송 신용카드 등록 또는 다른 앱으로 이동 호스팅된 앱 안에서 완료

1.4.2 사례 2: AR 동물원

MiniApp 개발자는 HTML/CSS/JavaScript를 프로그래밍 언어로 간단히 사용할 수 있으며, MiniApp은 더 유연하므로 일상 업무에서 복잡한 기능을 빠르게 개발하는 데 뛰어납니다.

이 MiniApp은 AI 기술로 동물을 인식하는 AR 동물원을 만들려고 합니다. 개발자는 네이티브 기능이나 고급 기능(예: 이미지 인식, AR 3D 동물 모델 렌더링, 음성 합성을 위한 음성 API, 지도 SDK가 제공하는 AR 내비게이션)에 접근할 수 있는 몇 가지 컴포넌트나 API를 추가하여 이를 쉽게 수행할 수 있습니다.

MiniApp은 검색 엔진, 검색 엔진, 호스팅된 앱의 MiniApp 스토어 또는 QR 코드로 발견될 수 있습니다.

AR 동물원
그림 3 AR 동물원 MiniApp

개발자에게 MiniApp을 개발할 유인은 매우 분명합니다.

Web 네이티브 앱 MiniApp
발견 가능성 검색 엔진 마켓플레이스 복수: 검색 엔진 + 호스팅된 앱의 MiniApp 스토어 + QR 코드
검증됨/신뢰됨 아직 탐색 중 네이티브 앱 마켓플레이스에 의해 호스트 앱 플랫폼에 의해
배포/다시 로드 웹페이지 로드/다시 로드 설치/재설치됨 JavaScript 엔진을 사용하므로 로드/다시 로드
프로그래밍 언어 Web 프로그래밍 언어 새로운/여러 언어: 최소한 iOS와 Android Web 프로그래밍 언어
API/컴포넌트(AR, 이미지 인식, 지리 위치, 음성 API) 매우 기본적 Web 개발자에게 복잡함 매우 단순한 고수준 API와 컴포넌트

1.4.3 사례 3: 차량용 MiniApp

MiniApp의 목표 중 하나는 서로 다른 플랫폼 간에 정보와 서비스를 연결하는 것이므로, 스마트 자동차, 음성 제어 스피커, 스마트 TV 같은 IoT 애플리케이션에 이상적입니다.

현재 일부 MiniApp을 차량 화면과 시스템에 맞게 변환하는 것이 가능합니다. 또한 몇몇 MiniApp 벤더는 다양한 차량 모델에 애플리케이션을 배포하거나 업그레이드하는 데 도움이 되도록 차량 시스템을 위해 특별히 설계된 MiniApp 플랫폼을 구축했습니다. 이는 수백만 명의 Web 개발자를 자동차 애플리케이션 생태계로 끌어들입니다.

이러한 자동차 MiniApp은 주유, 세차, 전자 통행료 징수, 보험, 식당 예약 또는 엔터테인먼트 등 많은 사용자 시나리오를 제공할 수 있습니다. 예를 들어 시스템이 남은 연료가 20% 미만임을 감지하면 소유자에게 주유 MiniApp을 추천할 수 있습니다. 사용자는 가장 가까운 주유소 정보를 얻고 그곳으로 이동해 MiniApp 안에서의 결제를 포함하여 "차량에서 내리지 않고 주유"를 완료할 수 있습니다.

스마트 자동차
그림 4 스마트 자동차용 MiniApp(주유 앱)

1.4.4 사례 4: IoT용 MiniApp

IoT 기기는 MiniApp을 실행하는 또 다른 매개체가 되고 있습니다. IoT용 MiniApp은 여러 IoT 기기 플랫폼과 운영 체제 전반의 상호운용성을 가능하게 하려는 것입니다. 여러 IoT 기기 플랫폼과 IoT 운영 체제 간의 차이를 다루는 대신, IoT용 MiniApp을 도입함으로써 개발자는 IoT 기기에서의 애플리케이션 개발에만 집중하면 됩니다.

한 가지 예는 화면과 여러 물리 버튼을 갖춘 HVAC(난방, 환기 및 공기 조절) 애플리케이션 스위치 패널입니다. 이 경우 IoT용 MiniApp을 도입함으로써 Web 기술을 사용해 스위치 패널의 화면 UI를 설계하고 개발하여 HVAC 정보를 표시할 수 있습니다. 예를 들어 물리 장치로 입력된 목표 온도 값과 측정된 실시간 온도 값을 표시할 수 있습니다.

IoT MiniApp
그림 5 화면과 여러 물리 버튼을 갖춘 HVAC 애플리케이션 스위치 패널에서 실행되는 IoT MiniApp

또 다른 예는 터치스크린이 있는 스마트 스피커입니다. 이 경우 IoT용 MiniApp을 도입함으로써 스마트 스피커의 터치스크린 UI를 Web 기술로 설계하고 개발하여 음악과 비디오를 재생하고, 가정의 IoT 기기를 제어하며, 온라인 쇼핑을 할 수 있습니다.

스마트 스피커의 IoT MiniApp
그림 6 터치스크린이 있는 스마트 스피커에서 실행되는 IoT MiniApp

1.4.5 사례 5: TV용 MiniApp

사용자 상호작용이 터치스크린에 의존하는 모바일 폰에서 실행되는 MiniApp과 달리, TV에서 실행되는 MiniApp의 사용자 상호작용은 TV 리모컨 패널 키보드와 TV 화면 포커스로 전환됩니다.

TV용 MiniApp을 통해 사용자는 E-commerce MiniApp을 통해 TV에서 상품을 구매할 수 있습니다.

TV에서 실행되는 E-commerce MiniApp
그림 7 TV에서 실행되는 E-commerce MiniApp

또한 사용자는 Gaming MiniApp을 통해 TV에서 게임을 할 수 있습니다.

TV에서 실행되는 Gaming MiniApp
그림 8 TV에서 실행되는 Gaming MiniApp

2. MiniApp 개요

2.1 핵심 기능

2.1.1 뷰 계층과 로직 계층 분리

MiniApp에서는 일반적으로 뷰 계층이 로직 계층과 분리됩니다.

로직 계층과 뷰 계층
그림 9 MiniApp의 일반 아키텍처

뷰 계층은 Web 컴포넌트와 네이티브 컴포넌트 표시를 포함해 MiniApp 페이지를 렌더링하는 역할을 하며, 이는 하이브리드 렌더링으로 볼 수 있습니다. 예를 들어 일부 Web 컴포넌트는 WebView에서 지원되지 않거나 성능 제한이 있을 수 있으므로, MiniApp은 지도, 비디오 등과 같은 네이티브 컴포넌트에도 의존합니다.

로직 계층은 JavaScript Workers로 구현됩니다. 워커는 MiniApp의 이벤트 처리, API 호출 및 생명주기 관리를 담당합니다.

확장된 네이티브 기능은 일반적으로 호스팅 네이티브 앱 또는 OS에서 제공되며, 결제, 파일 처리, 이미지 스캔, 전화 통화 등을 포함합니다. 이러한 기능은 특정 API를 통해 호출됩니다. MiniApp이 네이티브 API를 호출하면 JavaScript Bridge를 통해 API 호출을 확장된 네이티브 기능으로 전달하여 추가 처리를 수행합니다. 결과도 JavaScript Bridge를 통해 확장된 네이티브 기능에서 얻습니다.

API가 호출될 때 MiniApp의 데이터 흐름
그림 10 API가 호출될 때 MiniApp의 데이터 흐름

워커는 각 Render에 대한 연결을 설정하고, 렌더링해야 하는 데이터를 Render에 전달하여 추가 처리를 수행하게 합니다.

MiniApp 페이지의 컴포넌트에 의해 이벤트가 트리거되면, 이 페이지의 Render는 추가 처리를 위해 이벤트를 워커로 보냅니다. 동시에 Render는 MiniApp 페이지를 다시 렌더링하기 위해 워커에서 전송되는 데이터를 기다립니다.

렌더링은 상태가 없는 것으로 볼 수 있으며, 모든 상태는 워커에 저장됩니다.

뷰 계층과 로직 계층을 분리하는 이점은 다음과 같습니다.

  • 여러 MiniApp 페이지 간의 데이터 공유와 상호작용에 매우 편리합니다.
  • MiniApp의 생명주기 내에서 동일한 컨텍스트를 가지면 네이티브 앱 개발 배경을 가진 개발자에게 유사한 코딩 경험을 제공할 수 있습니다.
  • 렌더와 JavaScript 워커를 분리하고 병렬로 구현하면 JavaScript 실행이 페이지 렌더링에 영향을 주거나 속도를 늦추는 상황을 방지할 수 있으며, 이는 렌더링 성능 향상에 도움이 됩니다.

2.1.2 풍부한 API와 컴포넌트

MiniApp 플랫폼은 개발자가 멋진 UI를 구축할 수 있도록 많은 컴포넌트를 제공합니다. 여기에는 view, form, image 같은 기본 컴포넌트와 지도 같은 고수준 컴포넌트가 포함됩니다.

MiniApp 벤더는 개발자가 Web 및 네이티브 기능에 모두 접근할 수 있도록 많은 API도 제공합니다. 여기에는 UI 표시 API, 이미지 처리 API와 같은 기본 인터페이스뿐만 아니라 사용자 계정 API, 지도 API, 결제 API 같은 고급 인터페이스도 포함됩니다.

API는 보통 컴포넌트와 함께 작동합니다. 사용자가 MiniApp 페이지에서 특정 컴포넌트를 클릭하면, 관련 API를 호출하여 사용자의 상호작용을 완료하고 필요한 경우 현재 MiniApp 페이지를 새로 고칩니다.

2.1.3 MiniApp 생성자

네이티브 앱과 유사한 사용자 경험을 얻기 위해 MiniApp 리소스는 보통 함께 패키징됩니다. MiniApp 패키지를 다운로드하고 설치한 후에는 MiniApp에 필요한 모든 정적 리소스(즉, 페이지 템플릿, CSS, JavaScript 파일 및 기타 문서)가 사용자의 기기에 유지됩니다. 이러한 리소스는 다음 업데이트 전까지 중복 다운로드 없이 항상 사용할 수 있습니다.

MiniApp 패키지는 압축된 ZIP 아카이브이며, 다음을 포함합니다.

  • 패키지의 루트 디렉터리에 위치한 구성 문서. 구성 파일에는 다음이 포함되어야 합니다.
    • 전체 MiniApp에 대한 일반 설명; 그리고
    • 페이지 설정 및 열기를 위한 각 페이지의 해당 경로와 구성 설명.
  • 앱 수준 생명주기 콜백을 처리하는 스크립트를 포함한 하나의 앱 수준 로직 파일.
  • 페이지 구조를 위한 템플릿 코드, 페이지 스타일링을 위한 CSS 스타일시트, 페이지 로직을 위한 JavaScript 코드를 포함하는 하나 또는 여러 개의 파일.
  • 무결성 검증을 위한 디지털 서명 지원.

검색 및 실행 중 특정 MiniApp을 찾기 위해 MiniApp은 플랫폼에서 패키지 이름이나 식별자를 가져야 합니다. 사용자 인식을 위한 아이콘도 필요합니다.

2.1.4 MiniApp 위젯

MiniApp 페이지 외에도 MiniApp은 정보 조각 또는 MiniApp 위젯으로 표시될 수 있습니다. 이 형식에서 개발자는 자신의 서비스 및/또는 콘텐츠를 호스트 환경(예: 어시스턴트, 기기의 전역 검색 등)이라고 하는 다양한 호스트 시나리오에 배치할 수 있습니다. 이 기능은 MiniApp의 서비스와 콘텐츠를 구체적인 시나리오와 연결하여 사용자에게 더 많은 편의를 제공합니다.

예를 들어 사용자가 여행을 위해 기차표를 구매하면, 스마트 어시스턴트의 MiniApp 위젯은 기차의 최신 상태를 즉시 표시합니다. 사용자는 이 위젯을 클릭하여 더 자세한 정보를 볼 수 있는 전체 화면 MiniApp 페이지로 이동할 수 있습니다.

홈 화면에서 MiniApp으로 이어지는 위젯
그림 11 홈 화면에서 MiniApp으로 이어지는 위젯

MiniApp 페이지와 마찬가지로 위젯도 URI scheme으로 설명됩니다. 호스트 환경은 URI 경로를 통해 로드할 MiniApp 패키지와 해당 위젯을 지정하고, URI 쿼리 매개변수를 통해 위젯에 데이터를 전달합니다. 위젯이 로드되면 호스트 환경에서 표시되고 렌더링됩니다. 보안과 독립성을 보장하기 위해 호스트와 위젯의 데이터뿐만 아니라 서로 다른 위젯의 데이터도 격리됩니다.

많은 시나리오에서 위젯은 더 복잡한 작업을 위해 MiniApp 페이지를 열 수 있습니다. 이러한 경우 위젯은 종종 해당 MiniApp과 데이터를 공유해야 합니다(예: 일관된 로그인 상태 유지). 따라서 위젯과 MiniApp의 데이터는 양쪽에서 접근할 수 있습니다. 다시 말해 MiniApp 위젯과 페이지는 동일한 데이터 접근 권한을 가집니다.

위젯 상호작용
그림 12 MiniApp 위젯 상호작용

위젯의 목표 중 하나는 사용자가 전통적인 앱 개념을 잊고 서비스 형태로 사용자의 요구를 실제로 충족하도록 하는 것입니다. 따라서 모든 앱 호출 경로 외에도 위젯은 텍스트 키워드, 음성 분석, 이미지 인식, 코드 스캔, 이벤트 인텐트와 같이 서로 다른 시나리오에서 서로 다른 방법으로 트리거될 수도 있습니다.

참고: 위젯은 중국 시장에서 Quick App으로 구현됩니다.

2.1.5 단일 인스턴스, 다중 진입점

MiniApp을 발견하고 열고 접근하기 위한 여러 진입점이 있습니다. 여러 WebView에 있는 Web 콘텐츠와 달리 동일한 MiniApp에 대해서는 하나의 인스턴스만 생성되므로, MiniApp은 전역적으로 상태와 데이터를 일관되게 유지합니다. 예를 들어 사용자가 처음으로 QR 코드 진입점을 통해 MiniApp을 열고 로그인한 후에는, 다음에 MiniApp 스토어와 같은 다른 진입점에서 돌아와도 로그인 상태가 유지됩니다.

MiniApp의 진입점에는 다음이 포함되지만 이에 국한되지는 않습니다.

  • MiniApp 마켓플레이스
  • 검색 엔진
  • 스마트 어시스턴트
  • QR 코드
  • SMS/문자
  • 물리적 객체(AI 포함)
  • 브라우저
  • 캘린더 항목
  • 음성 메시지(AI 포함)

2.1.6 성능 및 사용자 경험

MiniApp은 실제 사용을 통해 효과가 입증된 몇 가지 메커니즘으로 성능과 사용자 경험을 개선하려고 합니다.

패키징

MiniApp 생성자를 사용하면 사용자는 MiniApp을 처음 열 때만 패키지를 다운로드하면 되며, 그 후에는 MiniApp의 정적 리소스(예: 페이지, 스크립트, CSS)를 다시 다운로드할 필요가 없으므로 이후 페이지의 로딩과 이동이 더 효율적입니다. 이 기능은 사용자 경험을 개선하고 네트워크 트래픽을 절약합니다.

동시에 MiniApp에는 사전 다운로드 메커니즘이 있어 MiniApp 패키지를 미리 다운로드하거나 첫 페이지에 대해 별도로 사전 다운로드할 수 있으며, 다운로드 중 병렬로 스트리밍 압축 해제를 수행하여 MiniApp 시작 단계의 시간 소모를 최소화하고 처음 열 때 첫 페이지 성능 손실의 균형을 맞춥니다.

다중 렌더링 뷰

MiniApp은 렌더 뷰 간에 네이티브 페이지 스택 관리를 사용하며, 페이지 전환은 네이티브 코드에 의해 구동됩니다. 따라서 페이지의 제스처 조작과 페이지 간 전환은 네이티브와 정확히 동일한 부드러운 경험을 제공할 수 있습니다.

뷰 계층과 로직 계층이 격리되어 있기 때문에 뷰 계층은 독립적으로 렌더링될 수 있습니다. JavaScript 로직 코드에 의해 차단되지 않으므로 페이지의 렌더링 속도를 크게 향상시킬 수 있습니다.

런타임 환경의 사전 구축 및 재사용

MiniApp의 런타임 환경은 보통 mini-app을 시작하기 전에 사전 구축되므로 MiniApp 시작 시간이 줄어듭니다. 사전 구축 콘텐츠에는 렌더링 뷰, 정적 리소스, 개발자 정의 프리페치 요청, MiniApps 런타임 컨테이너가 포함됩니다. MiniApp이 활성화되면 사전 구축된 렌더링 뷰를 인수한 다음, 다음 사용을 위해 새 렌더 뷰를 캐시 풀에 계속 사전 구축합니다. 렌더 뷰 수에는 제한이 있습니다. 렌더 뷰가 닫히거나 수량 제한을 초과하면 가장 오래 열려 있던 렌더 뷰가 파괴됩니다. MiniApp 애플리케이션이 종료되면 런타임이 파괴되고, 애플리케이션 환경과 리소스는 재사용될 수 있습니다.

사전 정의된 컴포넌트와 API

MiniApp 플랫폼은 매우 풍부한 컴포넌트와 API를 제공합니다. 이러한 컴포넌트와 API는 보통 개발자의 성능 요구사항을 충족하도록 잘 설계되어 있습니다.

JavaScript 프레임워크 프리셋과 핫 리로드

MiniApp의 런타임 환경은 네이티브 코드가 제공하는 기본 기능과 프레임워크라는 두 가지 주요 부분으로 구성되며, 여기에는 개발자 API와 JavaScript로 구현된 일부 컴포넌트가 포함됩니다. JavaScript 프레임워크는 네이티브 앱에 내장되어 있으며 MiniApp을 실행하기 전에 MiniApp 런타임 환경에 미리 로드됩니다. JavaScript 프레임워크는 핫 리로드(사용 중 다시 로드)될 수 있어 성능 개선을 위한 많은 가능성을 제공합니다.

2.1.7 로그인

MiniApp 플랫폼은 사용자가 MiniApp에 로그인할 수 있는 다양한 방법을 제공합니다. 사용자가 이미 신원 인증을 통해 플랫폼에 로그인해 있다면 플랫폼의 로그인 정보를 MiniApp과 공유할 수 있으며, MiniApp 자체 계정 시스템과 플랫폼 계정 시스템의 상호운용성을 빠르게 실현하여 MiniApp의 접근 과정을 더 원활하게 만듭니다.

예를 들어 SMS 인증을 사용하는 전통적인 로그인 과정은 더 많은 시간이 걸립니다. 사용자는 먼저 휴대전화 번호를 수동으로 입력한 다음 SMS를 받은 후 인증 코드를 입력해 로그인해야 합니다. MiniApp의 장점은 개발자가 플랫폼이 제공하는 컴포넌트 / API를 사용해 사용자의 휴대전화 번호를 안전하고 편리하게 얻고, 사용자가 자신의 휴대전화 번호로 원클릭 로그인 과정을 승인하도록 유도할 수 있다는 점입니다. 이는 사용자에게 전체 과정을 간단하게 만들고 개발자에게 사용자 정보를 얻는 비용을 줄여 줍니다.

MiniApp에 로그인
그림 13 MiniApp에 로그인

2.1.8 하위 패키징

MiniApp 하위 패키징은 MiniApp 패키지 개발 프로세스를 개선하기 위한 빌드 메커니즘입니다. 이는 개발자가 서로 다른 비즈니스 모듈을 서로 다른 하위 패키지로 나누는 데 도움이 됩니다.

개발자 관점에서 MiniApp은 기본적으로 메인 패키지를 가지며, 여기에는 시작 페이지 파일과 공용 리소스가 포함됩니다. 하위 패키지는 개발자의 비즈니스 모듈을 유연하게 나누는 빌드 유형입니다. 사용자는 필요에 따라 서로 다른 하위 패키지를 로드한 후 특정 페이지를 열 수 있습니다.

사용자 관점에서 사용자가 MiniApp을 시작하면 메인 패키지가 기본적으로 다운로드되고, 메인 패키지 안의 페이지가 시작됩니다. 사용자가 하위 패키지 안의 페이지를 열어야 하는 경우 MiniApp Runtime은 하위 패키지를 다운로드하고 로드한 뒤 하위 패키지 페이지를 시작합니다.

이러한 하위 패키지 빌드 메커니즘을 통해 여러 팀이 함께 개발할 때 더 잘 분리하고 협업할 수 있습니다. 사용자가 MiniApps를 사용할 때 하위 패키징 메커니즘은 MiniApp 홈페이지의 로딩 속도를 높이고, 필요에 따라 하위 패키지를 로드하며, 사용자 경험을 최적화할 수 있습니다.

2.1.9 애드온

MiniApp에서 애드온/확장은 기존 MiniApp에 특정 기능을 추가하는 캡슐화된 모듈이며, 컴포넌트, JavaScript 모듈 또는 페이지일 수 있습니다. 애드온/확장은 별도로 실행되는 대신 MiniApp 안에서만 실행될 수 있습니다. 개발자는 MiniApp처럼 애드온/확장을 개발하고, 다른 MiniApp이 재사용할 수 있도록 MiniApp 플랫폼에 업로드할 수 있습니다.

MiniApp은 다음을 위해 애드온/확장을 지원합니다.

  • 코드 재사용으로 개발 비용을 줄이고 개발자가 새 기능을 쉽게 추가할 수 있게 함
  • 개발자가 인지하지 않아도 기능을 자동으로 업데이트함
  • 사용하지 않는 기능을 로드하지 않음으로써 MiniApp의 패키지 크기를 줄임

애드온/확장 메커니즘은 MiniApp 개발의 장벽을 낮추고 더 많은 개발자를 MiniApp 생태계로 데려옵니다.

2.2 MiniApp 시장

이 절에서는 현재 주류인 몇몇 MiniApp 또는 관련 플랫폼을 설명합니다.

Alipay Mini Program

Alipay Mini Program은 Web과 네이티브의 하이브리드 솔루션인 Alipay 네이티브 앱 위에서 실행됩니다. Alipay Mini Program은 CSS와 JavaScript 같은 Web 기술에 의존합니다. 동시에 결제, 신용 서비스, 얼굴 인증 등 Alipay 네이티브 앱의 기능을 통합합니다.

Alipay 네이티브 앱에서는 100만 개 이상의 Mini Program이 실행되고 있으며, DAU(Daily Active User)는 2억 3천만 명입니다. 사용자 시나리오에는 소매, 교통, 의료 서비스 등이 포함됩니다.

Baidu Smart Mini Program

Baidu Smart Mini Program은 Baidu 앱과 기타 파트너 플랫폼을 기반으로 사람들을 정보와 서비스에 지능적으로 연결하는 개방형 생태 제품을 의미합니다. Baidu의 AI 능력과 Smart Mini Program 안의 모든 콘텐츠에 대한 이해를 통해 Baidu는 사용자와 Smart Mini Program을 정확하게 연결합니다. Baidu의 검색 및 정보 흐름 이중 엔진을 통해 사용자는 Smart Mini Program 안에서 앱과 같은 경험을 얻을 수 있습니다. 2019년 7월 기준으로 Smart Mini Program은 150,000개 이상, MAU는 2억 7천만 명입니다.

Baidu Smart Mini Program은 오픈 소스 연합 내에서 오픈 소스로 제공되며, 슈퍼 앱, 모바일 OS, 차량 OS, 음성 제어 스피커 및 TV를 포괄하는 30개 이상의 협력자가 있습니다.

Quick Apps (Xiaomi와 Huawei를 포함한 Quick App Alliance)

Quick App은 Quick App Alliance의 12개 주요 휴대전화 제조사가 개발한 MiniApp 표준으로, 2억 명 이상의 MAU를 포괄합니다. 개발자는 한 번 개발하여 모든 하드웨어 벤더의 플랫폼에서 실행할 수 있습니다. 운영 체제에 깊이 통합된 Quick Apps는 한 번의 클릭만으로 모바일 폰 시스템의 여러 시나리오에서 얻을 수 있습니다. 네이티브 렌더링 경로를 도입함으로써 프런트엔드 개발과 네이티브 성능 경험의 효과적인 결합이 달성됩니다.

Quick Apps는 네이티브 앱 페이지와 같은 Quick App 페이지 형식과, 장면에서 정보를 표시하는 위젯 형식이라는 두 가지 형태로 실행될 수 있습니다. 둘은 서로 다른 사용자 요구에 맞게 조정되며, 여러 시나리오에서 시스템과 MiniApp을 하나의 전체로 연결합니다.

360 PC MiniApp

PC의 MiniApp은 아직 초기 탐색 단계에 있습니다. 360 PC MiniApp은 해당 PC 브라우저에서 실행되는 가벼운 애플리케이션입니다. 전통적인 웹페이지와 비교해 더 많은 기능과 PC 운영 체제와의 더 쉬운 상호작용을 제공합니다.

PC MiniApps는 기업 계정으로 검증된 사용자에게만 제공됩니다. 대부분의 기능은 엄격한 규제를 받으므로 매우 신뢰할 수 있는 Web 콘텐츠로 간주될 수 있습니다.

PWAs

PWAs는 현대 Web 애플리케이션을 요약하는 최신 용어입니다. 네이티브 앱의 대응물로서 PWA는 네이티브 앱처럼 보이고 느껴지며 기기의 홈 화면/런처/시작 메뉴에 설치될 수 있습니다. 사용자를 다시 참여시키기 위해 푸시 알림을 보낼 수 있고, 오프라인에서도 사용할 수 있으며 열악한 네트워크 조건에서도 동작합니다. 다양한 기능을 가진 기기에서 작동하고, 공개 Web 표준에 의해 정의되는 새로운 기능과 함께 작동하도록 계속 발전하고 있습니다. 사용자는 PWA 앱 안에서 결제할 수 있으며, PWA 앱은 검색 엔진에 친화적이고 하이퍼링크와 완벽하게 작동합니다. PWA는 기술적 측면과 비즈니스 측면에서 성공적입니다 (많은 웹사이트, 특히 소비자 대상 사이트에서 널리 채택됨).

3. Web과 함께 작업하기

이 절은 몇 가지 대표적인 사용 사례를 선택하고 MiniApps가 Web에서 지원받고자 하는 몇 가지 API를 제안합니다.

3.1 애플리케이션 생명주기

3.1.1 하이브리드 렌더링

MiniApp은 Web 렌더링과 네이티브 렌더링의 하이브리드 솔루션입니다. Web과 네이티브의 렌더링 결과를 결합할 수 있는 좋은 방법이 있다면 매우 유용할 것입니다.

Web과 네이티브 양쪽에서 오는 렌더링 결과
그림 14 Web과 네이티브 양쪽에서 오는 렌더링 결과

제안: MiniApp은 네이티브 렌더링 결과를 Web 렌더링 결과에 통합하는 데 도움이 되는 표준화된 API가 필요합니다.

3.1.2 전환 애니메이션

MiniApp은 페이지 전환 중 전환 애니메이션을 제공하여 사용자가 네이티브 앱을 사용할 때와 유사한 경험을 얻도록 하고자 하지만, 현재는 이를 수행하는 것이 거의 불가능합니다.

제안: MiniApp은 MiniApp 페이지 전환 중 전환 애니메이션을 추가하기 위한 API가 필요합니다.

3.1.3 MiniApp 패키지 생성자 표준화

MiniApp은 표준화된 배포 형식을 통해 여러 MiniApp 호스팅 플랫폼을 위한 패키지와 파싱 규약을 형성할 수 있습니다. 현재 각 MiniApp 호스팅 플랫폼은 서로 다른 개발 도구(서로 다른 패키징 방법)를 제공하며, MiniApp은 서로 다른 MiniApp 호스팅 환경에서 다르게 파싱됩니다.

제안: MiniApp은 배포 과정에서 실제로 파일들의 패키징된(압축된) 모음입니다. 우리는 통일된 파일 접미사로 MiniApp(.ma)을 설명하고, .ma 파일을 만드는 방법과 .ma 파일을 파싱하는 방법을 지정할 수 있습니다.

3.1.4 MiniApp 페이지로의 내비게이션 표준화

MiniApp의 인기 페이지는 다른 MiniApp에서 참조될 수 있으며, 사용자가 방문할 때 정확하게 호출되기를 기대합니다.

제안: MiniApp에 접근하기 위한 표준화된 프로토콜(URI scheme)을 정의합니다.

3.1.5 MiniApp 위젯

Android 위젯이나 Apple 대시보드처럼 사용자는 Web 또는 앱 페이지를 열지 않고도 MiniApp 위젯으로 직접 정보를 얻거나 작업을 완료할 수 있습니다. MiniApp 위젯은 데스크톱이나 대시보드처럼 Web 브라우저 밖의 환경에 표시될 수 있습니다.

제안:

  • MiniApp 위젯은 WebView 또는 네이티브 앱 페이지 중 하나인 호스트 환경 안에 표시될 수 있습니다. 호스트 환경은 패키지와 위젯 페이지를 설명하는 해당 URI 경로로 위젯을 로드합니다.
  • MiniApp 위젯은 로컬 데이터나 서버의 데이터에 접근할 수 있습니다. 동시에 MiniApp 위젯은 동일한 패키지의 MiniApp과 통신할 수 있습니다.
  • MiniApp 위젯은 상호작용 가능해야 하며, 이는 모든 사용자 행동/상호작용에 반응해야 함을 의미합니다. MiniApp 위젯은 Web 또는 앱 페이지를 열 수 있는 능력을 가져야 합니다.

3.2 성능 및 튜닝

3.2.1 MiniApp에서 "상호작용 가능 시간"을 위한 이벤트 정의

MiniApp은 MiniApp 페이지의 Time to Interactive (TTI)가 언제 완료되었는지 알아야 합니다.

제안: MiniApp 페이지의 Time to Interactive가 완료되었음을 알리는 표준화된 이벤트.

3.3 그래픽 및 미디어

3.3.1 3D 모델 요소

3D 모델은 풍부한 세부 정보 덕분에 점점 더 인기를 얻고 있습니다. AR과 결합하면 2D보다 더 나은 사용자 경험을 제공할 것입니다. 비즈니스 사례에는 온라인 쇼핑, 광고, 교육 등이 포함될 수 있습니다. 그러나 현재 Web에는 3D 모델을 다루기 위한 표준적이고 편리한 방법이 부족합니다. 이 문서에서는 오디오, 비디오, 이미지를 해당 HTML 태그로 처리하는 방식과 유사하게, 3D 모델을 직접 처리하기 위한 HTML 태그를 정의할 것을 제안합니다.

  • 360도 보기

    사용자는 제스처를 통해 서로 다른 각도에서 3D 모델을 볼 수 있습니다. 또한 3D 모델은 확대/축소될 수도 있습니다. 전체 화면으로 보거나 웹페이지에 포함되어 다른 HTML 콘텐츠와 함께 표시될 수 있습니다.

  • AR로 보기

    사용자는 카메라를 통해 3D 모델을 실제 세계에 배치할 수 있습니다. 사용자는 모델을 배치할 서로 다른 위치를 지정할 수 있습니다.

제안: Web에서 3D 모델을 지정하고 AR과 함께 상호작용형 3D 콘텐츠를 지원하기 위한 <xmodel> 요소.

3.3.2 얼굴 추적

얼굴 추적은 많은 3D 시나리오에서 사용될 수 있습니다.

라이브 비디오의 얼굴 효과
라이브 비디오에서 얼굴에 효과를 추가합니다. 이러한 효과에는 전체 화면 필터, 얼굴 보정과 메이크업, 2D 스티커, 3D 머리 장식 등이 포함됩니다. 이러한 효과 대부분은 비디오 소스의 실시간 얼굴 추적에 크게 의존합니다.
게임
게임 개발자는 추적된 얼굴을 기반으로 게임 전략을 설계할 수 있습니다. 예를 들어 눈을 깜빡일 때 특정 게임 로직을 트리거하거나, 떨어지는 과일이 열린 입 안에 있는지 확인할 수 있습니다.
가상 메이크업
사용자가 제품 페이지에서 립스틱, 아이섀도, 안경, 모자를 착용해 보게 하여 결정에 도움을 줍니다.

제안: 비디오 요소를 입력으로 사용하고 매 프레임 얼굴 추적 출력을 업데이트하는 Face Tracking API. 여기에는 다음이 포함됩니다.

  • 각 얼굴의 경계 상자
  • 각 얼굴의 4x4 포즈 행렬
  • 정규화된 (x, y) 랜드마크 포인트
  • 정점, 노멀, 텍스처 좌표를 포함한 얼굴 기하 데이터

3.3.3 손 제스처 추적 및 인식

손 제스처는 비디오 효과와 AR/VR 게임 시나리오에서 앱을 더 인상적이고 상호작용적으로 만드는 데 사용될 수 있습니다.

제안: 손 움직임을 추적하고 손의 윤곽을 얻기 위한 고수준 API.

3.3.4 ARCore와 ARKit 기반 저수준 AR API

MiniApps에는 Web으로 이전하고 싶은 몇 가지 AR API가 있으며, 이는 게임, 3D 모델 미리보기, 상호작용형 광고에서 더 나은 AR 경험을 제공하는 데 도움이 됩니다.

제안: ARCore와 ARKit을 기반으로 다음을 포함하는 저수준 AR API를 제공합니다.

월드 추적을 위한 카메라 뷰 행렬
휴대전화의 공간적 위치와 방향에 대한 4x4 뷰 행렬을 제공합니다. 개발자는 이를 사용해 자신의 3D 가상 세계에서 카메라 행렬을 실시간으로 업데이트할 수 있습니다. 이를 통해 실제 세계의 위치와 가상 세계 객체의 위치를 서로 연관시킬 수 있습니다.
평면 감지 및 추적
실제 세계의 평면을 감지하고 이러한 평면을 실시간으로 추적합니다. 각 평면의 중심 위치와 방향을 나타내는 4x4 변환 행렬을 제공합니다. 이는 바닥/데스크톱 위에 3D 가상 객체를 배치하는 데 사용될 수 있습니다.
앵커
앵커는 실제 세계의 고정된 위치와 방향을 정의합니다. 개발자는 히트 테스트로 얻을 수 있는 4x4 변환 행렬에서 앵커를 생성할 수 있습니다. 이 행렬은 매 프레임 업데이트되어 해당 행렬에 대응하는 가상 객체가 실제 장면에서 하나의 위치와 방향에 고정될 수 있도록 합니다.
히트 테스트
가상 객체를 클릭하고 배치하는 것과 같은 기능을 구현하기 위해 화면 위치에 대응하는 실제 세계 공간의 위치와 방향을 나타내는 4x4 변환 행렬을 얻습니다.
AR을 더 잘 지원
그림 15 AR을 더 잘 지원하기 위한 API

4. 현재 표준화 작업; WG 작업

4.1 생명주기

[MINIAPP-LIFECYCLE]는 MiniApp 생명주기 이벤트와 MiniApp 및 각 페이지의 생명주기를 관리하는 프로세스를 정의합니다. 이 사양을 구현하면 사용자 에이전트가 전역 애플리케이션 생명주기와 페이지 생명주기 모두의 생명주기 이벤트를 관리할 수 있습니다.

2.1.1 뷰 계층과 로직 계층 분리에서 설명한 것처럼, MiniApp에서 뷰 계층은 로직 계층과 분리됩니다. 뷰 계층은 Web 렌더링과 네이티브 렌더링을 포함하여 MiniApp 페이지를 렌더링하는 역할을 하며, 이는 하이브리드 렌더링으로 볼 수 있습니다. 로직 계층은 JavaScript Worker로 구현됩니다. 로직 계층은 MiniApp의 이벤트 처리, API 호출 및 생명주기 관리를 담당합니다.

MiniApp 생명주기 메커니즘은 MiniApp 전역 애플리케이션 생명주기 이벤트와 MiniApp 페이지 생명주기 이벤트를 통해 MiniApp의 뷰 계층과 로직 계층을 관리하는 수단을 제공합니다. MiniApp 전역 애플리케이션 생명주기 상태와 MiniApp 페이지 생명주기 상태에 대한 지식을 가지고 MiniApp을 개발하면 사용자 경험을 개선할 수 있습니다. MiniApp 생명주기는 일련의 이벤트를 포함하며, MiniApp은 이를 통해 자신의 상태에 따라 동작을 변경할 수 있습니다.

4.2 매니페스트

[MINIAPP-MANIFEST]는 MiniApps를 설명하기 위한 메타데이터 집합을 정의하는 사양입니다. MiniApp Manifest는 식별, 사람이 읽을 수 있는 설명, 버전 데이터, 스타일링 정보와 같은 MiniApp의 기본 정보를 설정하기 위한 추가 메커니즘을 제공하여 [APPMANIFEST] 및 [MANIFEST-APP-INFO] 사양을 확장합니다. MiniApp manifest는 MiniApp의 일부인 페이지와 위젯의 라우팅도 구성합니다.

MiniApp manifest는 Web App Manifest의 일부 기본 요소를 사용하여 MiniApp(name, short_name, description, icons)을 설명하고, MiniApp에 대한 기술적 세부 정보를 지정하기 위한 9개의 보조 멤버(app_id, version, platform_version, device_type, pages, req_permissions, widgets)를 추가하며 앱의 모양과 느낌을 구성하는 color_schemewindow를 포함하는 JSON 문서입니다.

4.3 패키징

[MINIAPP-PACKAGING]는 MiniApp 패키지의 의미와 적합성 요구사항, 그리고 페이지 컴포넌트(즉, 템플릿, 스타일시트 및 JavaScript 로직), 매니페스트, 기타 미디어 파일 또는 구성 리소스를 포함하여 MiniApp의 리소스를 담는 컨테이너의 구조를 정의합니다.

이 사양은 MiniApp의 논리적 및 물리적 구조를 결정하며, MiniApp을 패키징하는 ZIP 기반 컨테이너의 파일 시스템 구성과 처리 측면의 요구사항을 담고 있습니다. MiniApp 패키지의 인스턴스는 런타임 환경 또는 MiniApp 사용자 에이전트에서 MiniApp의 배포와 실행을 용이하게 합니다.

4.4 주소 지정

[MINIAPP-ADDRESSING]는 MiniApps에 접근하기 위한 표준 MiniApp 프로토콜을 정의하는 노트입니다. 현재 각 MiniApp 벤더가 MiniApp 리소스를 설명하는 고유한 방식을 가지고 있고 MiniApp 패키지를 얻기 위해 매우 다른 방법을 사용하여, 플랫폼 간 MiniApps 접근이 매우 어렵고 사용자와 개발자 관점 모두에서 통일된 이해에 도달하기 어렵다는 문제를 해결하는 것을 목표로 합니다.

이 문서는 모바일 딥 링크 기술을 참조하며, MiniApp에 접근하는 두 가지 방식, 즉 HTTPS 프로토콜을 사용하는 방식과 사용자 정의 프로토콜을 사용하는 방식을 정의합니다. 또한 MiniApp Addressing은 교차 환경 접근을 위한 uri-prefix, MiniApps를 위한 uri-infix "miniapp", 그리고 MiniApp을 고유하게 식별하기 위한 identifier와 version을 포함하는 MiniApp URI의 구문을 정의합니다.

MiniApp Addressing은 사용자 에이전트가 MiniApp URI를 기반으로 해당 mini-app 패키지를 얻는 방법과 일부 오류 처리를 설명하고, 네트워크를 통해 MiniApp 패키지를 다운로드하는 예시 절차를 제공합니다.

4.5 위젯

MiniApp Widget은 MiniApp Page의 특별한 형태입니다. 페이지와 마찬가지로 위젯은 MiniApp 사용자 에이전트라고 불리는 호스트 환경에서 실행됩니다. MiniApp 페이지와 달리 위젯은 전체 화면이 아니라 특정 영역을 차지할 수 있습니다. [MINIAPP-WIDGET-REQ] 문서는 MiniApp Widget 개발을 위한 초기 설계 고려사항을 설명하며, 여기에는 사용자 에이전트, 패키징, 매니페스트, 주소 지정, 생명주기, UI 컴포넌트, API, MiniApp과 MiniApp Widget 간의 통신 등이 포함됩니다. 자세한 Widget 사양은 별도 문서에서 설명되며, 사용자 에이전트의 세부 기술 요구사항과 기능을 설명할 것입니다. 예를 들어 위젯 실행 환경의 잠재적 의존성, Widget으로 인해 발생하는 API와 UI Components의 잠재적 변경, MiniApp과 MiniApp Widget 간 통신 요구사항과 같은 Widget이 가져오는 새로운 기능 등이 있습니다. 사용자 에이전트 개발자와 위젯 개발자 모두 기술 개발을 위해 Widget 사양을 참조할 수 있습니다.

4.6 구현, 변환 도구

2021년에 Working Group은 [MINIAPP-MANIFEST]와 [MINIAPP-LIFECYCLE]라는 두 문서를 공개했습니다. 한편 여러 벤더는 일부 사전 표준 구현을 가지고 있습니다. 표준의 실현 가능성을 검증하고 사전 표준 구현과 호환되도록 하기 위해, 워킹 그룹은 MiniApp 표준 Manifest를 Baidu의 App.json 및 HarmonyOS FA의 config.json과 같은 서로 다른 사전 표준 매니페스트 파일로 변환하는 도구를 개발했습니다. 그리고 2021년 TPAC breakout session에서 워킹 그룹은 이 도구의 데모를 시연했습니다.

표준과 사전 배포가 진행됨에 따라, 워킹 그룹은 Packaging, Addressing, Lifecycle, UI components 및 APIs를 포함할 수 있는 완전하고 표준화된 개발 접근 방식을 지원하도록 도구를 개선할 계획입니다.

5. 새로운 아이디어의 인큐베이션; CG 작업

5.1 UI 컴포넌트

MiniApp 컴포넌트는 MiniApp을 구성하는 페이지의 구조, 콘텐츠 및 로직을 정의하는 빌딩 블록입니다. 각 컴포넌트는 기능, 데이터 및 스타일을 캡슐화하여 개발자가 재사용 가능하고 사용자 정의 가능한 항목을 구축할 수 있게 합니다.

MiniApp UI Components 사양은 개발자가 MiniApp 플랫폼 전반에서 동질적이면서도 사용자 정의된 사용자 인터페이스를 구축하는 데 사용할 수 있는 필수 요소 집합을 수집합니다.

이 사양은 HTML과 CSS의 특정 버전을 참조하지 않습니다. HTML 및 CSS 표준 변경사항의 채택과 구현을 보장하기 위해 최신 W3C 권고안을 가리킵니다. MiniApp 사용자 에이전트 벤더와 개발자는 자신의 프로세스와 시스템을 최신 상태로 유지하기 위해 이러한 사양의 변경사항을 추적해야 합니다.

이 사양은 Web Components를 기반으로 모든 MiniApp 사양에서 공통적으로 사용되는 사전 정의된 요소 집합을 정의합니다.

5.2 IoT용 MiniApps

IoT용 MiniApp은 IoT용 MiniApp의 사용 사례를 설명합니다. 이 사양은 사용 사례에서 도출하여 IoT용 MiniApp의 아키텍처를 정의합니다. MiniApp Packaging과 MiniApp Lifecycle을 재사용하고 확장하는 방법이 명시됩니다. 또한 IoT용 MiniApp APIs를 위한 여러 API가 명시됩니다.

IoT용 MiniApp은 휴대폰과 PC에서 실행되는 MiniApps와 유사한 아키텍처를 가지고 있습니다. 하지만 IoT 기기는 서로 다른 하드웨어 기능을 가지므로, IoT용 MiniApp은 다음을 포함한 고유한 기능을 가집니다.

6. 보안 및 개인정보 보호 고려사항

MiniApp은 보안 연결을 지원하기 위해 HTTPS를 활용합니다. 동일한 호스트 환경 안의 여러 MiniApps는 서로 독립적입니다.

MiniApp 내 사용자 상호작용에는 서로 다른 수준의 사용자 권한이 필요합니다.

권한 사용자 상호작용
기본값(추가 작업 필요 없음) 페이지 공유, 클립보드, 진동, 나침반, 모션 센서, 지도, 화면 밝기, 화면 캡처, 배터리 상태
최초 사용 시 권한 지리 위치, 카메라(QR 코드 스캔), 네트워크 상태, Bluetooth, NFC
매번 사용 시 권한 연락처, file-apis, 홈 화면에 추가, 사진 선택기, 전화 통화
토큰으로 검증 푸시
콜백/메시징 비밀번호 없는 결제
비밀번호 요청 결제

서로 다른 관점과 서로 다른 보안 수준에 따라 MiniApp 프레임워크는 다음 방법을 제공합니다.

6.1 기능 인증

개인정보 보호 위험이 높은 기능의 경우 MiniApp은 개발자가 MiniApp 개발자 플랫폼에서 해당 기능 사용 권한을 신청하도록 요구합니다. 신청에는 근거, 사용 시나리오에 대한 자세한 설명, 사용 데모가 포함됩니다. 그런 다음 플랫폼은 MiniApp 사용 요구사항에 따라 신청을 검토합니다. 승인된 MiniApps만 이러한 인터페이스를 호출할 수 있습니다. 예를 들어 사용자의 휴대전화 번호를 얻는 기능은 보안 위험이 높은 기능 중 하나입니다.

6.2 사용자 권한 부여

사용자 개인정보와 관련된 인터페이스의 경우 사용자의 권한 부여가 반드시 필요합니다. MiniApp은 이러한 민감한 인터페이스를 location, album, address, camera, calendar 등 여러 권한 부여 범위로 분류합니다. 예를 들어 MiniApp이 카메라 기능을 호출하려고 하지만 사용자가 권한을 부여하지 않은 경우 창이 팝업됩니다(아래 그림 참조). 따라서 사용자는 이러한 개인정보 관련 기능이 보호되고 있음을 이해합니다. 한편 서로 다른 슈퍼 앱에서 호스팅되는 MiniApps는 각 슈퍼 앱의 사용 특성과 사용 시나리오에 따라 서로 다른 개인정보 보호 권한 부여 범위를 가질 수 있습니다.

사용자 권한 부여
그림 16 사용자 권한 부여

6.3 MiniApp 감사 검토

MiniApp 패키지는 공개 전에 MiniApp 플랫폼의 검토를 받습니다. 플랫폼은 개발자가 새 버전의 MiniApp을 공개할 수 있는 유일한 경로이므로, 개발자는 MiniApp Platform Operation Terms를 따라야 합니다. 플랫폼 감사에는 데이터 수집, 데이터 사용, 데이터 보안 및 지리적 위치와 같은 여러 측면이 있습니다.

6.4 도메인 확인

온라인 웹페이지를 렌더링할 수 있는 <web-view> 같은 일부 컨테이너 컴포넌트의 경우, MiniApp 사용자 에이전트는 해당 컴포넌트가 접근하는 URL을 제한할 수 있습니다. MiniApp Management Center에 구성된 도메인만 <web-view>에서 접근할 수 있습니다. 또한 컴포넌트가 <iframe>을 포함하는 경우 iframe이 여는 URL도 MiniApp Management Center에 구성되어야 합니다. 이러한 방식으로 MiniApp 플랫폼은 MiniApp이 여는 동적 페이지에 대해 더 강력한 제어를 가질 수 있습니다.

마찬가지로 MiniApp 프레임워크는 비동기 요청 주소의 적법성을 검증합니다.

예를 들어 request, download, upload 등으로 시작되는 URL의 경우, 해당 도메인은 MiniApp Management Center에 구성된 도메인에 속해야 하며, 데이터 전송의 보안을 보장하기 위해 프로토콜은 HTTPS 프로토콜이어야 합니다.

7. 전 세계의 MiniApp 표준화

MiniApp은 중국에서 시작되었지만 전 세계적으로 인기가 높아지고 있습니다. 일본, 한국, 동남아시아, 미국, 유럽, 아프리카를 포함한 세계 다른 지역에서도 유사한 제품 형태가 등장하고 있습니다. MiniApp 기술의 표준화는 전 세계 Web 커뮤니티의 상당한 관심을 끌었습니다. 따라서 MiniApp 표준에 대한 협력은 공동의 국제적 노력이 됩니다.

7.1 더 넓은 Web 커뮤니티의 MiniApp 논의

MiniApp 표준화에 대한 첫 번째 전 세계 Web 커뮤니티 논의는 후쿠오카에서 열린 TPAC 2019 중에 있었습니다. breakout session이 조직되었고, 이 자리에서 MiniApp 벤더들은 MiniApp 기술과 MiniApp 표준의 필요성을 소개했습니다. 참가자들은 패키징, 매니페스트, 생명주기, 위젯과 같은 MiniApp 표준화의 가능한 방향을 논의했습니다. MiniApp 표준과 현재 Web 표준 작업 간의 중복을 피하고 MiniApp 플랫폼과 Web 간, 그리고 서로 다른 MiniApp 플랫폼 간의 상호운용성을 강화하기 위한 특별한 노력이 있었습니다. 이 논의 직후 MiniApps Ecosystem Community Group이 출범했고 MiniApp 사양의 인큐베이션이 시작되었습니다.

가상 TPAC 2020 중에는 행사에서 Mini Apps로부터 배우기라는 제목의 breakout session이 있었습니다. 이 breakout session에서 전문가들은 MiniApp의 추상적 형태와 MiniApps가 가질 수 있는 강력한 기능을 논의했습니다. 또한 세션에서는 다양한 개발 도구를 통해 MiniApp을 구축하는 방법을 공유했습니다. 이후 Web 개발자가 MiniApp과 그 개발자 경험에서 무엇을 배울 수 있는지에 초점을 맞춘 공개 논의가 있었습니다.

7.2 CJK의 MiniApp

아시아 시장의 MiniApp 제품 형태와 기술은 많은 유사점을 공유합니다. 전 세계 커뮤니티, 특히 중국, 일본, 한국 참가자들을 모아 각 지역의 MiniApp 생태계를 중심으로 소통하고 MiniApps 표준화 노력의 미래를 논의하기 위해, W3C MiniApps Working GroupMiniApps Ecosystem Community Group은 2021년 4월 제1회 MiniApps CJK 회의를 조직했습니다. 30개가 넘는 조직에서 약 90명의 참가자가 논의에 참여해 MiniApp 생태계, 기술 아키텍처, 프레임워크 및 차량용 MiniApp과 같은 새로운 시나리오의 MiniApps에 대한 아이디어를 교환했습니다. 논의의 대략적인 결론은 MiniApps Working Group에서 MiniApp 표준 개발이 잘 진행되고 있으므로 이제 MiniApp 표준의 보안, 개인정보 보호, 접근성 및 국제화에 대한 수평 검토를 시작할 때라는 것입니다. 또한 MiniApp에서 IoT 기술을 활용하는 것은 새로운 시나리오의 MiniApp을 위한 매우 유망한 방향이 될 수 있으며, 관련 표준화 작업에서 전 세계 MiniApp 커뮤니티가 협력할 좋은 기회가 있을 것입니다.

7.3 유럽의 MiniApps

유럽에는 MiniApps 사례가 많지 않지만 이 개념은 점차 주목을 받고 있으며, 커뮤니티는 전통적인 앱 마켓플레이스 밖에서 새로운 비즈니스 모델과 혁신을 찾기 위해 이러한 기술을 탐색하기 시작했습니다.

2021년에 세 W3C 회원을 포함한 이해관계자 그룹은 Quick App Initiative를 출범시켰습니다. 이는 모든 조직과 개인에게 열려 있고 개방형 협력에 의해 추진되는 오픈 소스 지향 관심 그룹입니다. 프랑스에 기반을 둔 독립 비영리 조직인 OW2가 주최하는 이 그룹은 벤더 중립적 관점에서 W3C 작업을 촉진하고, 유럽 시장 관점에서 홍보, 구현 및 표준화 요구사항 수집에 초점을 맞추기 위한 투명한 프로세스에 따라 운영됩니다.

8. W3C에서의 향후 방향

MiniApps의 사용 사례와 요구사항을 충족하고, Web 표준이 MiniApp을 더 잘 지원하도록 하며, 사용자 에이전트의 혁신을 탐색하고 Web을 풍부하게 하기 위해, 우리는 W3C에 그룹을 구성하고 다음 작업을 포함하기를 희망합니다.

자세히는 다음 기술 작업을 추가로 연구해야 합니다.

참고: 현재 MiniApp APIs와 Web APIs 간의 추가 격차는 병행하여 분석될 것입니다.

9. 용어집

중국어 영어 정의
小程序 Mini Program 네이티브 앱 안에서 실행되는 MiniApp의 한 형식입니다.
快应用 Quick App Quick App alliances의 12개 휴대전화 제조사가 개발한 MiniApp 표준입니다.
渲染环境 rendering view Native view 또는 WebView입니다.
智能助理(负一屏) smart assistant 편의를 위해 서비스를 제공하는 스마트 어시스턴트로, 일반적으로 홈 화면의 왼쪽에 있습니다.
热更新 hot reload 기능을 수정하거나 업데이트할 때 재설치할 필요가 없습니다. MiniApps에서는 프레임워크의 일부가 JavaScript로 구현되어 있으므로 MiniApp runtime을 hot reload할 수 있습니다.

A. 격차 분석

MiniApps, W3C 사양 및 PWAs의 API 비교표를 참조하십시오.

B. 감사의 말

이 문서에 기여한 Guanyu Liu (360), He Du (Xiaomi), Hongguang Dong (Xiaomi), Xiaoqian Wu (W3C), Yi Shen (Baidu), Yefeng Xia (China Mobile)에게 깊이 감사드립니다.

C. 참고문헌

C.1 정보 제공 참고문헌

[APPMANIFEST]
Web Application Manifest. Marcos Caceres; Kenneth Christiansen; Matt Giuca; Aaron Gustafson; Daniel Murphy; Anssi Kostiainen. W3C. 2022년 2월 17일. W3C Working Draft. URL: https://www.w3.org/TR/appmanifest/
[MANIFEST-APP-INFO]
Web App Manifest - Application Information. Aaron Gustafson. W3C. 2021년 9월 30일. W3C Working Group Note. URL: https://www.w3.org/TR/manifest-app-info/
[MINIAPP-ADDRESSING]
MiniApp Addressing. Dan Zhou; Qian Liu; shuo wang; Tengyuan Zhang. W3C. 2022년 6월 27일. W3C Working Group Note. URL: https://www.w3.org/TR/miniapp-addressing/
[MINIAPP-LIFECYCLE]
MiniApp Lifecycle. Qing An; Haoyang Xu. W3C. 2022년 5월 28일. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-lifecycle/
[MINIAPP-MANIFEST]
MiniApp Manifest. Martin Alvarez-Espinar; Yongjing ZHANG. W3C. 2022년 5월 17일. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-manifest/
[MINIAPP-PACKAGING]
MiniApp Packaging. Martin Alvarez-Espinar; Qing An; Tengyuan Zhang; Yongjing ZHANG; Dan Zhou. W3C. 2022년 4월 28일. W3C Working Draft. URL: https://www.w3.org/TR/miniapp-packaging/
[MINIAPP-WIDGET-REQ]
MiniApp Widget Requirements. Chen Yinli; Canfeng Chen; Bingqing Zhou; Bin Guo. W3C. 2022년 4월 24일. W3C Working Group Note. URL: https://www.w3.org/TR/miniapp-widget-req/