본문 바로가기
4. 모바일 앱 취약점 진단

앞으로는 자바와 코틀린, 스위프트를 쓰지 않을 수 있다..? 미래에 각광받을 수 있는 모바일 개발 언어 - 리액트 네이티브(React Native)!

by Robert8478 2024. 10. 17.

모바일 앱 개발 언어를 꼽으라 한다면 대다수 사람들은 두가지 언어를 말할 것이다. 바로 'Java'와 'Kotlin', 그리고 iOS의 'Swift'이다. 자바는 오픈소스 라이브러리 등이 많아 여전히 개발하기 좋은 편이며, 코틀린은 기존 자바의 문제점을 보완하여 구글에서 공식으로 선택한, 현재 각광받는 언어이다. 스위프트는 애플에서 적극 지원하는, iOS 개발 전용 언어로써 그 가치를 톡톡히 보인다.

그런데 2015년경 페이스북이 한번만 코드를 작성하면 Android와 iOS 모두에서 사용할 수 있어 개발과 유지보수에 있어서 엄청난(?) 생산성을 제공하는 모바일 개발 언어를 만들어버렸는데, 그것이 바로 리액트 네이티브다.

하나의 코드베이스로 iOS와 Android 앱을 동시에 개발할 수 있는 크로스 플랫폼 솔루션을 제공하고, JavaScript 언어로 작성이 되는데 여기에 React 라이브러리를 활용하여 사용자 인터페이스(UI)를 구축할 수 있다. 네이티브 코드(Java, Swift, Objective-C)와의 브리지(Bridge)를 통해 플랫폼 고유의 기능을 사용할 수 있도록 설계된 이 리액트 네이티브는 최근 점차 각광을 받고있어 스타트업같은 기업에서 조금 더 신속하고 저렴하게 앱을 개발하기 위해 주로 사용하고 있다. 

위 설명을 보면 다른 하나가 떠오를 수 있는데 그건 바로 구글이 개발한 Flutter라는 앱 개발 프레임워크다. Flutter 또한 리액트 네이티브와 비슷한 형태의 앱 개발 프레임워크라고 볼 수 있다.

Flutter는 안드로이드 앱과 IOS 앱을 개발할 수 있는 하이브리드 앱 언어인데, 이 또한 앱의 UI 프레임워크를 만들어 다양한 위젯과 레이아웃을 제공하기 때문에 UI를 개발할 때 편하고 쉽고 빠르게 개발 할 수 있다는 장점이 있다. 하지만 Dart라는 언어를 사용하기 때문에 Dart 언어를 따로 공부해야한다.

비록, 기존에 존재하던 대기업 등 세상의 경제를 돌리고 있는 기업들이 운영하는 앱들은 대다수 자바와 코틀린, 스위프트를 사용하고 있던 앱이고, 이를 리액트 네이티브로 굳이 힘들게 재 개발할 이유는 아직 없기 때문에 그렇게 각광받지는 못하고 있지만, 앞으로 스타트업 기업들이 대기업이 되고, 기존 기업들이 발전의 필요성을 느껴 언어를 변경하게 된다면, 충분히 리액트 네이티브는 최강의 자리를 차지하게 될 가능성도 존재한다.

그렇기에 자바와 코틀린을 이미 알고있는 우리들은 시간이 날때 틈틈이 이 리액트 네이티브라는 언어를 공부하는 것이 도움이 될 것이다. 혹은 Flutter를 쓰기 위한 Dart 언어를 공부하는 것도 좋을듯 한데, 이것은 둘 중 하나를 선택해서 공부하거나 둘다 공부해보거나 자유롭게 해보면 될 것 같다.

아래에서 우선 해당 글의 메인 주제인 리액트 네이티브(React Native) 언어에 대해 자세히 소개하려 한다.

 

주요 특징

1. 크로스 플랫폼 개발

React Native의 가장 큰 장점은 하나의 코드베이스로 iOS와 Android 앱을 모두 지원하여 개발 시간과 비용을 절감할 수 있으며, 유지보수 시 코드 변경이 양 플랫폼에 동시에 적용되어 생산성을 크게 향상

2. 네이티브 성능

React Native는 브리지(Bridge)를 사용해 JavaScript로 작성된 코드를 네이티브 모듈로 변환하여 네이티브 앱에 근접한 성능을 제공하는데, 이는 웹뷰 기반 하이브리드 앱보다 훨씬 더 빠르고 원활한 사용자 경험을 제공

3. 핫 리로드(Hot Reload)

핫 리로드 기능을 통해 코드를 수정한 후 애플리케이션을 다시 빌드하거나 재실행할 필요 없이 실시간으로 UI 변경 사항을 확인할 수 있어 개발 속도 가속화, 디버깅을 더욱 쉽게 만듬

 

리액트 네이티브의 전반적인 특징은 이러한데, 그렇다면 보안 담당자로써 이 언어의 장단점을 파악하는 것도 중요할 것이다. 아래에 해당 내용까지 정리해봤다.

 

보안 관점에서의 React Native

1. 데이터 저장소 보안 문제

iOS에서는 Keychain, Android에서는 SharedPreferences 및 Keystore와 같은 보안 저장소를 사용하는 반면, React Native는 기본적으로 이러한 네이티브 보안 기능을 자동으로 적용하지 않으므로 개발자가 직접 네이티브 모듈을 사용하거나 적절한 라이브러리를 추가해야함.

2. 통신 보안

모바일 애플리케이션의 대부분은 서버와 통신하는데, TLS 암호화를 반드시 적용해야 한다. React Native는 기본적으로 이를 제공하지만, SSL Pinning과 같은 추가 보안 기능은 기본 제공되지 않으므로, 이를 적용하려면 추가적인 작업이 필요하다.

3. 코드 난독화 및 취약점

React Native 애플리케이션은 JavaScript로 작성된 코드가 기기에 저장되므로, 역공학 및 코드 노출의 위험이 존재한다. 이를 방지하기 위해 코드 난독화(obfuscation)를 반드시 적용해야 하며, 외부 라이브러리를 사용할 때도 해당 라이브러리의 보안성을 검증하는 것이 중요하다. WebView를 사용한 서드파티 웹 콘텐츠 로딩 시 발생할 수 있는 보안 취약점(Cross-Site Scripting, XSS) 또한 잘 관리해야 한다.