[일단기록] Realm kotlin 구현 및 React Native bridge 연결

kjoo0·2024년 6월 29일
0

일단기록

목록 보기
4/10
post-thumbnail

Realm을 쓰기로 했지만 한가지 추가 고민이 더 생겼다.


구현 계획

fcm은 현재 push 알림 커스터마이징을 용이하게 하기 위해 native에서 처리하고, 받은 데이터를 react native로 bridge를 이용해 전달하고 있다.

그래서 빠른 성능을 이유로 realm을 사용한다면, 똑같이 native에서 처리하는 게 좋지 않을까 라는 고민이 들었다.

그럼 더 근본적으로 native에서 처리하는게 더 빠른 이유는 뭘까?

  • native 모듈을 사용하는거니까 native 언어에 최적화되어 있다.
  • 또한 기본적으로 native 언어(Swift, kotlin)는 javascript보다 빠르다.

1. Native 언어로 개발

Kotlin으로 FCM 처리, 네비게이션 작업이 필요할 때만 브릿지를 통해 screen ID를 React Native로 전달. FCM 처리할 때 똑같이 Kotlin 코드로 Realm에 저장하고, 사용자가 채팅 목록을 조회할 때, 채팅방에 들어갈 때 데이터 조회가 필요할 때 해당 데이터만 네이티브에서 브릿지를 이용해 데이터 전달

장점:

  • 성능 최적화: FCM 처리를 Kotlin에서 직접 수행하면, 네이티브 코드가 직접 Firebase와 상호작용하여 더 빠르고 안정적인 메시지 수신 및 처리가 가능합니다.
  • 데이터 처리 효율성: 네이티브 코드에서 Realm에 직접 데이터를 저장하고 조회하면, 데이터베이스 작업이 네이티브 성능의 이점을 활용하게 됩니다.
  • 분리된 로직: FCM 및 데이터 저장/조회 로직이 네이티브에 집중되어 있어, React Native 코드와의 결합도가 낮아 관리가 용이합니다.

단점:

  • 복잡성 증가: 브릿지를 통한 데이터 전달 및 화면 전환 로직이 추가되면서 코드 복잡성이 증가합니다.
  • 테스트 및 디버깅 어려움: 네이티브 코드와 React Native 코드 간의 상호작용을 테스트하고 디버깅하는 과정이 복잡해질 수 있습니다.

2. 부분 Native 개발

Kotlin으로 FCM 처리, 네비게이션 작업이 필요할 때나 FCM에 포함된 메시지 정보를 React Native로 전달. 데이터 저장, 조회는 Realm React Native 코드에서 처리

장점:

  • 분할된 책임: FCM 처리는 네이티브에서 수행하고, 데이터 저장 및 조회는 React Native에서 처리하므로 각 부분의 책임이 명확해집니다.
  • 데이터 처리 유연성: 데이터 저장 및 조회를 React Native에서 처리하므로, JS/TS 코드를 이용한 로직 변경이 더 쉽고 빠릅니다.
  • 디버깅 용이: 대부분의 로직이 React Native에서 처리되므로, 네이티브와의 상호작용이 줄어들어 디버깅이 상대적으로 용이합니다.

단점:

  • 성능 이슈: 데이터베이스 접근이 네이티브에서 직접 수행되지 않기 때문에, 성능상 이점이 덜할 수 있습니다.
  • 브릿지 오버헤드: FCM 메시지 처리 후 데이터를 React Native로 전달하는 과정에서 브릿지 오버헤드가 발생할 수 있습니다.

3. 모두 React Native 개발

FCM도, Realm도 모두 React Native에서 처리

장점:

  • 단순화된 코드베이스: 모든 로직이 React Native에서 처리되므로, 코드베이스가 단순화되고 관리가 용이합니다.
  • 개발 속도 향상: 네이티브 코드를 작성할 필요가 없으므로 개발 속도가 빨라집니다.
  • 테스트 용이: 모든 로직이 JavaScript/TypeScript에서 처리되므로, 일관된 테스트 환경을 유지할 수 있습니다.

단점:

  • 성능 제한: React Native의 브릿지를 통해 FCM 및 데이터베이스 작업을 처리하므로, 성능이 네이티브에 비해 떨어질 수 있습니다.
  • 플랫폼 의존성: 네이티브 성능 최적화를 충분히 활용하지 못하므로, 고성능 요구사항을 충족하기 어려울 수 있습니다.
  • 복잡한 작업 처리 어려움: FCM과 데이터베이스 작업이 복잡한 경우, React Native에서 모든 작업을 처리하는 것이 비효율적일 수 있습니다.

결론

성능 상의 이점을 고려하면

  • 1번 방법이 가장 성능 최적화에 유리합니다. 네이티브 코드에서 FCM 및 데이터 저장/조회 작업을 수행하여 성능을 극대화하고, 필요한 경우에만 브릿지를 통해 데이터를 전달하는 방식이 성능에 가장 큰 이점을 제공합니다.

  • 2번 방법은 성능과 유연성의 균형을 맞추고자 할 때 적합합니다. FCM 처리를 네이티브에서 수행하여 성능을 일부 확보하면서도, 데이터 처리를 React Native에서 유연하게 관리할 수 있습니다.

  • 3번 방법은 개발 속도와 코드의 일관성을 중시하는 경우 적합하지만, 성능이 중요한 애플리케이션에서는 적합하지 않을 수 있습니다.

성능을 최우선으로 고려한다면 1번 방법이 가장 적합하며, 유연성과 관리 용이성을 고려한다면 2번 방법을 선택할 수 있습니다. 따라서 1번 방법으로 구현 계획 완료!

profile
티스토리 이사 준비 중..

0개의 댓글