expo로 앱 만들어본 후기(vs vanilla react-native)

한정(Han Jung)
podo_official
Published in
7 min readMay 3, 2020

함께해서 즐거웠고 다신 만나지 말자✋

이 글에서는 expo를 통해 앱을 하나 만들고 출시를 하면서 느꼈던 점을 담았습니다. 개인적인 느낌이며 경험이었기 때문에 만약 잘못된 내용이 있으면 댓글로 알려주시면 바로 수정하도록 하겠습니다!

TL;DR

  • react native를 사용한 (공부 목적이 아닌) 서비스를 출시하고 싶다면 Expo를 사용하지 않는 것을 추천한다. 반드시 eject를 하거나 다시 개발하게 될 것입니다. react-native-cli 를 사용하는 것을 추천하겠습니다.
  • expo를 사용함으로써 오는 장점들 또한 많으니 장단점을 잘 비교하셔서 사용하면 좋을 것 같습니다.

왜 Expo를 사용해서 앱을 만들었나?

Expo는 리엑트 네이티브를 베이스로 ios, aos, 웹 등을 개발하고 쉽게 빌드, 배포할 수 있게 도와주는 프레임워크입니다.

Expo를 사용하기로 마음먹었던 이유는 단순했습니다. react와 비슷하게 코드를 작성할 수 있는 react-native를 사용해 앱을 만들어 보고 싶었습니다. Expo는 바닐라 react-native로 앱을 개발할 때 초기에 해줘야 하는 여러 가지 환경 설정이나 빌드를 쉽게 해줍니다. 앱에 무지한 저로서는 쉽게 개발을 시작할 수 있다는 점이 매우 매력적이었습니다.

eject를 하지 않고 Expo를 사용하는 것을 목표로 하고 앱 개발을 시작했었습니다.

무엇을 만들었나?

진짜 다와가 로고

A: 지금 어디야? 너는 맨날 늦냐!
B: 진짜 다와가!
A: 그래서 어딘데?

주변에 지각쟁이들이 한 명씩 꼭 있습니다. 그 친구들은 항상 방금 출발했지만 진짜 다 와 간다고 외칩니다. 그런 친구들을 잡기 위해 이 앱을 만들었습니다.(단순하쥬?) 앱을 만들게 된 동기만큼 기능은 단순했습니다. 아래 두가지가 끝입니다.

  • 모임 생성 / 참가가 가능하다.
  • 모임 시간 20분 전, 20분 후 참가한 사람들의 위치가 추적된다.

세 명의 프론트엔드 개발자와 한명의 백 엔드 개발자, 두 명의 디자이너가 한 팀이 되어 개발 했습니다. 현재 두 마켓에 모두 출시되어 있고, 체험해 볼 수 있습니다.

사용해보시고 불편한 점이나 개선할 점이 있다면 언제든지 메일이나 댓글 남겨주시면 감사하겠습니다💪

expo의 장점

장점은 너무 극명합니다. 매우 매우 쉽고 빠르게 개발할 수 있었습니다.

