> ## Documentation Index
> Fetch the complete documentation index at: https://supastack.dev/llms.txt
> Use this file to discover all available pages before exploring further.
> For the full documentation corpus in one file, fetch: https://supastack.dev/llms-full.txt

# Mobile 기술 스택

Expo 앱 내부의 기술과 각각의 역할.

## 시작하기 전에

Mobile 앱은 작은 네이티브 표면입니다: 아래의 모든 라이브러리는 이미 `apps/mobile/package.json`에 고정되어 있으므로 이 페이지의 어떤 것도 별도 설치가 필요하지 않습니다. 이 페이지는 각 부분의 역할을 설명하여 이후 가이드가 이해되도록 합니다.

백엔드는 Web 리포지토리에서 자체 스택 — Next.js, Postgres 및 공급자 어댑터 — 을 유지합니다. 앱은 그 어느 것도 내장하지 않고 `EXPO_PUBLIC_API_URL`을 통해 도달하므로 Mobile 전용 체크아웃이 작게 유지됩니다.


## Expo + React Native

Expo는 앱을 실행, 번들링, 빌드하는 도구 체인이고, React Native는 webview가 아닌 실제 네이티브 인터페이스 요소를 렌더링합니다. Expo Router는 파일 기반 내비게이션을 제공합니다: `apps/mobile/app/` 아래의 모든 파일이 화면이 되고, 로그인 스택은 `app/(app)/` 아래에 그룹화됩니다.

Expo Go는 전화기에서 공유 개발 미리 보기를 열고, development build는 자체 설치 가능한 앱입니다 — 구매 또는 생체 인식 잠금과 같은 네이티브 모듈이 실행되어야 할 때 필요합니다.

- [Expo](https://expo.dev)
- [Expo Router](https://docs.expo.dev/router/introduction/)
- [React Native](https://reactnative.dev)


## TypeScript

모든 앱 코드는 TypeScript이며 패키지에는 엄격한 타입 검사가 포함됩니다. 기기나 실행 중인 백엔드 없이 모든 파일을 검사할 수 있습니다.

- [TypeScript](https://www.typescriptlang.org)


## Better Auth Expo + 보안 스토리지

로그인은 시스템 브라우저를 통해 Better Auth Expo 클라이언트를 탑니다: 앱이 백엔드의 인증 페이지를 열고, 백엔드가 앱의 딥링크 스킴으로 돌아가며, 세션 토큰은 `expo-secure-store` — iOS의 Keychain과 Android의 Keystore — 에 보관되며 평문 스토리지나 번들 구성에는 절대 들어가지 않습니다.

같은 모듈이 패스키, `expo-local-authentication`을 통한 선택적 생체 인식 앱 잠금, 워크스페이스 범위의 오프라인 캐시를 지우는 로그아웃을 다룹니다.

- [Better Auth](https://better-auth.com)
- [Expo SecureStore](https://docs.expo.dev/versions/latest/sdk/securestore/)


## RevenueCat 구매

`react-native-purchases`는 StoreKit과 Play Billing을 키트의 자격 동기화에 연결합니다: 앱이 스토어 구매를 시작하고, 백엔드가 RevenueCat webhook을 통해 검증하고, 서버가 워크스페이스가 사용할 수 있는 것을 결정합니다.

첫 번째 미리 보기에서는 구매가 꺼져 있습니다(`EXPO_PUBLIC_MOBILE_PURCHASES_PROVIDER=off`). 실제 구매 및 복원 테스트에는 EAS 개발 빌드가 필요합니다. Expo Go는 네이티브 구매 모듈을 실행할 수 없기 때문입니다.

- [RevenueCat](https://www.revenuecat.com/docs)


## EAS Build + Submit

`eas.json`에는 세 개의 프로필이 있습니다: `development`는 iOS 시뮬레이터용 dev client를 빌드하고, `preview`는 테스터용 내부 Android APK를 빌드하고, `production`은 자동 증가된 버전과 Play 내부 트랙 제출 단계로 스토어 바이너리를 빌드합니다.

빌드는 Expo 클라우드에서 실행되므로 바이너리를 생성하는 데 로컬 Xcode나 Android Studio가 필요하지 않습니다 — 자신의 컴퓨터에서 시뮬레이터를 실행할 때만 필요합니다.

- [EAS Build](https://docs.expo.dev/eas/)


## 공유 패키지

`@supastack/ui-native`는 크로스 플랫폼 뷰 모델을 담당합니다 — `createEntitlementCard`는 서버 자격 상태를 하나의 카드 계약으로 변환합니다 — 그리고 `@supastack/design-tokens`는 테마 값을 담당합니다. Mobile 체크아웃에는 이 두 공유 패키지만 포함되며, 서버 패키지는 Web 백엔드와 함께 있습니다.


## 검증 도구

결정론적 Vitest 스위트는 세션 스토리지, 딥링크, 채팅 스트리밍 및 취소, 자격, 구매, 오프라인 캐시, 알림 라우팅을 다룹니다 — 기기 없이 컴퓨터에서 실행됩니다. 앱 잠금, 푸시 전달, 스토어 구매와 같은 네이티브 전용 동작은 대신 EAS 개발 빌드에서 검증됩니다.

```
corepack pnpm --filter @supastack/mobile test
corepack pnpm --filter @supastack/mobile typecheck
```


## 다음

[모바일 앱 실행](https://supastack.dev/ko/docs/mobile/local-setup.md)
