React Native 에 크게 데인 경험 (질문글 보고 다시 떠오른 악몽)
이것도 예전 직장 이야기입니다.
그 때는 Flutter 가 없었습니다. (프로젝트 시작하고 몇개월 뒤 Flutter 가 출시됨 ...)
레거시 프로젝트 유지보수를 계속 하고 있었는데
고객사(국가기관이고, 이름이 "부"로 끝남.) 가 앱을 서비스할 것을 요구함.
(SM업무였는데 사실상 SI나 다를바가 없었음)
회사에서는 마침 신기술도 도입해보자 얘기가 나왔고
React Native 로 앱을 만들자 얘기가 나온 터라, 아 그렇겠구나 생각만 했는데
그게 우리팀에 떨어짐. 우리팀도 다른 인원들은 기존업무 집중하고, 나랑 신입 한명만 일에 투입됨.
그때부터 React Native 를
처음부터
공부하기 시작함.
React 랑 아예 근본적으로 다르더만. React 와 달리 DOM 컴포넌트를 하나도 사용하지 못함.
전용 컴포넌트를 외워서 (아님 그때그때 공홈 들여다보면서) 써야됨.
일단 여기서 첫 번째 멘붕
그래도 다행인 건
개발기간 줄이겠다고, 초기버전을 외주를 이미 줬다네?
그리고 그 결과물을 받았음.
화면만 동작할 뿐, 기능이 뭐 하나 제대로 동작하는 게 없었음.
아니 뭐, 모바일 개발쪽을 누가 알겠냐고. 피드백이 제대로 안됐겠지.
원래라면 회사가, 계약 들먹이며 따져야 했지만
회사 책임도 있는지라 그냥 받기로 했나 보더라.
그 소스 우리가 이어 받았지.
그리고 어떻게 배포까지 성공을 시켰다.
사실 여기까지는 그래도 재미는 있었다.
React Native의 악몽은 이제부터 시작이었다.
문제점은 진짜 수도없이 많지만
몇 가지만 꼽아본다.
프레임워크 자체에 기능이 너무 빈약함
날짜를 입력받아야 한다고 해보자. 텍스트로 입력받으면 안되잖아.
년, 월, 일 선택을 받아야 하지.
이거? React Native 기본 컴포넌트 중에 없다. 플러그인 깔아야 한다.
진짜, 당연히 있어야 할 법 한 것들이 내장이 안되어 있다. 죄다 플러그인에 의존하도록 되어있다.
이게 진짜 심각한데, 다른 온갖 문제의 근원이 이 녀석 때문이다.
React Native 업그레이드 문제
구글이랑 애플이 가끔 변덕을 부리기를 좋아한다.
그래서 권한 정책을 자꾸 바꾼다.
우리는? 우리가 만든 앱 오류나서 전화오면 난리 나니까 (참고로 고객응대 전화팀에서 해결 안되면 우리로 넘어왔었다.)
iOS, 안드로이드 새 버전 탑재한 기기들이 세상에 튀어나오기 전에
새 버전을 출시해야만 한다. 그 권한에 호환되도록.
근데 우리는 네이티브 앱 개발자가 아니잖아.
React Native 프레임워크에 맡겨야 한다. 그러려면 어떻게 해야 하나? 뭘 어떻게 해.
프레임워크 버전을 업그레이드해야지.
근데 이 React Native 버전 업그레이드 하는 거, 진짜 욕이 입에서 술술 나오게 만든다.
자동 업그레이드 기능은 있으나 마나고 (플러그인 뭐 하나 걸려서 거의 무조건 실패한다 보면 된다.)
결국 git 비교 페이지 띄워놓고 내가 직접 React Native 소스코드를 수정을 해야한다.
근데 그중에 pbxproj 파일,
이건 프로젝트마다 내용이 다르고, 플러그인 설치하면 내용 추가되고 하는 파일이거든.
이것도 버전에 맞게 수정해야 하는데,
당연히 React Native 공홈에 있는것과는 아예 다른 내용이 들어가 있다.
이거 삭제하면 git에서 복구해 초기로 되돌리거나, 플러그인 하나하나 재설치해야 하는 불상사가 벌어지기 때문에
어떻게든 추측을 해서 직접 수정해야만 한다.
이거 하나 작업 2~3일 걸린다고 보면 된다.
이 작업 한번 해보면 애플을 깊게 증오하게 된다. 스티브 잡ㅅ ㅌ쿡 개 ㅆㅂ놈
플러그인 버전 호환성 연쇄 문제
프레임워크 버전을 올리면, 플러그인들도 호환이 안되는 놈들이 나온다.
플러그인들도 각각 버전이 따로 있어서, 플러그인끼리 의존성도 갖는다.
연쇄적으로 작업을 해야 한다.
그런데 어떤 플러그인은,
플러그인 개발사가 게을러서
패치를 아직 안내놓은 상황이 벌어진다.
그때는
어쩌겠어. 대체할 다른 플러그인 찾으러 구글 뒤져야지.
참고로 새 기기 나오기 전까지 무조건 심사까지 받아야 한다. 그전에 플러그인 어떻게든 찾아 내야만 하지.
찾아 내서 화면에 붙이고 써먹고 테스트하고 빌드하고 심사 받아 출시까지 그 기간 내에 해야 한다. 무 조 건.
빈약한 사후지원
얼마나 빈약하냐면
집에서 사이드로 새 프로젝트 따려고
다시 React Native 새 프로젝트를 아예 새 버전으로 만들었거든.
진짜 공홈 내용하고 똑같게.
ㅇㅇ 그런데 오류가 나더라. 다른 걸 제쳐두고 공홈하고 소스가 똑같은데 오류가 난다니까.
그 오류 내용도 쉽게 수정할 내용이 아니야. 프레임워크 내부 소스파일에서 트레이스가 끊어져.
지금은 안그런거 같긴 한데, 예전에 실제로 있었던 일이다. 그것도 몇달 가까이 이 상태로 방치됐었다.
Code Push 서버가 너무 약해
React Native 로 프로젝트 만들면, MS의 Code Push 서비스를 이용을 할 수밖에 없다.
(이게 뭐하는 서비스인지 조사해봐. 진짜 이거 쓸 수밖에 없어.)
근데 얘의 단점이, MS 서버가 국내에서만 가끔 엄청 느린 상황이 펼쳐진다.
이 때는 윈도우 업뎃도 서치에만 몇시간씩 걸리는 일이 벌어진다.
코드푸시 쓴 프로젝트들, 그거 걸리면 앱 실행할 때 하얀 화면에서 넘어가지를 못한다.
고객센터 난리 난다.
이외에 수많~~~은 단점들이 있어서
나는 이제 React Native 를 절대로 절대로 절대로 남에게 추천하지 않는다.
차라리 Flutter 를 도전해보라 할 뿐.