React Native는 Facebook에서 만든 오픈소스 모바일 애플리케이션 프레임워크로 Javascript 하나의 프로그래밍 언어로 IOS와 Android 모바일 앱을 동시에 개발할 수 있는 크로스 플랫폼 프레임워크다.
일반적인 애플리케이션 개발은 Android의 경우 Kotlin 또는 Java, 그래고 iOS의 경우에는 Objective-C와 Swift를 사용하여 개발한다.
그러므로 애플리케이션을 각 OS에 맞게 개발을 위해서는 우선 각 개발언어를 알아야하고 각 OS를 이해하며 각각의 애플리케이션을 개발해야한다.
물론 장단점이 존재하겠지만 React Native는 하나의 언어와 애플리케이션으로 두 플랫폼에서 모두 서비스할 수 있고, 심지어 Front End 개발자라면 익숙할 Javascript언어와 라이브러리를 활용하여 개발할 수 있다는 큰 장점이 있다.
React Native는 웹 브라우저로 부터 독립적으로 실행되는 네이티브 브릿지 (Native Bridge)를 통해 네이티브 스레드(Native Thread)와 통신하면서 웹앱과 다르게 성능을 최적화 시킨다.
이와 같은 방식을 사용하는 애플리케이션을 하이브리드 앱(Hybrid App)이라고 하며 Xamarin, NativeScript, Flutter 등이 있다.
React Native는 React에서 파생된 모바일 앱 개발 프레임워크로 javascript를 사용해 개발하면 각 플랫폼에 맞게 네이티브 브릿지를 통해 네이티브 스레드를 연결시켜 동작한다. 기존에 React 개발 방식에 익숙하다면 진입장벽이 매우 낮다. React에 익숙하지 않더라도 웹개발자라면 익숙할 javascript를 사용하므로 러닝커브가 비교적 매우 낮다.
React와 마찬가지로 React Native는 컴포넌트를 개발하여 조립하는 방식으로 코드의 재사용성이 높다. 여기에 기존에 React로 개발한 컴포넌트가 있다면 해당 컴포넌트를 그대로 재사용할 수 있기 때문에 생산성이 매우 높아질 수 있다.
하나의 애플리케이션이 네이티브 브릿지를 통해 각 플랫폼에 맞게 변환되므로 각각의 플랫폼의 네이티브 앱을 개발할 때보다 비용이 두배로 저렴하다. 이는 개발단계 뿐 아니라 유지보수 단계에서도 한번의 수정으로 두 플랫폼에 모두 반영된다.
오픈소스라는 점은 비용측면에서 장점이 될 수 있으나, 잦은 업데이트로 인해 예상치 못한 문제가 발생할 수 있다. 업그레이드를 진행할 때 예기치 못하게 발생할 수 있는 버그를 염두에 두고 개발해야 한다.
네이티브 브릿지를 통해 네이티브 스레드를 생성하여 네이티브 앱처럼 작동하지만 당연히 실제 네이티브 앱에 비해서는 성능이 떨어진다.
각 플랫폼의 업데이트시 출시되는 새로운 기능이 React Native측에 업데이트가 되어야 해당 기능을 사용할 수 있다. 즉 네이티브앱에 비교하여 플랫폼의 새로운 기능을 적용하기까지 시간이 걸릴 수 있다.
React Native는 편리한 개발도구는 맞지만 성능이 뛰어난 앱을 개발하기 적합한 도구는 아닌 것 같다. 공부하는 단계에서야 접근하기 매우 좋게 느껴지긴 하지만 기능이 많고 성능이 중요한 무거운 앱을 개발한다고 하면 네이티브 앱에 비교해서 우위를 점하긴 힘들 것 같다.
실제로 많은 회사들도 하이브리드 앱 보다는 비용이 더 높더라도 성능이 확실한 네이티브앱을 플랫폼에 맞게 개발하는 것을 점점 선호하는 추세라고 한다.
더욱이 플랫폼의 기능 업데이트에 실시간으로 발 맞춰갈 수 없고 React Native의 업데이트를 기다려야하고, 업데이트 시 다른 부분의 업데이트로 인해 예상치 못한 부분에서 버그가 발생하고 수정해야할 수 있다는 점을 고려하면 장단점이 매우 확실해 보인다.