React Native 릴리스

React Native 0.83 — React 19.2, 새로운 DevTools 기능, 호환성 깨짐 없음

원문: React Native 0.83 - React 19.2, New DevTools features, no breaking changes

2025년 12월 10일 · 약 10분 분량

출처: reactnative.dev/blog/2025/12/10/react-native-0.83

Alex Hunt
Alex Hunt
Software Engineer @ Meta
Riccardo Cipolleschi
Riccardo Cipolleschi
Software Engineer @ Meta
Gabriel Donadel Dall'Agnol
Gabriel Donadel Dall'Agnol
Software Engineer @ Expo
Alan Hughes
Alan Hughes
Software Engineer @ Expo
문서 범위 · 2026-10-02 확인

블로그 번역은 최초 발표 당시의 설명을 보존합니다. 본문의 “최신 버전”, 지원 상태, 출시 예정 안내도 발표 당시 기준입니다.

0.83.x 패치 내역을 별도로 정리했습니다. 확인한 가장 최근 정식 패치는 0.83.10입니다.

오늘 React Native 0.83을 릴리스하게 되어 기쁩니다!

이번 릴리스에는 React 19.2, React Native DevTools의 중요한 신기능들, 그리고 Web Performance API와 Intersection Observer API 지원(Canary)이 포함되어 있습니다. 또한 사용자에게 영향을 주는 호환성 깨짐(breaking change)이 하나도 없는 첫 React Native 릴리스이기도 합니다.

주요 변경 사항 (Highlights)

그 외

React 19.2

이번 릴리스에는 React 19.2가 포함되어, 새로운 <Activity>와 useEffectEvent API를 React Native에서 사용할 수 있게 되었습니다.

중요 · CVE-2025-55182

React Server Components의 심각한 보안 취약점 공지를 보신 분들이 있을 텐데, 릴리스 시점에 react-native@0.83.0은 react@19.2.0에 의존합니다.

React Native는 이 취약점의 직접적인 영향을 받지 않습니다. 영향을 받는 아래 패키지들에 의존하지 않기 때문입니다.

다만 위 패키지들이 함께 존재할 수 있는 모노레포에서 React Native를 사용 중이라면, 지금 바로 확인하고 업그레이드하세요.

다음 패치 릴리스에서 모든 React 의존성을 19.2.1로 올릴 예정입니다.

<Activity>

<Activity>는 앱을 "액티비티" 단위로 쪼개서 제어하고 우선순위를 매길 수 있게 해줍니다. 앱의 일부를 조건부 렌더링하던 방식의 대안으로 쓸 수 있으며, 현재 'visible'과 'hidden' 두 가지 모드를 지원합니다.

<Activity mode='hidden'>으로 숨긴 트리의 흥미로운 특징은 상태가 보존된다는 점입니다. 다시 보이게 되었을 때 이전 사용자 조작에서의 검색 상태나 선택 항목이 그대로 남아 있습니다.

React 19.1.1 (Activity 미사용)
Activity를 쓰지 않은 경우 상태가 초기화되는 데모
React 19.2.1 (Activity 사용)
Activity를 사용해 상태가 보존되는 데모

<Activity>에 대한 자세한 내용은 React 문서를 참고하세요.

useEffectEvent

useEffect의 흔한 사용 패턴 중 하나는 외부 시스템에서 발생한 일종의 "이벤트"를 앱 코드에 알리는 것입니다. 이 방식의 문제는, 그 이벤트 안에서 사용하는 값이 하나라도 바뀌면 이펙트 전체가 다시 실행된다는 점입니다.

이 문제를 피하려고 대부분은 lint 규칙을 끄고 의존성에서 해당 값을 빼버립니다. 하지만 그러면 나중에 이펙트를 수정할 때 린터가 의존성을 최신으로 유지하도록 도와줄 수 없어 버그로 이어질 수 있습니다.

useEffectEvent를 쓰면 이 로직에서 "이벤트"에 해당하는 부분을, 그것을 발생시키는 이펙트로부터 분리할 수 있습니다.

자세한 내용은 React 문서를 참고하세요.

새로운 DevTools 기능

0.83에서는 오래 기다려온 기능들과 사용성 개선을 React Native DevTools에 담았습니다.

Network 패널과 Performance 패널

네트워크 검사와 퍼포먼스 트레이싱, 이 두 가지 강력한 기능을 오늘부터 React Native DevTools에서 사용할 수 있습니다.

React Native DevTools의 Network 패널 목록
React Native DevTools의 Network 패널

네트워크 검사(Network inspection)는 이제 모든 React Native 앱에서 사용할 수 있으며, 앱이 보낸 네트워크 요청을 보고 이해할 수 있게 해줍니다. 기록된 요청에는 타이밍, 주고받은 헤더 같은 상세 메타데이터와 응답 미리보기가 제공됩니다. 그리고 처음으로 Initiator 탭에서 해당 네트워크 요청이 코드의 어느 지점에서 시작되었는지 확인할 수 있습니다.

