[React Native] Managed Workflow와 Bare Workflow의 기준에 관하여

han·2023년 12월 14일

ReactNative

목록 보기
3/8

예전에 리액트 네이티브에 관해서 찾아봤을 때도 그랬고 주변에서 Expo를 사용하면 네이티브 기능 관련해서 사용이 아예 불가능하고.. Expo를 떼어내야하고.. 외주사에서 빨리 치려고 하는 툴이고.. 뭐 이런 부정적인 이야기들이 많았기 때문에 사용할 생각을 전혀 하지 않았다. 그래서 처음으로 리액트 네이티브를 사용한 개인 프로젝트는 react-native-cli를 사용해 작업했다.

최근에 또 프로젝트를 진행하고 있는데 마찬가지로 react-native-cli를 사용해 프로젝트를 생성하고 작업을 쭉 이어가고 있었다. 빠른 이미지 캐싱과 렌더링을 위해 react-native-fast-image 라이브러리를 사용하려고 보니 업데이트 된지 거의 1년이 되었고, 이슈탭에서 이 라이브러리 죽었냐~ 하는 글도 몇몇 보였다.

그 중 expo-image 사용을 권유하는 글을 봤는데, 혹시 과거에 Expo를 사용해봤던 사람이라면 한 번 다시 사용해봐라. 과거보다 많이 발전했다고 해서 다시 찾아보게 되었다.

Expo에서 직접 관리하는 패키지들도 상당히 많아보였고, 퀄리티도 나름 괜찮아 보였다. 무엇보다 관리되고 있다는 느낌이 긍정적으로 다가왔다. 마치 플러터팀에서 관리하는 패키지들처럼 말이다. 이 패키지들은 꼭 처음부터 Expo를 사용해 프로젝트를 만들어야 사용할 수 있는 줄 알았는데 그런 것도 아니었다. Expo가 관리하는 패키지들을 사용할 수 있는 방법은 뭐가 있는지 찾아보며 하나씩 만들어보았다.

1. react-native-cli로 생성한 프로젝트에서 expo-modules 설치해 사용하기

npx install-expo-modules@latest
npx expo install

Expo의 패키지들을 사용하기 위해 위 명령어를 통해 expo-modules를 설치해야한다. 원한다면 expo-cli를 사용하지 않을 수 있다. expo-modules를 설치하면 아래의 패키지들이 설치된다.

  • expo-application
  • expo-asset
  • expo-constants
  • expo-file-system
  • expo-font

여기서도 원하지 않는 패키지를 제외할 수 있는데, 공식문서를 통해 필요 여부를 판단해 삭제하면 된다. Expo SDK 50 버전 부터는 더 작아질 예정이라고 한다.

2. Managed Workflow 프로젝트로 시작하기

npx create-expo-app --template

위 명령어를 통해 네이티브 설정을 따로 할 필요가 없는 리액트 네이티브 프로젝트를 만들 수 있다. 당연히 Expo에서 관리하는 패키지들도 자유롭게 사용할 수 있다.

3. Bare Workflow 프로젝트로 시작하기

npx create-expo-app --template bare-minimum

위 명령어를 통해 ios, android 폴더가 있는 기본적인 리엑트 네이티브 프로젝트에 expo 패키지가 설치된 상태의 프로젝트를 만들 수 있다.

Managed? Bare?

서론이 많이 길었지만 여기서부터 의문점이 들었다. 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의 발전이 기대된다.

profile
크로스 플랫폼과 사랑에 빠진 개발자의 글 연습

0개의 댓글