React Native와 Flutter의 브릿지 방식 비교

크로스플랫폼 앱 개발이 보편화되면서 React Native와 Flutter는 가장 인기 있는 프레임워크가 되었습니다. 이 글에서는 두 프레임워크가 네이티브 플랫폼과 소통하는 방식, 즉 브릿지 구조의 차이를 간략하고 이해하기 쉽게 설명합니다.

1. React Native의 브릿지 구조

특징

  • JavaScript(JS) 코드와 네이티브(Android/iOS) 코드가 별도의 스레드에서 동작합니다.
  • JS 코드와 네이티브 코드는 브릿지라는 비동기 메시지 큐를 통해 JSON 메시지를 주고받습니다.
  • 브릿지 통신은 비동기적으로 이루어지며, 호출 요청은 큐에 쌓여 순차적으로 처리됩니다.

장점

  • 네이티브 코드와 분리된 상태로 JS 코드를 자유롭게 개발할 수 있어 생산성이 높습니다.
  • JS 코드 변경 시 앱 전체를 재빌드하지 않고도 빠르게 수정사항을 적용할 수 있습니다.

단점

  • 브릿지를 통한 비동기 통신 과정에서 성능 저하가 발생할 수 있습니다.
  • UI가 많거나 복잡한 작업을 빈번히 요청하면 병목 현상이 발생할 수 있습니다.

최근 개선 사항

  • TurboModules, Fabric UI Manager 등 새로운 아키텍처로 브릿지의 한계를 개선하고 성능을 높이고 있습니다.

2. Flutter의 브릿지 구조

특징

  • Flutter는 Dart 언어로 개발되며, 네이티브 코드와의 통신을 위해 Platform Channels라는 방식을 사용합니다.
  • Dart와 네이티브 간 메시지 패싱 방식으로 비동기 통신합니다.
  • Flutter의 UI 렌더링은 네이티브 컴포넌트를 사용하지 않고, 자체 렌더링 엔진(Skia)을 통해 직접 그립니다.

장점

  • UI가 네이티브와 독립적이므로 브릿지 병목 현상이 적습니다.
  • Flutter의 렌더링 성능이 뛰어나 UI 업데이트가 빠르게 이루어집니다.

단점

  • 네이티브 기능 호출 시 메시지 패싱 오버헤드가 존재합니다.
  • 네이티브 코드 변경 시마다 별도의 앱 빌드가 필요합니다.

요약 비교

구분React NativeFlutter
사용 언어JavaScriptDart
통신 방식JS ↔ 네이티브 브릿지(비동기 메시지 큐)Dart ↔ 네이티브 Platform Channels(비동기 메시지)
UI 렌더링 방식네이티브 UI 컴포넌트 사용Flutter 엔진(Skia)을 이용한 직접 렌더링
브릿지 성능 영향UI 업데이트 빈도에 따라 성능 저하 가능성 높음UI 렌더링은 빠름, 네이티브 호출 시에만 오버헤드
최신 동향TurboModules, Fabric 도입 등 성능 개선 중Platform Channels 유지하며 최적화 지속

오늘 작성하게된 글은 업무하며 react-native 개발자로써 자주 마주하게되는 내용이지만 정리되지 않는 부분들을 정리해 나가기 위해 포스팅 하였습니다.

profile
더 강해지고 싶은 5년차 모바일 크로스-플랫폼 개발자

0개의 댓글