💡 캡처되는 네트워크 이벤트 범위와 Expo 지원

어떤 네트워크 이벤트가 캡처되나요?
현재는 fetch(), XMLHttpRequest, <Image>를 통한 모든 네트워크 호출을 기록합니다. Expo Fetch 같은 커스텀 네트워킹 라이브러리 지원은 이후에 추가될 예정입니다.

Expo Network와의 차이
그래서 Expo를 사용하는 앱에서는 "Expo Network" 패널이 계속 보입니다. 이는 Expo 프레임워크의 별도 구현으로, 위에서 언급한 추가 요청 소스까지 기록하지만 기능은 조금 적습니다.

Expo Fetch와 서드파티 네트워킹 라이브러리를 새 네트워크 검사 파이프라인에 통합하기 위해 Expo와 함께 작업하고 있으며, 이후 릴리스에 반영될 예정입니다.

React Native DevTools의 퍼포먼스 트레이스
React Native DevTools의 Performance 패널

퍼포먼스 트레이싱(Performance tracing)은 앱 안에서 퍼포먼스 세션을 기록해, JavaScript 코드가 어떻게 실행되고 어떤 작업이 가장 오래 걸렸는지 파악할 수 있게 해줍니다. React Native에서는 JavaScript 실행, React Performance 트랙, 네트워크 이벤트, 그리고 직접 기록한 User Timing을 하나의 타임라인에 함께 보여줍니다.

0.83의 Web Performance API 지원과 합쳐지면, React Native 앱이 느려지는 원인을 세밀하게 들여다볼 수 있는 강력한 도구가 됩니다. Performance 패널을 꼭 한 번 써보고 일상적인 작업 흐름에 포함시켜 보시길 권합니다.

자세한 내용은 React Native DevTools 문서와 React Performance 트랙 문서에서 확인하세요.

새로운 데스크톱 앱

이전에는 React Native DevTools가 브라우저 창으로 실행되어 Chrome이나 Edge 설치가 필요했습니다. 이제 번들로 제공되는 새 데스크톱 앱으로 훨씬 나아진 경험을 제공합니다.

macOS Dock에 표시된 React Native DevTools 아이콘
macOS Dock의 React Native DevTools 아이콘

Intersection Observer (Canary)

웹 API를 React Native로 가져오는 작업의 일환으로, 0.83의 canary 릴리스에 IntersectionObserver 지원을 추가했습니다.

IntersectionObserver는 대상 엘리먼트와 그 조상 엘리먼트 사이의 레이아웃 교차(intersection)를 비동기로 관찰할 수 있게 해줍니다. 자세한 내용은 API 문서와 구현 문서를 참고하세요. RNTester에도 예제를 넣어두었습니다.

IntersectionObserver 데모 (원문의 동영상)

그 외 변경 사항

Web Performance API 정식화

0.82에서 소개한 대로, React Native는 웹의 Performance API 중 일부를 구현하고 있습니다. 이번에 정식(stable)으로 전환되었습니다.

이 API들로 앱의 다양한 성능 지표를 추적할 수 있고, React Native DevTools의 Performance 패널에서 확인하거나 런타임에 PerformanceObserver로 직접 받아볼 수 있습니다.

PerformanceObserver는 프로덕션 빌드에서도 동작하므로, 실제 사용자 환경의 성능 지표를 수집할 새로운 가능성이 열립니다.

실험 기능 — Hermes V1

Hermes 로고

Hermes V1은 Hermes의 다음 세대로, 컴파일러와 VM 개선을 통해 JavaScript 성능을 크게 끌어올립니다.

React Native 0.82에서 Hermes V1을 실험적 opt-in으로 공개했고, 0.83에서는 성능 개선이 더 들어갔습니다.

💡 Hermes V1 활성화 방법

