본문으로 바로가기
리옵트 핸드북
리옵트 핸드북
Expo 엔터프라이즈 프로덕션

New Architecture

SDK 56 브레이킹 체인지 총정리New Architecture 딥다이브React 19.2 동시성 패턴

네이티브 확장

Ch4. Expo UI — SwiftUI·Compose 선언형 네이티브Ch5. expo-widgets 홈 화면 위젯Expo Modules API v2 네이티브 확장

빌드·배포

EAS Build 고급 파이프라인EAS Update OTA 배포 전략보안·코드 서명·컴플라이언스

운영·품질

성능 모니터링·프로파일링테스트 전략 — E2E·네이티브·비주얼엔터프라이즈 앱 배포·MDM 통합

부록

검증 리포트업데이트 내역
핸드북›Expo 엔터프라이즈 프로덕션›성능 모니터링·프로파일링
한국어English

성능 모니터링·프로파일링

EAS Observe Open Beta로 cold/warm launch·TTI·TTR·bundle load를 수집하고, Hermes V1·JSI 경계를 실기기로 검증하며 P95 기준 rollout gate를 두는 프로덕션 성능 운영 체계.

핵심 요약

  • EAS Observe는 Open Beta 상태의 Expo 공식 프로덕션 모니터링으로 Android·iOS production build에서 cold/warm launch, TTI, TTR, bundle load time을 실사용자 기준으로 수집합니다.
  • ObserveRoot.wrap과 useObserve().markInteractive()로 계측하며, markInteractive는 첫 호출만 기록되므로 딥링크·로그인·온보딩 등 여러 진입점의 ready 지점에 둡니다.
  • release 비교는 OTA group·build ID별 P50/P75/P95로 보고, rollout gate는 10% 단계에서 TTI P95가 10% 이상 악화하면 중단합니다.
  • Hermes V1이 기본 엔진이므로 worklets·Reanimated·MMKV·Skia 같은 JSI 경계는 실기기에서 검증하고, OTA bytecode diff payload size와 bundle load를 함께 관측합니다.
  • 도구는 React Native DevTools(개발), Expo Atlas(번들 분석), EAS Observe(production), Sentry/BugSnag(crash)로 역할을 나누고 custom event에는 PII를 넣지 않습니다.

EAS Observe (Open Beta)

EAS Observe는 Expo 공식 프로덕션 성능 모니터링 서비스입니다. 2026년 5월 기준 Open Beta이며, Android와 iOS production build에서 실제 사용자 startup metric을 수집합니다.

추적 지표

지표설명
Cold Launch앱 최초 시작 시간
Warm Launch백그라운드 복귀 시간
TTI (Time to Interactive)사용자 인터랙션 가능 시점
TTR (Time to First Render)첫 화면 렌더링 완료 시점
Bundle Load TimeJS 번들 로드 소요 시간

SDK 56 설치 패턴

import { Stack } from 'expo-router';
import { ObserveRoot, useObserve } from 'expo-observe';
import * as SplashScreen from 'expo-splash-screen';
import { useEffect, useState } from 'react';

SplashScreen.preventAutoHideAsync();

function RootLayout() {
  const [ready, setReady] = useState(false);
  const { markInteractive } = useObserve();

  useEffect(() => {
    bootstrap().finally(() => setReady(true));
  }, []);

  useEffect(() => {
    if (ready) {
      SplashScreen.hide();
      markInteractive();
    }
  }, [ready, markInteractive]);

  return ready ? <Stack /> : null;
}

export default ObserveRoot.wrap(RootLayout);

markInteractive()는 여러 entry screen에서 불러도 첫 호출만 기록됩니다. 딥링크, 로그인, 온보딩처럼 초기 진입점이 여러 개라면 각 ready 지점마다 호출을 넣습니다.

운영 지표 조회

eas observe:versions
eas observe:metrics-summary --platform ios
eas observe:metrics --limit 50
eas observe:events
사용처권장 기준
Release comparisonOTA group·build ID별 P50/P75/P95 비교
Session investigation저사양 기기·특정 OS·특정 update group의 outlier 확인
Rollout gate10% rollout에서 TTI P95 10% 이상 악화 시 중단
개인정보anonymous install ID 기준. 사용자 식별자나 PII를 custom event에 넣지 않음

Hermes V1 성능 개선

SDK 56은 React Native 0.85 기반으로 Hermes V1을 기본 JS 엔진으로 사용합니다.

  • startup과 runtime path가 빨라지지만 체감 효과는 앱 구조와 native module 그래프에 따라 달라집니다.
  • react-native-worklets, Reanimated, MMKV, Skia 같은 JSI 경계는 실제 디바이스에서 검증합니다.
  • EAS Update bytecode diff가 기본이므로 OTA payload size와 bundle load time을 함께 관측합니다.

개발·번들 분석 도구

도구역할
React Native DevTools개발 중 JS/runtime debugging
Expo Atlas번들 구성과 size 분석
EAS Observeproduction startup metric
Sentry/BugSnagcrash reporting. EAS Observe의 crash tracking은 아직 별도 도구 병행 권장

JS 스레드 프레임 드롭율

성능 예산의 기준선을 잡으려면 프레임 드롭율부터 계산합니다.

드롭율(%)=전체 프레임−정상 프레임(≥ 60 fps)전체 프레임×100\text{드롭율(\%)} = \frac{\text{전체 프레임} - \text{정상 프레임(≥ 60 fps)}}{\text{전체 프레임}} \times 100드롭율(%)=전체 프레임전체 프레임−정상 프레임(≥ 60 fps)​×100

번들 다운로드 시간

번들 크기 최적화 목표치를 네트워크 속도 기준으로 산정합니다.

다운로드 시간(초)=번들 크기(MB)×8네트워크 속도(Mbps)\text{다운로드 시간(초)} = \frac{\text{번들 크기(MB)} \times 8}{\text{네트워크 속도(Mbps)}}다운로드 시간(초)=네트워크 속도(Mbps)번들 크기(MB)×8​

관련 문서

테스트 전략 — E2E·네이티브·비주얼

Maestro·Detox E2E, 네이티브 모듈 유닛 테스트, 비주얼 리그레션

New Architecture 딥다이브

JSI·Fabric·TurboModules 내부 구조와 성능 최적화 전략

보안·코드 서명·컴플라이언스

Store signing·OTA code signing·secrets·runtime config 네 경계로 본 Expo 보안. expo-updates codesigning, EAS 변수 visibility, App Attest·Play Integrity, 릴리스 승인 체크리스트.

테스트 전략 — E2E·네이티브·비주얼

Maestro·Detox E2E, 네이티브 모듈 유닛 테스트, 비주얼 리그레션

On this page

EAS Observe (Open Beta)추적 지표SDK 56 설치 패턴운영 지표 조회Hermes V1 성능 개선개발·번들 분석 도구JS 스레드 프레임 드롭율번들 다운로드 시간