
예전에 리액트 네이티브에 관해서 찾아봤을 때도 그랬고 주변에서 Expo를 사용하면 네이티브 기능 관련해서 사용이 아예 불가능하고.. Expo를 떼어내야하고.. 외주사에서 빨리 치려고 하는 툴이고.. 뭐 이런 부정적인 이야기들이 많았기 때문에 사용할 생각을 전혀 하지 않았다. 그래서 처음으로 리액트 네이티브를 사용한 개인 프로젝트는 react-native-cli를 사용해 작업했다.
최근에 또 프로젝트를 진행하고 있는데 마찬가지로 react-native-cli를 사용해 프로젝트를 생성하고 작업을 쭉 이어가고 있었다. 빠른 이미지 캐싱과 렌더링을 위해 react-native-fast-image 라이브러리를 사용하려고 보니 업데이트 된지 거의 1년이 되었고, 이슈탭에서 이 라이브러리 죽었냐~ 하는 글도 몇몇 보였다.
그 중 expo-image 사용을 권유하는 글을 봤는데, 혹시 과거에 Expo를 사용해봤던 사람이라면 한 번 다시 사용해봐라. 과거보다 많이 발전했다고 해서 다시 찾아보게 되었다.
Expo에서 직접 관리하는 패키지들도 상당히 많아보였고, 퀄리티도 나름 괜찮아 보였다. 무엇보다 관리되고 있다는 느낌이 긍정적으로 다가왔다. 마치 플러터팀에서 관리하는 패키지들처럼 말이다. 이 패키지들은 꼭 처음부터 Expo를 사용해 프로젝트를 만들어야 사용할 수 있는 줄 알았는데 그런 것도 아니었다. Expo가 관리하는 패키지들을 사용할 수 있는 방법은 뭐가 있는지 찾아보며 하나씩 만들어보았다.
npx install-expo-modules@latest
npx expo install
Expo의 패키지들을 사용하기 위해 위 명령어를 통해 expo-modules를 설치해야한다. 원한다면 expo-cli를 사용하지 않을 수 있다. expo-modules를 설치하면 아래의 패키지들이 설치된다.
여기서도 원하지 않는 패키지를 제외할 수 있는데, 공식문서를 통해 필요 여부를 판단해 삭제하면 된다. Expo SDK 50 버전 부터는 더 작아질 예정이라고 한다.
npx create-expo-app --template
위 명령어를 통해 네이티브 설정을 따로 할 필요가 없는 리액트 네이티브 프로젝트를 만들 수 있다. 당연히 Expo에서 관리하는 패키지들도 자유롭게 사용할 수 있다.
npx create-expo-app --template bare-minimum
위 명령어를 통해 ios, android 폴더가 있는 기본적인 리엑트 네이티브 프로젝트에 expo 패키지가 설치된 상태의 프로젝트를 만들 수 있다.
서론이 많이 길었지만 여기서부터 의문점이 들었다. 1번의 3번의 차이는 무엇일까? 큰 차이가 없다면 1번은 Bare Workflow인가? 아니라면 1번의 명칭은 무엇일까?
구글링을 통해 여러 글들을 보다보면 Managed Workflow에서 eject를 통해 Expo를 사용하고 있지 않아야 Bare Workflow라는 글도 보였고, Bare Workflow와 react-native-cli의 차이와 장단점을 설명하는 글도 보였다. 여러 글을 보다 깃허브 토론장을 보고 의문점이 사라졌다.

즉, 개발자가 Javascript 코드만 작성한다면 Expo에 의해 관리받고있는 Managed, 그게 아니라 ios, android 폴더 내 소스를 개발자가 스스로 작성 및 수정이 가능하다면 Bare 라고 부른다는 것이다. Expo 패키지 설치와는 관련 없다고 한다. 결국 Expo의 시각으로 본 차이점인 것이다.
그래서 1번과 3번은 Bare Workflow, 2번이 Managed Workflow라고 할 수 있겠다. 1번과 3번의 차이는 expo 패키지 여부이지 workflow의 차이는 아니라고 할 수 있겠다.
Managed, Bare 둘 다 Expo에서 바라본 시선이라 큰 의미는 없다고 생각이 들었다. 하지만 개발을 하다보면 문제와 마주쳐 여러 자료들을 검색하게 되는데, 그럴 때마다 해당 프로젝트에서 적용할 수 있는 부분인지 명칭이 주는 헷갈림이 좋지 않다고 생각했다. (많이 당해보기도 했다)
개인적으로는 react-native-cli를 사용해 프로젝트 생성하고나서 추후 필요할 때 expo-modules를 설치해서 사용하는 것을 선호한다. 하지만 한편으로 언젠가 토이프로젝트를 React Native로 만들게된다면 처음부터 푸근하게 Expo가 말하는 Managed Workflow 위에서 누워보고 싶은 생각도 든다.
리액트 네이티브를 좋아하는 사람으로써 Expo의 발전이 기대된다.