참고: Hermes V1이 실험 단계인 동안에는 직접 써보려면 React Native를 소스에서 빌드해야 합니다.

  1. package.json의 해당 섹션을 수정해서 패키지 매니저가 Hermes V1 컴파일러의 실험 버전을 사용하도록 고정합니다. (아래 버전 표기 규칙은 Hermes V1 실험 단계에서만 쓰입니다.)

    package.json — yarn
    "resolutions": { "hermes-compiler": "250829098.0.4" }
    package.json — npm
    "overrides": { "hermes-compiler": "250829098.0.4" }
  2. Android에서는 android/gradle.properties에 다음을 추가해 Hermes V1을 켭니다.

    android/gradle.properties
    hermesV1Enabled=true

    그리고 android/settings.gradle을 수정해 소스에서 빌드하도록 설정합니다.

    android/settings.gradle
    includeBuild('../node_modules/react-native') {
        dependencySubstitution {
            substitute(module("com.facebook.react:react-android")).using(project(":packages:react-native:ReactAndroid"))
            substitute(module("com.facebook.react:react-native")).using(project(":packages:react-native:ReactAndroid"))
            substitute(project(":packages:react-native:ReactAndroid:hermes-engine")).using(module("com.facebook.hermes:hermes-android:250829098.0.1"))
        }
    }
  3. iOS에서는 RCT_HERMES_V1_ENABLED=1 환경 변수를 주고 pod를 설치합니다.

    RCT_HERMES_V1_ENABLED=1 bundle exec pod install

    Hermes V1은 React Native 사전 컴파일(precompiled) 빌드와 호환되지 않으므로, pod 설치 시 RCT_USE_PREBUILT_RNCORE 플래그를 쓰지 않도록 주의하세요.

  4. 앱이 Hermes V1으로 동작하는지 확인하려면 앱 안이나 DevTools 콘솔에서 아래 코드를 실행하세요. 1단계에서 지정한 버전(250829098.0.1)과 같은 값이 나와야 합니다.

    // Hermes V1이라면 "250829098.0.1"이 나옵니다
    HermesInternal.getRuntimeProperties()['OSS Release Version'];

실험 기능 — iOS에서 레거시 아키텍처 컴파일 제외

이번 릴리스에서는 코드베이스에서 레거시 아키텍처를 아예 빼고 컴파일할 수 있는 iOS용 플래그를 추가했습니다. 앱이 이미 새 아키텍처(New Architecture)로 넘어갔다면, 다음과 같이 pod를 설치해 레거시 아키텍처 코드를 제거해볼 수 있습니다.

RCT_REMOVE_LEGACY_ARCH=1 bundle exec pod install

빌드 시간과 앱 크기가 모두 줄어듭니다. 개선 폭은 사용 중인 서드파티 라이브러리 수에 따라 다른데, 의존성이 없는 새 앱으로 테스트했을 때 빌드 시간은 73.0초 → 58.2초, 앱 크기는 51.2MB → 48.2MB가 되었습니다.

참고

RCT_REMOVE_LEGACY_ARCH는 React Native 사전 컴파일 바이너리와 호환되지 않습니다. 사전 컴파일 바이너리를 쓰고 있다면 pod를 다시 설치하고 소스에서 빌드해야 합니다.

실험 기능 — iOS 사전 컴파일 바이너리 디버깅

이번 릴리스에서 사전 컴파일 바이너리에 포함된 React Native 코드를 디버깅할 수 있게 했습니다. 주로 라이브러리 메인테이너나, 네이티브 모듈·네이티브 컴포넌트를 개발할 때 유용합니다.

사전 컴파일 바이너리의 코드를 디버깅하려면 다음 단계를 따르세요.

# 프로젝트의 ios 폴더에서
bundle exec pod cache clean --all
bundle exec pod deintegrate
RCT_USE_RN_DEP=1 RCT_USE_PREBUILT_RNCORE=1
RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS=1 bundle exec pod install
open <your-project>.xcworkspace

핵심은 RCT_SYMBOLICATE_PREBUILT_FRAMEWORKS 플래그입니다. CocoaPods가 React Native dSYM 파일을 내려받아 올바른 폴더에 풀어놓도록 지시합니다.

이제 앱에 브레이크포인트를 걸고(예: AppDelegate.swift) Xcode에서 빌드·실행하면 됩니다. 앱이 멈추면 Xcode 콘솔에서 다음 LLDB 명령을 실행하세요.

# 시뮬레이터에서 실행 중인 경우
add-dsym <path-to-your-app>/ios/Pods/React-Core-prebuilt/React.xcframework/ios-arm64_x86_64-simulator/React.framework/dSYMs/React.framework.dSYM

# 실기기에서 실행 중인 경우
add-dsym <path-to-your-app>/ios/Pods/React-Core-prebuilt/React.xcframework/ios-arm64/React.framework/dSYMs/React.framework.dSYM

이제 React Native 코드 안으로 스텝 인해서 들어갈 수 있습니다.

호환성이 깨지는 변경

React Native 릴리스를 더 예측 가능하고 업그레이드하기 쉽게 만들기 위해 노력하고 있습니다. React Native 0.83은 사용자에게 영향을 주는 호환성 깨짐이 전혀 없는 첫 릴리스입니다.

React Native 0.82를 쓰고 있다면 앱 코드를 하나도 바꾸지 않고 0.83으로 업그레이드할 수 있습니다.

무엇을 호환성 깨짐으로 보는지는 이 문서에서 확인하세요.

Deprecation

이번 릴리스에는 Android 전용 deprecation 두 가지가 있습니다.

감사의 말

