티스토리 뷰

왜 React Native를 시작했는가

저는 React.js를 따로 접해보지는 않았고, (간단한 튜토리얼 수업 정도는 들어 보았습니다만) 요즘 곧바로 React Native (줄여서 앞으로 RN이라 하겠습니다) 를 해보겠다고 꼼지락 거리고 있는 상황인데요. 올해 RN을 꼭 해보아야겠다는 생각이 든 이유 중 하나는 2018년도 자바스크립트의 트렌드에서 앱 개발을 RN으로 하는 개발자 수가 네이티브 개발자 수를 넘었다는 사실로 앞으로 기술적 고도화나 커뮤니티의 활성화적인 측면에서 무시할 수 없는 수준에 이르렀다는 생각이 들었기 때문입니다.


이렇게 이야기하면 기술자로서 트렌드를 빨리 앞서나가지 못하고 남들 따라가는 추종자처럼 보이지만 부정할 수 없는 사실입니다. 😭 하지만 추종자의 장점은 이미 무르익어서 쉽게 배울 수 있는 튜토리얼이나 잘 정리된 자료를 찾아볼 수 있고, 많은 버그나 이슈들이 개선된 상황이기 때문에 언어 자체의 내부적인 한계로 인해 발생하는 이슈를 경험하는 범위도 줄어들게 됩니다. 그 말은 테스트나 실험을 위한 수준이 아니라 완성품 제작에 활용 가능성이 높아졌다는 것을 의미하기도 합니다. 작은 스타트업의 개발 책임을 맡고 있는 저의 입장에서는 그런 점이 새로운 기술을 배우는 데 있어 굉장히 중요한 부분이 됩니다.


저는 최근까지는 계속 Angular와 Ionic으로 하이브리드 웹 앱을 개발하는 프로젝트를 해왔습니다. 폰갭을 이용한 하이브리드 웹 앱은 하나의 언어로 iOS, Android 모두 커버할 수 있기 때문에 (네이티브 기능을 사용하는데 있어서 한계가 있긴 하지만요) 개발 속도가 빠르고, AngularJS에서 Angular로 넘어오면서 컴포넌트 구조화되어 뷰의 재사용이나 코드 관리적인 측면에서도 깔끔하게 개발할 수 있는 프레임워크여서 장점이 있었습니다. 반면 웹뷰에서 구현된다는 점에서 치명적인 (성능 요구사항이 까다롭지 않다면 문제가 되지 않죠) 한계가 있고, 네이티브 기능을 모두 지원해주는 것은 아니기 때문에 때로는 등등 가장 대표적으로 RN과 많이 비교가 되었던 프레임워크였죠. 작년에도 RN의 개발자수가 앞서나가긴 했지만 올해는 그 차이가 더 크게 벌어졌습니다. 물론 서로의 장단점이 있으므로 더 궁금하신 분들은 제가 작성한 비교 글을 참고해보셔도 좋을 것 같습니다.

어떻게 시작했나

RN을 시작하기 위해 다짜고짜 공식 홈페이지의 Get Started에서 expo라는 빌드 도구를 받아 프로젝트 생성까진 완료했지만 공식문서는 튜토리얼에는 크게 힘을 들이지 않아서 레퍼런스 외엔 배우는 데 도움이 되진 않았습니다. 넥스트 스텝을 밟기 위해 개인블로그와 위키의 튜토리얼을 보며 기본 문법을 익혔고, 이후에는 소규모 프로젝트를 하며 직접 뷰를 만들면서 궁금한 것들을 구글링하거나 레퍼런스를 확인하고 있습니다.


참고

구글에 'React Native Todo App' 이라고 검색하면 굉장히 다양한 투두리스트 앱 개발 튜토리얼이 나옵니다. 전체적인 구현 방법을 훑어보기에 적당한 것 같습니다.

ReactNative 한글 튜토리얼, https://g6ling.gitbooks.io/react-native-tutorial-korean/

러닝 커브가 높지는 않은 것 같습니다

기본 언어인 HTML, CSS, JavaScript와 State나 기본적으로 많이 사용되는 RN 컴포넌트에 대한 이해는 필수지만 이전에 어떤 프레임워크를 사용했냐에 상관없이 컴포넌트에 대한 개념을 알고 있으면 구조를 이해하는데 큰 어려움은 없을 거라 생각이 듭니다. 무엇보다 튜토리얼이 잘 되어 있습니다. 물론 뷰를 디자인하거나 기본적인 기능을 사용하는데 한해서 하는 이야기이구요. 프로젝트를 진행하면서 어떤 어려운 점이 발생할지는 더 알아보아야 합니다.

어려웠던 점

처음 expo를 사용해 앱을 실행시켰을 때 코드를 수정할 때마다 실시간으로 업데이트되는 모습이 굉장히 매력적이기는 했습니다만 모듈 하나를 설치하다가 조금 실망한 부분이 있긴 했습니다. 프로젝트를 생성하는 방법은 대표적으로 expo 도구를 쓰거나 react-native cli를 활용하는 방법인데요. 공식문서에서는 expo 사용을 권장하는 것 같습니다. 하지만 expo를 쓰는 경우 expo client 앱을 설치한 iOS, Android 디바이스에서 바로 확인할 수 있다는 장점이 있는 반면 의존성과 관련한 이슈가 조금 있는 것 같습니다. 그래서 react-native upgrade를 수동으로 해줘야 하는데 솔루션을 찾느라 애를 먹었습니다. 말하자면 첫 개발 환경 설정 과정이 미흡하다고 말할 수 있겠네요.

현재까지의 결론

현재까지 RN에 대한 느낌을 정리하면 코드수정 즉시 앱에 반영되는 속도가 다른 프레임워크에 비해 월등히 빠르다는 점, 궁금한 부분에 대해 (아직 복잡한 것을 찾지는 않아서인지 몰라도) 레퍼런스 결과가 꽤 많다는 느낌을 확실히 받았습니다. (문법에 익숙하지 못해 검색을 효과적으로 하지못했다는 것을 감안해서도 꽤 쉽게 찾았습니다) 그리고 스타일이 Plain CSS 사용법과 다른 점이 꽤 있는 것 같은데요. (속성이름을 카멜케이스로 쓴다는 점 외에도) 그런 부분들은 조금 더 알아가야 하는 부분인 것 같습니다. 컴포넌트 재사용은 다른 컴포넌트 기반 프레임워크와 비교해 큰 장점을 아직 느끼진 못했고 아직 네이티브 기능을 많이 써보지 않아서 듣기로는 안드로이드 기능 지원이 iOS에 비해 부족하다고 들었는데 실제로 어떤지 궁금합니다.

참고 문헌

https://facebook.github.io/react-native/docs/getting-started


댓글