현재 앱 개발을 위해 사용하고 있는 리액트 네이티브의 개념과 원리에 대해서 찐하게 알아보았습니다.
Learn once, write anywhere.한 번 배우고, 어디서나 작성하세요.
React Native 공식문서 - React Native - Learn once, write anywhere
리액트 네이티브는 iOS와 안드로이드에서 동작하는 네이티브 모바일 앱을 만들기 위한 자바스크립트 프레임워크입니다. 실제로 페이스북, 에어비앤비, 토스 등은 이미 리액트 네이티브로 만든 앱을 사용자에게 제공하고 있습니다.
리액트 네이티브가 코르도바(Cordova)나 아이오닉(Ionic)과 같은 기존 크로스 플랫폼 앱 개발 방법과 다른 점은 바로 대상 플랫폼의 표준 렌더링 API를 사용한다는 점입니다. JS, HTML, CSS를 사용하여 모바일 앱을 만드는 기존 방법은 웹뷰(webview)를 이용하여 렌더링하여 성능이 떨어지고 네이티브 UI 요소를 어색하게 흉내내는 것에 만족해야 했습니다. 리액트 네이티브는 여러분이 작성한 마크업을 플랫폼에 상응하는 진짜 네이티브 엘리먼트로 전환합니다. 또한 메인 UI 스레드와 분리되어 실행되기에 앱의 역량을 줄이지 않고도 빠른 성능을 유지할 수 있습니다.
리액트 네이티브의 장점을 요약하면 다음과 같습니다.
그러나 리액트 네이티브는 다음의 단점도 가지고 있습니다.
결론적으로 리액트 네이티브는 기존 자바스크립트의 코드나 지식을 공유하여 빠르게 모바일 앱을 만들고 싶은 경우 유용합니다.
리액트 네이티브의 동작 원리는 리액트의 가상(virtual) DOM과 관련되어 있습니다. DOM 수정은 매우 값비싼 동작이기 때문에 리액트는 페이지의 변화를 바로 렌더링 하는 대신 메모리의 가상 DOM을 이용해 변화가 필요한 곳을 계산하고 최소한의 변경사항만 렌더링합니다. 리액트 네이티브는 같은 원리를 이용해 브라우저의 DOM이 아닌 오브젝티브-C API를 호출하여 iOS 컴포넌트를 렌더링하고, 자바 API를 호출하여 안드로이드 컴포넌트를 렌더링합니다. 이는 브릿지가 대상 플랫폼의 네이티브 UI 요소에 접근하는 인터페이스를 제공하기 때문에 가능합니다.
neoito.com - What is React Native?
그렇다면 실제로 리액트 네이티브는 어떤 파트로 구성되어 있는지 살펴보겠습니다.
어플리케이션은 다음 순서로 동작합니다.
import MessageQueue from 'react-native/Libraries/BatchedBridge/MessageQueue';
MessageQueue.spy(true);
리액트 네이티브는 다음의 다중 스레드 모델로 구성되어 있습니다.
지금까지 리액트 네이티브의 작동 원리에 대해서 알아보았습니다. 사실 위 내용은 2022년 New Architecture의 등장으로 조금 변화하게 됩니다. New Architecture의 가장 큰 차이점은 바로 브릿지 모듈을 없애고 JSI(JavaScript Interface)를 도입했다는 점입니다. 그렇다면 기존 방식이 어떤 문제를 가지고 있었기에 새로운 방식이 도입된 것일까요?
The New Architecture is Here... What Now? - Lorenzo Sciandra
일단 기존 방식에서 가장 큰 문제는 JSON을 통해 네이티브와 통신하는 브릿지 모듈입니다. 하나의 브릿지를 통해 통신했기 때문에 쉽게 병목현상이 발생하였고 JS 스레드와 네이티브 스레드가 서로의 존재를 모르는 상태로 JSON 데이터를 보내왔기 때문에 여러 문제가 발생하였습니다. 어떤 네이티브 모듈이 사용될지 몰라 처음에 모든 네이티브 모듈을 로드해야 하는 부분도 문제였습니다.
이러한 문제를 해결하기 위해 New Architecture에선 JSI(JavaScript Interface)를 도입하게 됩니다. JSI는 C++로 작성되어 JSON 없이 바로 네이티브 단계의 메소드를 invoke/call 할 수 있는 모듈입니다. JSI는 기존 브릿지 모듈에 비해 다음 장점을 가집니다.
lightweight
general-purpose
written in C++
위와 같이 New Architecture의 도입으로 리액트 네이티브가 가지고 있던 여러 문제가 개선된 것 같지만 RN 코어 메인테이너인 Lorenzo Sciandra에 따르면 아직 다음의 문제점이 존재합니다.
결론적으로 New Architecture는 기존 문제점들을 많이 해결하였지만, 아직 RN을 사용하는 써드파티 라이브러리들이 완벽하게 이를 지원하지 않기 때문에 당분간은 문제가 생길 수 있다는 점을 인지하면서 사용하면 좋을 것 같습니다.
지금까지 새로 추가된 New Architecture의 개념과 장단점에 대해서 알아보았습니다. 앞으로 시간이 더 지나면 기존 방식은 자연스럽게 모두 새로운 방식으로 대체될 것으로 예상됩니다. 하나의 언어로 여러 OS에서 작동하는 서비스를 만든다는 것은 충분히 매력적인 기술입니다. 언젠가는 리액트 네이티브를 대체할 새로운 대안이 등장할 수도 있지만 현재 개발자들이 고민하고 해결했던 방식에 대해 알아두는 것은 미래에도 분명히 도움이 될 것입니다.
참고:
https://www.reactnative.guide/3-react-native-internals/3.1-react-native-internals.html
https://www.youtube.com/watch?v=0MlT74erp60
https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=158501368
https://medium.com/coox-tech/deep-dive-into-react-natives-new-architecture-fb67ae615ccd
최근 메인 서비스 앱을 React Native 로 재작성하여 오픈했는데, 부랴부랴 기능만 만드느라 놓쳤던 부분들도 알게됐네요!
좋은 글 감사합니다 :)
React Native の概念と動作原則に関する Seoyong Lee の洞察力に富んだ記事は、効率的なクロスプラットフォーム開発に対するフレームワークの可能性を強調しています。 React Native の利点を活用しようとしている企業にとって、適切な開発パートナーを見つけることは非常に重要です。
HireMobileDevelopers は、クライアントを一流の React Native 開発者と結び付けます。リソース リンクはこちら https://www.hiremobiledevelopers.com/hire-react-native-developers
진짜 좋은 글이네요 감사함니다