React Native 0.83에는 56명의 컨트리뷰터가 만든 594개 이상의 커밋이 담겨 있습니다. 모든 분들의 노고에 감사드립니다!

이번 릴리스에서 특히 큰 기여를 해주신 커뮤니티 멤버들께 특별히 감사를 전합니다.

0.83으로 업그레이드하기

기존 프로젝트에서는 React Native Upgrade Helper로 버전 간 코드 변경 사항을 확인하고, 함께 업그레이드 문서도 참고하세요.

새 프로젝트를 만들려면:

npx @react-native-community/cli@latest init MyProject --version latest

Expo를 사용한다면, React Native 0.83은 2026년 1월에 릴리스될 SDK 55에 포함됩니다.

지원 버전

참고

이제 0.83이 React Native의 최신 안정 버전이며, 0.80.x는 지원 종료(unsupported) 상태가 됩니다. 자세한 내용은 React Native 지원 정책을 참고하세요.

0.83.x 패치 릴리스

확인일: 2026-10-02 · 배포일: 한국 시간(UTC+9) · RC와 nightly는 제외

공식 GitHub 릴리스와 CHANGELOG의 변경 항목을 한국어로 정리했습니다. 기록이 짧거나 비어 있는 버전은 공식 태그 비교로 보충하고 그 근거를 표시했습니다. 각 항목은 해당 패치의 변경 사항입니다.

버전배포일주요 내용
0.83.102026-06-26iOS 바이너리 캐시, Yoga 레이아웃, DevTools 안정성 개선
0.83.92026-04-27실험적 MutationObserver 플래그와 내부 CI 변경
0.83.82026-04-24iOS React-featureflags 헤더 검색 경로 수정
0.83.72026-04-24실험적 iOS RedBox 2.0과 내부 빌드 변경
0.83.62026-04-17Hermes V1 심볼과 Metro 로딩 배너 수정
0.83.52026-04-14Xcode 26.4 빌드, Android 파일 URI, Hermes 예외 처리 수정
0.83.42026-03-07iOS 사전 컴파일 바이너리의 개발 지원 헤더 추가
0.83.32026-03-06Android 개발 서버 헤더와 모노레포 Gradle 설정 수정
0.83.22026-02-07Android 텍스트 잘림, Appearance, 에셋 경로 수정
0.83.12025-12-19Android FormData 업로드 오류 수정

0.83.10 · iOS 바이너리 캐시, Yoga 레이아웃, DevTools 안정성 개선

배포일: 2026-06-26

출처: 공식 릴리스 0.83.10 · 공식 CHANGELOG

0.83.9 · 실험적 MutationObserver 플래그와 내부 CI 변경

배포일: 2026-04-27

확인 시점의 공식 릴리스 본문과 main의 CHANGELOG에는 이 버전의 변경 설명이 없습니다. 아래 항목은 0.83.8과 0.83.9 사이의 공식 커밋과 파일 차이에서 확인했습니다.

출처: 공식 릴리스 0.83.9 · 직전 패치와 비교

0.83.8 · iOS React-featureflags 헤더 검색 경로 수정

배포일: 2026-04-24

출처: 공식 릴리스 0.83.8 · 공식 CHANGELOG

0.83.7 · 실험적 iOS RedBox 2.0과 내부 빌드 변경

배포일: 2026-04-24

공식 CHANGELOG는 이 버전을 ‘실험 기능 변경만 포함’으로 설명합니다. 아래 세부 내용은 0.83.6과 0.83.7의 공식 태그 비교에서 확인했습니다.

출처: 공식 릴리스 0.83.7 · 공식 CHANGELOG · 직전 패치와 비교

0.83.6 · Hermes V1 심볼과 Metro 로딩 배너 수정

배포일: 2026-04-17

출처: 공식 릴리스 0.83.6 · 공식 CHANGELOG

0.83.5 · Xcode 26.4 빌드, Android 파일 URI, Hermes 예외 처리 수정

배포일: 2026-04-14

출처: 공식 릴리스 0.83.5 · 공식 CHANGELOG

0.83.4 · iOS 사전 컴파일 바이너리의 개발 지원 헤더 추가

배포일: 2026-03-07

출처: 공식 릴리스 0.83.4 · 공식 CHANGELOG

0.83.3 · Android 개발 서버 헤더와 모노레포 Gradle 설정 수정

배포일: 2026-03-06

출처: 공식 릴리스 0.83.3 · 공식 CHANGELOG

0.83.2 · Android 텍스트 잘림, Appearance, 에셋 경로 수정

배포일: 2026-02-07

출처: 공식 릴리스 0.83.2 · 공식 CHANGELOG

0.83.1 · Android FormData 업로드 오류 수정

배포일: 2025-12-19

출처: 공식 릴리스 0.83.1 · 공식 CHANGELOG

태그: announcementrelease
본문 크기18
코드 크기16
const width = 100;