리액트 네이티브 앱 개발 후기(3)
이게 이렇게까지 길게 갈줄은 몰랐는데.. 쓰다보니 쓰고싶은 내용도 많고 욕심도 많아져서 길어지네요
아무쪼록 보시는분들에게 조금이나마 도움이 되었으면 하는 바람에서 이어서 써봅니다.
전편 :
expo는 리액트 네이티브를 처음 접하는 저에게는 훌륭한 가이드가 맞았습니다.
문제는 그 가이드는 오래가지 않았다는거..
또 그 짧은 가이드는 주변에 리액트 네이티브를 아는 사람이 있어서 좀 알려줬다면 충분히 대체되었을거라는거..ㅎㅎ
앱 개발이 어느정도 컨베이버 벨트에 올라타고 난 이후에는
화면 개발에 대한 자신감은 붙었습니다.
expo가 저에게 준 장점으로는
1. OTA, push notification, 인 앱 브라우저 등 잡다한 기능들의 wrapper
- 지금도 이 기능들 직접 하나하나 구현해야한다고 하면 어디서부터 시작해야할지 생각만 해도 싫습니다.
- 추상화가 나름 잘돼있어서 함수 몇개만 호출해주면 기능 딱딱 완성됩니다.
2. 실제 기기에서 스토어 거치지 않아도 바로 테스트 가능(특히 ios)
- expo 앱을 설치하면 expo-cli에서 제공하는 QR코드 스캔하면 바로 앱 테스트해볼 수 있습니다.
- ios test flight 뚫으려면 결제부터 해야하는데 이 과정을 안거치고 할 수 있어서 좋았습니다.
그치만 화면 저~~ 아래에 뭐가 잠들어있는지 모르는 사람의 입장에서는 뭐가 언제 어디서 튀어나올지 모르는
불안한 상태가 계속됐습니다.
그 불안요소는
1. expo에서 지원하는 라이브러리가 아니면 쓸 수 없음
- 정확히는 지원하지 않는 네이티브 라이브러리는 쓸 수 없었습니다.
- 네이티브가 아닌 라이브러리는 관계없이 사용할 수 있는데, 순수 js로만 이루어진 것이 이에 해당합니다.
- 네이티브 라이브러리를 구분하는 방법 : 깃헙에서 소스코드 폴더에 ios, android 폴더 안에 내용이 하나라도 있고(.java, .kt, .m, .swift) yarn add 했을 때 나오는 로그에 other library... 라고 나오면 지원 안하는것.
- 지원하는 라이브러리는 크게 두 가지로 나뉘는데 첫째는 expo 커뮤니티에서 직접 개발한것(ex : expo-constant, expo-permission 등), 둘째는 리액트 네이티브 생태계에서 너무 유명하게 사용되어서 expo 커뮤니티에서 그 라이브러리의 특정 버전이 호환되도록 expo 라이브러리를 조정한 것(react-navigation, react-native-fast-image 등) 입니다.
- 문제는 지원하지 않는 네이티브 라이브러리가 너무너무너무너무 많습니다. 조금만 기능 들어간거 쓸려고하면 무조건 걸립니다.
- 예를들면 네이버 아이디로 로그인(react-native-naver-login). expo에서 3rd party app auth를 지원하지 않는건 아니지만, oauth설정을 모두 직접 해줘야 합니다. 구글 애플 이런데는 해주는데 그 외에는 지원할 예정이 없다고 합니다.
- 또 하나 대표적인건 이미지 피커입니다. expo-image-picker가 있긴 하지만, 사진 여러장을 한번에 선택하는게 안됩니다. expo-multiple-image-picker라는 js로만 이루어진 라이브러리가 있긴 하지만, 써보시면 바로 느끼실텐데 상당히 조잡하고 한계가 많습니다.
제 경우에는 이게 거의 크리티컬 했습니다. 사진이 거의 다인 앱이었기 때문에.. 물론 지금도 이걸로 고생하고있긴 합니다만ㅎㅎ
--> 처음에는 어떻게든 expo에서 벗어나지 않을려고 노력을 했습니다. 최대한 지원 가능한 범위에서 커버하려고.. 근데 개발을 하면 할수록 명확해지더라구요. expo의 한계가..
2. blackbox로 남겨두는 native 영역을 직접 건드릴 수 없음
- 이건 장점이자 단점입니다. 이른바 managed workflow 에서는 아예 ios, android 폴더 자체가 없고 빌드할 때마다 동적으로 만들어냅니다.
- 필요한 네이티브 설정을 알아서 다 해준다는거죠.
- 그렇다는 얘기는 네이티브를 몰라도 된다는 좋은 얘기이기도 하면서, expo에서 지원하지 않는 네이티브 설정은 조작할 수 없다는 얘기도 됩니다.
- 네이티브를 몰라도 되게 하면서 네이티브 영역을 만들기 위해서 별의별 꼼수를 씁니다. expo project 홈페이지에서 사용자의 ios certificate 등록, 패스워드 입력하는데에 이르러서는 '아 이거 못쓰겠다' 생각이 바로 들었습니다.
--> expo의 managed workflow에서 벗어난다(=eject)는 얘기는 즉 내가 ios, android 앱 프로젝트를 직접 구성한다는 얘기와 같습니다.
저는 지난번에도 서술했던 것처럼 네이티브는 한 번도 안해봤기 때문에 여기에 대한 막연한 두려움이 제일 컸습니다.
물론 지금도 거의 잘 모르고 알음알음 필요한것만 찾아서 하고있지만요.
그리고 expo managed workflow에서 벗어나서 eject한다 하더라도 웬만한 expo 라이브러리는 그대로 사용이 가능했습니다. 추가적으로 수동으로 세팅해줘야 하는 부분만 빼면요. 지금도 제 프로젝트에는 많은부분 expo에 의존해있습니다.(+ 버전업 기다리고있습니다ㅋㅋ)
위에서도 말헀지만 "그래서 expo 좋은가요 안좋은가요" 하면 저는 당연히 "안좋다" 말할수 있습니다.
다만 개발 규모가 크지 않고, 사람이 적다면 초기 불필요한 세팅을 줄여주는데는 최고입니다.
또 장점만 취하는 방법으로 expo init으로 프로젝트 시작하고 바로 eject해도 괜찮을 것 같습니다.
앱푸시, OTA, 애플로그인(SNS연동하고 ios 앱 만들려면 필수임..) 이런 귀찮은것들을 한번에 할 수 있습니다.
물론 eject하고 나서 네이티브 건드릴 때 했던 삽질만 해도 한달 충분히 차고 넘치지요.
apple developer 사이트랑 appstore connect, firebase, google play console 세팅하는거 진짜 최악이었어요 ㅎㅎㅎㅎ다시는 반복하고싶지 않네요
아마 다음 편이 마지막일거같은데,
다음에는 서드파티 라이브러리 커스터마이징, 네이티브 설정, 그래서 현재 앱의 결과물과 남은 과제들같은거 공유해볼까 싶습니다.
두서없는 글 읽어주셔서 감사합니다ㅎㅎ