Chrome 앱 아키텍처

Chrome 앱은 사용자의 운영체제와 긴밀하게 통합됩니다. 브라우저 탭 외부에서 실행되고 오프라인 및 연결 불량 시나리오에서 견고하게 실행되고 일반적인 웹 탐색 환경에서 사용할 수 있는 것보다 훨씬 강력한 기능을 제공하도록 설계되었습니다. 앱 컨테이너, 프로그래밍, 보안 모델은 이러한 Chrome 앱 요구사항을 지원합니다.

앱 컨테이너 모델

앱 컨테이너는 Chrome 앱의 시각적 모양과 로드 동작을 설명합니다. Chrome 앱은 기존 웹 앱과 다르게 보입니다. 앱 컨테이너에는 기존 웹페이지 UI 컨트롤이 표시되지 않고 단순히 빈 직사각형 영역만 포함되어 있기 때문입니다. 이렇게 하면 앱이 시스템의 '네이티브' 앱과 혼합될 수 있고 사용자가 URL을 수동으로 변경하여 앱 로직을 '혼동'하지 않도록 할 수 있습니다.

Chrome 앱은 웹 앱과 다르게 로드됩니다. 둘 다 동일한 유형의 콘텐츠, 즉 CSS 및 자바스크립트가 포함된 HTML 문서를 로드합니다. 그러나 Chrome 앱은 브라우저 탭이 아닌 앱 컨테이너에 로드됩니다. 또한 앱 컨테이너는 로컬 소스에서 Chrome 앱의 기본 문서를 로드해야 합니다. 따라서 모든 Chrome 앱은 최소한 오프라인 상태일 때 최소한으로 작동하며 이는 더 엄격한 보안 조치를 시행할 수 있는 공간을 제공합니다.

앱 컨테이너 모델의 작동 방식

프로그래밍 모델

프로그래밍 모델은 Chrome 앱의 수명 주기 및 창 동작을 설명합니다. 네이티브 앱과 마찬가지로 이 프로그래밍 모델의 목표는 사용자와 사용자의 시스템에 앱 수명 주기를 완전히 제어할 수 있는 권한을 부여하는 것입니다. Chrome 앱 수명 주기는 브라우저 창 동작이나 네트워크 연결과 별개여야 합니다.

'이벤트 페이지'는 사용자 동작과 시스템 이벤트에 응답하여 Chrome 앱 수명 주기를 관리합니다. 이 페이지는 표시되지 않고 백그라운드에만 존재하며 시스템 런타임에 의해 자동으로 닫힐 수 있습니다. 창이 열리고 닫히는 방식과 앱이 시작되거나 종료되는 시점을 제어합니다. 하나의 Chrome 앱에는 '이벤트 페이지'가 하나만 있을 수 있습니다.

앱 수명 주기 한눈에 보기

프로그래밍 모델 사용 방법에 관한 자세한 안내는 앱 수명 주기 관리를 참고하세요. 시작하는 데 도움이 되는 Chrome 앱 수명 주기를 요약하면 다음과 같습니다.

단계요약
설치사용자가 앱을 설치하기로 선택하고 권한을 명시적으로 수락합니다.
시작이벤트 페이지가 로드되고 '시작' 이벤트가 실행되며 앱 페이지가 창에서 열립니다. 앱에 필요한 창을 만들고 창의 모양과 창이 이벤트 페이지 및 다른 창과 통신하는 방법을 만듭니다.
해지사용자는 언제든지 앱을 종료할 수 있으며 앱을 이전 상태로 빠르게 복원할 수 있습니다. 데이터 숨기기는 데이터 손실을 방지합니다.
업데이트앱은 언제든지 업데이트할 수 있지만 Chrome 앱이 실행 중인 코드는 시작/종료 주기 동안 변경할 수 없습니다.
제거사용자는 앱을 적극적으로 제거할 수 있습니다. 제거하면 실행되는 코드나 비공개 데이터가 남지 않습니다.

보안 모델

Chrome 앱 보안 모델은 사용자 정보가 안전한 방식으로 관리되도록 하여 사용자를 보호합니다. CSP 준수에는 콘텐츠 보안 정책을 준수하는 방법이 자세히 설명되어 있습니다. 이 정책은 위험한 스크립팅을 차단하여 교차 사이트 스크립팅 버그를 줄이고 중간자 공격으로부터 사용자를 보호합니다.

Chrome 앱 기본 페이지를 로컬로 로드하면 웹보다 더 엄격한 보안을 적용할 수 있습니다. Chrome 확장 프로그램과 마찬가지로 사용자는 설치 시 Chrome 앱을 신뢰한다는 데 명시적으로 동의해야 합니다. 즉, 앱에 데이터 액세스 및 사용 권한을 부여합니다. 앱에서 사용하는 각 API에는 자체 권한이 있습니다. Chrome 앱 보안 모델은 창별로 권한 분리를 설정하는 기능도 제공합니다. 이렇게 하면 위험한 API에 액세스할 수 있는 앱의 코드를 최소화하면서 계속 사용할 수 있습니다.

Chrome 앱은 Chrome 확장 프로그램 프로세스 격리를 재사용하며, 저장소와 외부 콘텐츠를 격리하여 이를 한 단계 더 발전시킵니다. 각 앱은 자체 비공개 저장소 영역을 보유하고 있으며 다른 앱의 저장소나 브라우저에서 사용하는 웹사이트의 개인 정보 (예: 쿠키)에 액세스할 수 없습니다. 모든 외부 프로세스는 앱에서 격리됩니다. iframe은 주변 페이지와 동일한 프로세스에서 실행되므로 다른 앱 페이지를 로드하는 데만 사용할 수 있습니다. object 태그를 사용하여 외부 콘텐츠를 삽입할 수 있습니다. 이 콘텐츠는 앱과 별도의 프로세스에서 실행됩니다.