미니 프로그램 개요
미니 프로그램은 AISCouncil 플랫폼 내에서 직접 실행되는 샌드박스 웹 앱입니다. 기기 동기화 도구부터 시각적 페이지 빌더까지 커스텀 기능으로 플랫폼을 확장하며, 모두 안전하고 권한이 제어되는 환경에서 실행됩니다.
미니 프로그램이란?
미니 프로그램은 플랫폼 내의 샌드박스 iframe에서 실행되는 표준 HTML/CSS/JS 웹 앱입니다. 별도의 웹사이트로 이동하는 대신, 사용자는 사이드바의 앱 섹션에서 미니 프로그램을 실행합니다. 앱이 채팅 영역을 대체하며 window.ais SDK를 통해 플랫폼 API에 접근할 수 있습니다.
미니 프로그램은 다음을 할 수 있습니다:
- 채팅 메시지 읽기 및 보내기 - AI 모델과 상호작용
- 로컬에 데이터 저장 - 앱별 격리된 저장소 사용
- 봇 설정 접근 - 활성 모델 확인
- 알림 및 대화상자 표시 - 플랫폼 UI 통해
- 사용자 정보 읽기 - 개인화를 위해
- 훅 등록 - 플랫폼 동작 확장
작동 방식
+---------------------------+
| AISCouncil |
| (호스트 페이지) |
| |
| +---------------------+ |
| | 샌드박스 iframe | |
| | (null origin) | |
| | | |
| | window.ais SDK | |
| | | | |
| +---|------------------+ |
| | postMessage |
| v |
| 메시지 브리지 |
| (권한 확인) |
| (메서드 디스패치) |
+---------------------------+
-
SDK 주입 -- 미니 프로그램이 실행되면 플랫폼은 샌드박스 iframe을 생성하고 앱 코드 이전에
window.aisSDK(~2 KB)를<script>프리앰블로 주입합니다. -
postMessage 브리지 -- 모든 SDK 호출(
ais.storage.get(),ais.chat.send()등)은postMessage를 통해 호스트 페이지로 전송됩니다. 호스트는 호출 앱의 권한을 검증하고 적절한 플랫폼 모듈로 요청을 디스패치합니다. -
응답 -- 결과는
postMessage를 통해 iframe으로 다시 전송되며, SDK가 해당 Promise를 해결합니다.
보안 모델
미니 프로그램은 엄격한 보안 샌드박스에서 실행됩니다:
| 보호 기능 | 방식 |
|---|---|
| Null origin | sandbox="allow-scripts allow-forms" -- allow-same-origin 없음, iframe이 null origin을 가짐 |
| 부모 DOM 접근 불가 | 호스트 페이지의 DOM, localStorage, 쿠키를 읽거나 수정할 수 없음 |
| 호스트 origin으로 네트워크 접근 불가 | aiscouncil.net으로 동일 origin 요청을 할 수 없음 |
| 권한 게이팅 API | 저장소 외 모든 SDK 메서드는 사용자의 명시적 권한 승인 필요 |
| 앱별 저장소 격리 | 저장소 키에 mp:{app-name}: 접두사 추가 -- 앱이 서로의 데이터를 읽을 수 없음 |
| 콘텐츠 주소 캐싱 | 진입 HTML은 설치 시점에 가져와 캐시되며, 실행 시점에 네트워크에서 로드되지 않음 |
미니 프로그램은 여전히 외부 origin(자체 CDN, 타사 API 등)으로 네트워크 요청을 할 수 있습니다. allow-scripts가 fetch()와 XMLHttpRequest를 허용하기 때문입니다. network:fetch 권한은 향후 플랫폼을 통한 프록시 요청을 위한 것이며, 아웃바운드 네트워크 접근을 제한하기 위한 것이 아닙니다.
권한 대화상자
사용자가 미니 프로그램을 설치할 때 권한 대화상자가 앱 이름, 설명, 요청하는 권한 목록을 표시합니다. 설치가 진행되려면 사용자가 승인해야 합니다. storage만 요청하는 앱(항상 허용됨)도 투명성을 위해 대화상자를 표시합니다.
다른 플랫폼과의 비교
| 기능 | aiscouncil 미니 프로그램 | WeChat 미니 프로그램 | Chrome 확장 | PWA |
|---|---|---|---|---|
| 런타임 | 샌드박스 iframe | 커스텀 WebView | 격리된 월드 + 서비스 워커 | 전체 브라우저 탭 |
| 최대 크기 | 5 MB (HTML) / 50 MB (번들) | 2-20 MB | 하드 제한 없음 | 제한 없음 |
| 검토 필요 | 아니오 (직접 설치) | 예 (필수) | 예 (Chrome 웹 스토어) | 아니오 |
| 오프라인 지원 | 예 (설치 시 캐시) | 예 | 예 | 예 (서비스 워커) |
| 플랫폼 API | window.ais SDK | wx API | chrome API | 웹 API만 |
| 보안 모델 | Null-origin iframe | 커스텀 샌드박스 | 콘텐츠 보안 정책 | 동일 origin |
| 배포 | URL, 파일 업로드, 레지스트리 | WeChat 스토어만 | Chrome 웹 스토어 | URL만 |
앱 찾기 및 설치
앱 스토어에서
- 왼쪽 사이드바의 앱 아이콘 클릭 (또는 모바일에서 헤더의 앱 그리드 아이콘)
- 앱 패널 하단의 앱 스토어 섹션 탐색
- 원하는 앱 카드에서 설치 클릭
- 대화상자에서 권한을 검토하고 허용 클릭
URL로 (사이드로딩)
- 앱 패널에서 사이드로드 섹션 찾기
- 매니페스트 URL을 텍스트 필드에 붙여넣기
- 설치 클릭
- 권한을 검토하고 승인
파일 업로드로
- 앱 패널에서 앱 업로드 클릭
.html파일(단일 파일 앱) 또는.ais번들(ZIP 아카이브) 선택- 권한을 검토하고 승인
자세한 내용은 앱 사이드로딩을 참조하세요.
앱 실행 및 종료
실행: 설치된 앱 카드에서 열기 버튼을 클릭합니다. 앱이 채팅 영역을 대체하고 메인 콘텐츠 패널을 차지합니다.
종료: 앱은 ais.close()를 호출하여 스스로 종료할 수 있으며, 사용자는 앱 제목 표시줄의 X 버튼을 클릭하여 채팅 화면으로 돌아갈 수 있습니다.
앱이 종료되면:
- iframe이 제거되고 메시지 핸들러가 제거됨
- 채팅 영역이 복원됨
- 앱의 저장되지 않은 상태는 손실됨 (앱은 데이터 유지를 위해
ais.storage를 사용해야 함)
기본 제공 앱
플랫폼은 두 개의 기본 제공 미니 프로그램과 함께 제공됩니다:
기기 동기화
프로필, API 키, 설정을 기기 간에 동기화합니다. 세 가지 전송 방법을 지원합니다:
- LAN 동기화 -- 동일한 네트워크의 기기 간 직접 연결
- QR 코드 -- 코드를 스캔하여 기기 페어링
- 인터넷 릴레이 -- 다른 네트워크의 기기를 위해 API를 통한 WebRTC 시그널링
권한: storage, config:read, auth:read, ui:toast, secrets:sync
앱 빌더
AI 콘텐츠 생성으로 시각적으로 웹 페이지를 빌드합니다. 템플릿을 선택하고, 활성 AI 모델을 사용하여 섹션을 편집하고, URL 또는 HTML 파일로 내보냅니다. 커스텀 슬러그로 bcz.co에 직접 게시합니다.
권한: storage, chat:read, chat:write, ui:toast, auth:read, pages:publish
다음 단계
- SDK 참조 --
window.ais에 대한 완전한 API 문서 - 튜토리얼: 첫 번째 앱 만들기 -- 미니 프로그램 생성 단계별 가이드
- 매니페스트 참조 --
manifest.json에 대한 스키마 문서 - 앱 사이드로딩 -- URL, 파일, 번들에서 앱 설치
- 레지스트리에 게시 -- 커뮤니티에 앱 배포