프로젝트를 만들고 앱을 실행하기까지 어려운 것 없이 쉽고 빠르게 진행되었습니다. Expo 앱을 개인 핸드폰에 설치한다면 그 장치에서 쉽게 지금까지 만든 앱을 사용해보며 디버깅이 가능했습니다. 카메라나 알림, 위치 정보 등 여러가지 기능을 Expo SDK에서 제공하고 있기 때문에 공식 문서만 찾아보면 굳이 다른 사이트를 참고하며 개발할 필요가 없습니다. (https://docs.expo.io/)

주기적으로 Expo SDK가 업데이트되며 이 업데이트 주기는 매우 빠르다고 느껴졌습니다. 나름대로 커뮤니티가 형성된 것으로 보였습니다.

react-native 기반이기 때문에 react를 이미 할 줄 안다면 하루 만에 (단순한)앱을 만들어 출시하는 것은 일이 아닐 것입니다.

그럼에도 불구하고?

반드시 eject를 고민하는 순간이 온다

바닐라 react native로 개발을 하면 여러가지 native module과 linking을 해서 사용할 수 있다는 장점이 있습니다. 하지만 Expo를 사용하면 native module과 링킹을 할 수 없습니다. 제공되는 API만 사용이 가능합니다. native로 작성되어 바닐라 react-native에서 널리 사용되고 있는 라이브러리들 (예를 들면, react-native-fast-image)을 사용하기 위해서는 eject가 필요하다는 점은 큰 단점이었습니다. 큰 제약을 안고 시작하는 것을 의미했습니다.

Expo팀에 기능을 요청하는 게시판 또한 있지만, 언제까지 되기만 기다리기도 힘든 상태이기도 합니다.(예를 들면, https://expo.canny.io/feature-requests/p/add-react-native-fast-image)

앱을 개발하는 과정에서 초대 코드를 카카오톡으로 공유하기 위해 기능을 검토했던 적이 있는데 이 경우도 다른 우회하는 방식이 아니라면 eject가 반드시 필요했습니다. (이후에 공유는 Expo에서 제공하는 Sharing으로 해결했습니다)

국내에서 서비스를 해야 하는 앱이라면 카카오 로그인이나 네이버 로그인, 네이버 지도나 카카오 지도등을 사용해서 앱을 만들어야 하는 케이스가 매우 많을 것입니다. 하지만, Expo에서 그런 경우를 다루기는 매우 힘들 것입니다.

🔥 빌드 시간

개인적으로 느꼈던 최악의 단점은 빌드 시간이었습니다. Expo 빌드는 자체 빌드 서버를 구축하거나 유료로 사용하지 않는다면 빌드 큐에 들어가 자신의 빌드 순서를 기다리게 됩니다. 무료 사용자들끼리 줄을 서 빌드 순서를 기다리는데 ios의 경우 빠르면 10분 느리면 30분, aos의 경우 빠르면 30분 느리면 한시간을 넘어가는 시간이 걸린 적 또한 많습니다. (다른 글들을 찾아보니 30분 정도면 매우 빨리 끝난 정도라고 하는 것 같습니다)

앱 출시가 임박했을 때 testflight 테스트나 .apk파일을 만들어 테스트가 필요한 데 이때 한번 테스트를 하기 위한 텀이 너무나 길었었습니다. 새로운 빌드 서버를 구축하는 것 또한 고민할 정도였습니다.

너무나 편했던 Expo 빌드가 어느새 단점으로 다가와 있었습니다. 무료이니 할 말이 없을 수 있지만.. 초기에 조금 고생하더라도 바닐라 환경을 사용하고 빌드 환경을 구축했다면 50번이 넘는 빌드 시간을 낭비하지 않았을 수 있었을 것입니다. (앞으로 업데이트를 하면서 이 낭비 시간은 계속 적립될 것입니다.)

앱이 크다

Expo 자체에서 제공하고 있는 기능이 매우 많기 때문에 앱 자체가 매우 큽니다. 이 문서에도 나오지만 “Hello world”를 띄우는데 독립앱 자체 크기가 바닐라 react-native 보다 훨씬 큰 15MB ~ 20MB라고 합니다. 최적화에 관한 이야기는 이후에 개선이 될 예정이라고 하지만 이런 부분 또한 단점이라고 볼 수 있을 것 같습니다. 위 문서에서도 확인할 수 있지만 앱의 크기를 줄일 수 있는 노력은 몇 가지 존재하는 것 같습니다. 하지만 근본적인 해결책이 되어주지는 못하는 것 같습니다.

결론

엑스포의 장점과 단점은 너무 명확합니다. Expo 덕분에 빠르게 앱을 개발할 수 있었고 여러 플랫폼을 한번에 경험할 수 있었습니다. 하지만, Expo라는 가두리 안에서 할 수 있는 것들이 많이 없었습니다. eject를 하지 않는다는 원칙이 있었기 때문입니다. 만약 개발 초기 시간으로 돌아간다면 저는 Expo 대신 다른 선택지를 선택했을 것 같습니다.

이후에 저는 Expo를 eject하지 않고 계속해서 앱을 발전시킬 예정입니다. 이후에 이 생각이 바뀔지 모르겠지만 처음에 환경을 만드는 고생이 하기 싫어 Expo로 서비스 출시를 생각하는 사람이 있다면 그 생각을 접고react-native-cli 를 사용해서 앱을 개발하는 것을 고려해보라고 추천할 것입니다.

--

--