# 외부 앱·서비스 수용 기준

> Fricle에 외부 서비스·앱을 받아들일 때 "HTML/Sandbox 래퍼로 충분한가" vs "새 앱·전용 어댑터가 필요한가"를 판단하기 위한 기준 표.
> 외부 서비스 임베드 / 샌드박스 앱 / 네이티브 앱의 경계 결정 근거.

---

## 이 문서가 다루는 것

외부 서비스(예: Canva, Figma, 임베드 가능한 웹 서비스)나 3rd-party 앱을 Fricle 워크스페이스에 얹을 때, **어느 수준의 구현이 필요한가**를 미리 판단하기 위한 표.

두 축으로 구분:
- **HTML/Sandbox 래퍼로 가능** — 샌드박스(iframe + AppKit 창구) 안에서 HTML·JS로 구현 가능
- **새 앱/전용 어댑터 필요** — 네이티브 통합 수준, 전용 코드 필요

---

## 판단 기준 표

| 구분 | HTML/Sandbox 래퍼로 가능 | 새 앱/전용 어댑터 필요 |
|---|---|---|
| 캔버스 배치 | 가능 — 캔버스 위 앱 오브젝트처럼 올릴 수 있음 | 불필요 |
| UI/화면 표시 | 가능 — HTML/CSS/JS로 인터페이스 구성 | 불필요 |
| 외부 서비스 화면 감싸기 | 가능 — 임베드 허용 시 래퍼 형태로 배치 | 임베드 막히면 불가 |
| LiveDoc 연결 | 가능 — 문서 열기, 값 읽기/쓰기, 변경 구독 | 불필요 |
| 간단한 협업 UI | 가능 — 메모·투두·폼·뷰어·대시보드류 | 불필요 |
| 상태 저장/복원 | 가능 — 앱 내부 상태를 LiveDoc에 붙이면 됨 | 불필요 |
| 외부 서비스 "보기/띄우기" | 가능 | 불필요 |
| 외부 서비스 "우리 UX로 살짝 감싸기" | 가능 | 경우에 따라 필요 |
| Canva/Figma/FigJam 파일을 우리 데이터로 변환 | 어려움 | 필요 |
| 외부 편집 상태를 우리 LiveDoc과 깊게 동기화 | 어려움 | 필요 |
| 권한·라이선스·워크스페이스 규칙에 맞춘 정교한 제어 | 제한적 | 필요 |
| Fricle 네이티브 앱처럼 깊은 통합 | 어려움 | 필요 |
| 앱 간 복잡한 데이터 전달/연결 | 현재 구조상 제한적 | 필요 |
| 그냥 보여주는 수준인가 | 적합 | 과함 |
| 제품 일부처럼 흡수하는 수준인가 | 한계 | 적합 |

---

## 판단 원칙 (표에서 도출)

1. **"보여주기 + 읽기/쓰기 기본" 수준 → 래퍼로 충분**
   임베드 + LiveDoc 기본 연결만 있으면 가능한 케이스.

2. **"데이터 변환 + 깊은 동기화" 필요 → 네이티브 앱**
   외부 포맷(Figma · Canva 파일 등)을 Fricle 데이터로 바꾸거나, 외부 편집 내용을 LiveDoc과 실시간 양방향 동기화하려면 전용 어댑터가 필요.

3. **"권한·라이선스 정교 제어" → 네이티브 앱**
   워크스페이스 규칙·플랜·역할에 따라 기능을 세밀하게 켜고 끄려면 샌드박스 경계 밖의 권한 연동이 필요.

4. **"앱 간 복잡한 연결" → 네이티브 앱**
   여러 앱이 서로 데이터를 주고받으며 체인 형태로 동작해야 할 때는 현재 샌드박스 구조로는 한계.

5. **"제품 일부처럼 느껴지길 원할 때 → 네이티브 앱**
   UX·반응성·단축키·메뉴 통합 수준이 Fricle 기본 앱과 같아야 한다면 래퍼로는 한계.

---

## 관련 결정·문서

- **[03-APP §4 앱 간 상호작용](./03-app/00-APP.md)** — 앱 사이 데이터 교환 범위. 래퍼 앱이 어느 선까지 참여 가능한지와 연결.
- **pipeline/02-APP_RUNTIME.md** — 앱 마운트 흐름. 래퍼 앱도 동일 파이프라인에서 실행됨.
- **pipeline/03-LIVEDOC_SYNC.md** — LiveDoc 연결 규칙. 래퍼 앱이 LiveDoc을 쓰는 표준 경로.
- **pipeline/04-PERMISSION_LICENSE.md** — 권한·라이선스 판정 3층. "정교 제어" 케이스가 여기서 결정됨.
- **pipeline/05-STORAGE_BILLING.md** — 워크스페이스 AppData / Personal Drive 접근. 래퍼 앱의 저장소 권한 경계.
- **[archive/analysis/04-APPKIT.md](../archive/analysis/04-APPKIT.md)** — "외부 앱 보조 도구" 창구 + "메뉴·드래그·사용자" 창구. 래퍼 앱이 실제로 쓰는 API 프레임.
- **[01-IDENTITY §8 커스텀 마켓플레이스 방향](./01-identity/00-IDENTITY.md)** — 외부 앱 수용 정체성 결정 시 이 표를 출발점으로.

---

## 남은 결정 사항

1. **외부 임베드 허용 정책** — 화이트리스트 / 블랙리스트 / 워크스페이스 관리자 지정 중 무엇?
2. **샌드박스 래퍼 앱의 공식 SDK 범위** — AppKit 11 창구 중 어디까지 열리는가 (특히 사용자 정보·드래그·메뉴)
3. **네이티브 앱 승격 기준** — 처음엔 래퍼로 시작해 수요가 검증되면 네이티브 전환? 전환 규약?
4. **외부 파일 임포트 파이프라인** — Figma·Canva 등 파일 → Fricle 데이터 변환 시 Personal Drive 경유할지 Workspace AppData 경유할지
5. **권한 판정과 래퍼 SDK 경계** — pipeline/04 판정 결과가 AppKit 티켓 권한으로 변환되는 규칙

---

## 메모

- 이 문서는 **판단 기준 시작점**. 실제 결정이 쌓이면 IDENTITY §8 신설 또는 pipeline/06 승격 검토.
- 래퍼 구현 사례가 쌓이면 "구체 제약 사항" 섹션을 덧붙일 것 (예: iframe CSP 제한으로 못 하는 것).
