
React Native 0.76 버전이 드디어 공개되었습니다! 이번 릴리스는 새로운 아키텍처(New Architecture)를 기본값으로 설정하며, React Native의 미래를 새롭게 정의하는 중요한 변화를 담고 있습니다. 이 글에서는 새로운 아키텍처의 주요 특징과 이를 통해 React Native가 어떻게 발전했는지, 그리고 개발자들이 이를 활용해 어떤 이점을 얻을 수 있는지 자세히 살펴보겠습니다.
새로운 아키텍처는 React Native의 핵심 시스템을 완전히 재설계한 것입니다. 여기에는 컴포넌트 렌더링 방식, JavaScript와 네이티브 간의 통신 방식, 스레드 간 작업 스케줄링 방식 등이 포함됩니다.
기존 아키텍처에서는 React Native가 네이티브 플랫폼과 비동기 브릿지(asynchronous bridge)를 통해 통신했습니다. 이 방식은 메인 스레드를 차단하지 않는 장점이 있었지만, 다음과 같은 문제점이 있었습니다:
이러한 문제를 해결하기 위해 새로운 아키텍처는 다음과 같은 4가지 주요 요소를 도입했습니다:
새로운 네이티브 모듈 시스템은 JavaScript와 네이티브 플랫폼 간의 통신 방식을 완전히 재구성했습니다. C++로 작성된 이 시스템은 다음과 같은 이점을 제공합니다:
예시 코드 비교
기존 아키텍처에서는 비동기 콜백을 사용해야 했습니다:// ❌ 비동기 콜백 nativeModule.getValue(value => { nativeModule.doSomething(value); });새로운 아키텍처에서는 동기적 호출이 가능합니다:
// ✅ 동기적 호출 const value = nativeModule.getValue(); nativeModule.doSomething(value);
인용:
"새로운 네이티브 모듈 덕분에
react-native-mmkv는 순수 C++ 네이티브 모듈로 전환되었고, 모든 플랫폼에서 동작할 수 있게 되었습니다. 코드젠(Codegen)을 통해 타입 안전성을 확보하면서 오랜NullPointerReference문제를 해결할 수 있었습니다."
— Marc Rousavy,react-native-mmkv제작자
새로운 렌더러는 UI 렌더링 방식을 완전히 재구성하여 다음과 같은 개선을 이루었습니다:
이 렌더러는 UI 계층 구조를 불변 트리(immutable tree)로 저장하여 스레드 간 안전성을 보장합니다. 이를 통해 React는 긴급 업데이트(예: 사용자 입력)를 우선 처리하고, 낮은 우선순위의 업데이트는 백그라운드에서 처리할 수 있습니다.
인용:
"Reanimated 4는 새로운 렌더러와 직접 통합되어 애니메이션과 레이아웃을 여러 스레드에서 관리할 수 있습니다. 이 설계 덕분에 플랫폼 간 문제를 줄이고 코드베이스를 간소화할 수 있었습니다."
— Krzysztof Magiera, Reanimated 제작자
새로운 아키텍처는 이벤트 루프(Event Loop)를 도입하여 JavaScript 스레드에서 작업을 예측 가능하게 처리합니다. 이는 React DOM과 React Native 간의 동작을 더욱 일관되게 만들어 "한 번 배우면 어디서나 작성할 수 있는" React의 철학을 강화합니다.
주요 이점:
MutationObserver, IntersectionObserver와 같은 브라우저 기능을 React Native에서도 사용할 수 있는 기반을 제공합니다.기존의 비동기 브릿지를 제거하고, JavaScript와 네이티브 간의 직접 통신을 구현했습니다. 이를 통해 다음과 같은 개선이 이루어졌습니다:
새로운 아키텍처는 React 18의 모든 기능을 완벽히 지원합니다. 주요 기능은 다음과 같습니다:
React 18의 Transitions는 긴급 업데이트와 비긴급 업데이트를 구분하여 UI를 더 부드럽게 전환할 수 있도록 합니다.
import { startTransition } from 'react'; // 긴급 업데이트 setCount(input); // 비긴급 업데이트 startTransition(() => { setNumberOfTiles(input); });
React 18의 자동 배칭은 여러 상태 업데이트를 묶어 중간 상태 렌더링을 줄이고 성능을 최적화합니다.
useLayoutEffect를 통해 레이아웃 정보를 동기적으로 읽고, UI를 같은 프레임에서 업데이트할 수 있습니다.
React Native 0.76으로 업그레이드하면 새로운 아키텍처가 기본적으로 활성화됩니다. 하지만 완전한 이점을 누리기 위해서는 앱과 라이브러리를 점진적으로 마이그레이션해야 합니다.
React Native의 새로운 아키텍처는 성능, 안정성, 개발자 경험을 크게 향상시키는 중요한 변화입니다. Meta, Expensify, Kraken 등 주요 기업들이 이미 이를 성공적으로 도입했으며, 커뮤니티와의 협력을 통해 점진적 마이그레이션을 지원하고 있습니다.
"React Native의 새로운 아키텍처는 단순한 업데이트가 아니라, 더 나은 앱 개발을 위한 새로운 시작점입니다."
지금 바로 React Native 0.76으로 업그레이드하고, 새로운 가능성을 탐험해보세요! 🚀