만족

[React Native] 토이 프로젝트 제작 후 RN에 대해 느낀 점 본문

[React Native] 토이 프로젝트 제작 후 RN에 대해 느낀 점

FrontEnd/React Native Satisfaction 2020. 8. 23. 04:19

https://reactnative.dev/

 

React Native · A framework for building native apps using React

A framework for building native apps using React

reactnative.dev

리액트 네이티브는 크로스 플랫폼 애플리케이션 제작에 특화된 프레임워크다.

 

처음 들었을땐 안드로이드/웹을 따로 개발하는 나로써는 놀라움을 금치 못했고,

리액트 네이티브를 배우고 나서 이제 안드로이드 스튜디오는 쓰레기통에 박아버릴 예정이였으나...

시작할 때와는 생각이 많이 바뀌었다.

 

매도 먼저 맞는게 낫다고, 단점부터 얘기해보겠다.

 

너무 오래 걸리는 빌드 시간과 너무 거대한 프로덕션

물론 디버그의 경우에는 hot reload기능이 있어 리빌드 없이도 변경사항을 즉각적으로 확인할 수 있다는 점은 놀랍다.

 

하지만 프로덕션 레벨에서 테스트해야 할 경우나, QA 과정을 거칠 떄는 프로덕션 빌드를 해야 하는데

현재 i9이 달린 노트북을 쓰는데도 플랫폼 하나당 5~10분정도가 걸린다.

+빌드할 때 노트북에서 비행이 이륙하는 소리가 나는건 덤

 

이건 내가 뭔가 설정을 잘못했나 싶었으나, 검색해보니 고질적인 문제인 것 같다.

 

기본적으로 지원하는 기능이 빈약함

내 생각에 RN은 기본 핵심 기능만 제공하고, 추가적인 기능들은 모두 오픈소스 생태계에 맡기려는 성향이 있는 것 같다.

 

아래는 RN에서 제공하는 기본 component와 API 리스트인데, 매우 양이 적어서 하루정도면 다 훑을 수 있을 것이다.

 

https://reactnative.dev/docs/components-and-apis

 

React Native · A framework for building native apps using React

A framework for building native apps using React

reactnative.dev

https://reactnative.dev/docs/accessibilityinfo

 

React Native · A framework for building native apps using React

A framework for building native apps using React

reactnative.dev

그래서 필요한 기능이 있으면, 

1. 직접 만든다

2. npm을 뒤져서 찾는다

를 해야하는데

 

1번의 경우 js레벨에서 해결할 수 있다면 할 수 있지만,

나처럼 한쪽 언어에 대해 문외한인 사람이라면 js/android/ios부분을 모두 손대야 하는데 이건 불가능하다....

 

2번의 경우에도 문제가 많다.

 

아무래도 오픈소스같은 경우에는 메인테이너가 도망가버리면 라이브러리는 폐기물이 되어버리고 만다.

특히 버전 별 차이가 큰 RN의 경우, 구버전 RN에 맞춰 개발하고 유지보수를 포기해버리면 쓸래야 쓸 수가 없을 뿐더러

버전이 맞더라도 해당 모듈에 그닥 관심이 없는 메인테이너의 경우 git issue에 무수한 버그수정의 요청이 들어와도 무시하는 경우가 많다.

 

이게 정말 문제인게, 해당 모듈 리스트는 별 기능이 없는 프로젝트인데도 일단 RN으로 프로젝트를 시작하면 오픈소스로 떡칠을 해야한다.

 

여기저기서 터지는 문제들

아무래도 여러 개의 플랫폼을 타겟으로 개발하다 보니, 참 여러군데서 오류가 많이 터진다.

 

js에서 터지기도 하고 yarn(npm)에서 터지기도 하고 gradle(android build tools)에서 터지기도 하고 java에서 터지기도 하고 pod(ios dependency manager)에서 터지기도 하고 xcode빌드할 때 터지기도 하고 정신나갈것같다

 

 

단점만 너무 나열하니 쓰레기로 묘사하는것 같은데 장점도 물론 많다

 

높은 생산성

특정 플랫폼에서 앱을 서비싱할때 어느 정도 사용자를 확보하면 다른 플랫폼에도 같은 기능을 하는 프로그램을 만들어야 할 때가 온다.

 

그럴 때 이미 있는 코드를 다른 언어로 번역해서 작성하고 빌드하는 일은 썩 유쾌한 일은 아니다.

 

애당초 RN으로 빌드했다면 이런 고민을 할 필요가 없다 (Windows, Mac, IOS, Android 전부 한번에 빌드할 수 있다)

 

핫 리로딩

핫 리로딩은 변경사항을 즉각적으로 확인할 수 있는 기능으로,

보통의 네이티브 앱 개발 시에는 수정사항마다 리빌드를 진행해야 해서 낭비되는 시간이 너무 많은 반면

핫 리로딩이 있으면 정말 몇 초 사이에 수정사항이 반영되어 앱이 새로고침된다.

 

리액트때도 느꼈지만 이건 정말 마음에 들었던 기능이다.

 

React-Like Style

리액트를 경험한 개발자라면 입문 문턱이 그렇게 높지는 않다.

 

일단 컴포넌트별로 나누어 관리한다는 철학이 동일하고, redux와 같은 상태 관리를 동일하게 적용할 수 있으며

스타일링은 flex기반으로 하기 때문에 적응에 그렇게 많은 시간이 필요하지 않다.

 

만약 리액트로 개발한 웹사이트를 RN으로 포팅하는 작업을 한다면, 크게 어렵지 않게 진행할 수 있을 것이라 생각한다.

 

그래서, 다시 쓸껀가?

일단은 답은 "아니오" 다.

 

장점도 많지만 나에게는 단점이 너무 크게 다가왔다.

 

특히 네이티브로 개발할 때 5분도 안걸렸던 기능을 여기서 라이브러리 찾고 버그있는지 확인하고 코드에 적용하는 과정이 너무 스트레스가 컸다.

 

간단한 하이브리드 애플리케이션을 개발할 때는 사용하겠지만, 그게 아니라면 앞으로 쓸 일은 없을 것 같다.

 

다음엔 플러터나 자마린을 도전해 봐야겠다.

 

 

 

 

 



Comments