Expo native 앱 (apps/native-app)
apps/native-app은 얼마집의 Expo + React Native 앱입니다. 모노레포의 공유 패키지(@howmuchhome-web/*)를 그대로 재사용하며, 아직 native로 옮기지 않은 화면은 apps/app(Next.js)을 WebView로 로드해 브릿지로 이어 붙입니다. (v1 웹뷰 앱에서의 전환은 사실상 마무리 단계이며, 이 문서군은 현재 native 앱의 설계·컨벤션 레퍼런스입니다.)
빌드/환경 상세는 레포 내 문서도 참고:
apps/native-app/README.md— 스택·환경(APP_ENV)·빌드·디렉토리 구조apps/native-app/docs/*— v1→v2 전환기의 목표·결정·브릿지 명세(히스토리 기록)
스택 (요약)
| 항목 | 선택 |
|---|---|
| Expo SDK | 56 |
| React Native / React | 0.85.3 / 19.2.3 |
| 라우팅 | expo-router (파일 기반, src/app/) — 네비게이션 |
| New Architecture | 활성 (SDK 56 기본) |
| 빌드 | CNG (Continuous Native Generation) — ios/·android/ 미커밋 — 빌드·배포 |
| 스타일링 | NativeWind v5 (Tailwind v4) — 크로스플랫폼 UI |
| OTA | self-hosted Expo Updates — OTA·버전 관리 |
APP_ENV(local/development/qa/production/canary)가 단일 진실 공급원으로, app.config.ts가 번들 ID·앱 이름·firebase·OTA 채널 등을 분기합니다. → 빌드·배포
디렉토리 (apps/native-app/src/)
| 경로 | 내용 |
|---|---|
app/ | expo-router 화면. index.tsx=진입 게이팅 라우터(useEntryGating→<Redirect>), _layout.tsx=provider 스택, (tabs)/, webview/ 등 |
lib/navigation/ | routes.ts 라우트 레지스트리(하드코딩 push 금지) |
components/webview/ | HowmuchhomeWebView 등 웹뷰 브릿지 |
api/ | 공유 @howmuchhome-web/api fetcher 주입·queryClient |
lib/ | push·cookies·딥링크 라우팅·datadog·sentry·업로드 |
store/ | 딥링크 intent 등 클라이언트 상태 |
shims/ | web/node 전용 모듈의 RN 어댑터/no-op shim |
plugins/ (앱 루트) | 네이티브 설정 주입 config plugins |
공유 패키지 재사용
native는 모노레포의 공유 패키지를 그대로 씁니다. web 전용 전제(RSC/브라우저/DOM)만 native용으로 갈아끼웁니다.
@howmuchhome-web/api:configureApiFetcher로 native 쿠키/호스트를 주입해 web과 동일한 API 정의·react-query 훅 사용. → 데이터·상태@howmuchhome-web/ui/native: 공유 UI의 native 구현(.native.tsx/.shared.ts). → 크로스플랫폼 UI@howmuchhome-web/funnel/native: 다단계 플로우의 native 구현(memory 라우터 기반). → 데이터·상태@howmuchhome-web/native-app-shared: native가 소유하되 서버(apps/api)도 참조하는 중립 계약(예: OTAUpdatePolicy). → 패키지- web/node 전용 transitive 의존(crypto, datadog 브라우저 SDK,
@sentry/nextjs)은metro.config.jsresolver로 RN 호환 처리. → Metro·의존성
문서 지도
시작하기 · 규칙
- 구현 컨벤션 (규칙 체크리스트) — native 화면·기능 구현 시 반드시 지킬 규칙. 먼저 읽으세요.
- 크로스플랫폼 UI · 스타일링 —
packages/uinative 컴포넌트, NativeWind v5 함정, 아이콘
아키텍처
- 네비게이션 — expo-router,
routes레지스트리, 진입 게이팅, 딥링크·intent, 웹뷰 브릿지 - 데이터·상태 — react-query 영속화(MMKV)·Suspense, provider 스택, Funnel native
- 푸시 알림 — FCM/notifee/Airbridge 수신·표시·탭 라우팅
- 로깅·모니터링 — Datadog mobile 어댑터, Sentry RN, RUM
- Metro·의존성 — resolver shim, 아이콘 babel 치환, patch-package
빌드 · 배포 · 운영
- 빌드·배포 — config plugins,
app.config.ts, 릴리즈 제어판, fastlane, 환경 - OTA·버전 관리 — self-hosted OTA, runtimeVersion, fingerprint 가드,
IS_PRERELEASE,updatePolicy
테스트
- E2E (Maestro + MSW) — 새 native 플로우 추가 시 E2E 작성
Last updated on