발단
예창패에 당선되어 기존 운영하던 '카페자리' 네이티브 앱을
디자인적으로나 기능적으로나 리뉴얼하게 되었다.
또한, 이제 개인의 개발자가 만든 앱이 아닌,
법인이 운영하는 앱인 만큼 기존에 사용하던
수많은 api의 운영 주체를 법인계정으로 돌려야했다.
어차피 앱을 새로 만드는 수준의 변화라면,
앞으로의 유지보수 비용까지 고려했을 때
이참에 크로스플랫폼으로 전환하기로 했다.
후보 : PWA / RN / Flutter
PWA | RN | Flutter |
---|---|---|
![]() | ![]() | ![]() |
통합된 앱개발 환경을 만들어주는 세 플랫폼을 후보로 두었다.
자세한 비교를하기 시작하면 밑도 끝도 없기에..
카페자리에 해당하는 부분만 생각하여 비교해봤다.
PWA | RN | Flutter | |
---|---|---|---|
한줄 정리 | Progressive Web App 웹을 매---우 앱'처럼' 보이게 만든 것 | React Native 웹 만들던 react로 앱을 만들 수 있게 만든 거라고 보면 됨 | 구글에서 만든 android / ios 앱 개발 크로스 플랫폼 |
성능 | 5점 | 8점 | 10점 |
개발 난이도(내 기준) | 6점 | 7점 | 9점 |
장점 | 웹개발과 거의 같음 앱스토어 종속성이 적음 검색엔진을 통해 접근 가능 빠른 버그 픽스 + 업데이트 | code push PWA대비 많은 기능 PWA대비 좋은 성능 플러터대비 많은 3rd파티 라이브러리 | 셋중 가장 좋은 성능 가파른 성장세(구글지원) hot reload firebase 연동성 자체 패키지가 많음 (django느낌) |
단점 | 웹이랑 다를게 없어서 웹의 한계를 그대로 가져감 | 어중간한 성능 and/ios UI 불균일 | dart언어 (현재는 가능) 커뮤니티 좁은 편 3rd 파티 라이브러리 적음 구글의 드랍 가능성..?? (솔직히 가능성 없다고봄) |
비고 | 웹이랑 똑같아서 뭐 비교할만한게 없음 최근 IOS에서도 push등 주요 네이티브 기능 지원하기 시작함 | 헤르메스 엔진 이후로 성능 많이 좋아짐 | 구글이 강하게 밀어줌 앱 뿐만아니라 웹, 데스크톱 앱, 추후 임베디드도 노리는 듯 |
좀 편향된 비교나 잘못된 정보가 보인다면 대체로 당신이 맞을것이다.
어디까지나 내 지식 수준에서의 비교고, 절대적인 비교가 아닌
내 '카페 자리 앱' 기준에서의 비교니까 말이다.
당신의 앱이 게임이거나 sns거나 뭐 조금만 달라져도
위 비교는 많이 달라질 것으로 예상된다.
솔직히 맘이 잘 안간다ㅋㅋㅋ 웹 개발 경험이 싫어서 앱개발을 택했는데, 이건 웹이랑 다를게 없더라.. 그나마 후보군에 들어간 것도 최근 꽤 괜찮아졌다는 현업 개발자 친구의 이야기에서였다.
개인적인 호불호를 빼고 이야기하자면, 그래도 아직 성능, 기능상
PWA < 크로스플랫폼 < 네이티브앱의 순서를 가짐은 모두가 동의할 것이다.
현재 네이티브 앱으로 운영중인 카페자리가 두단계를 한번에 뛰어
PWA로 갔을 때 발생할 각종 버그와 문제점들을 부족한 내 개발실력으로
커버할 자신이 없었다. 고로 아웃!
위에 적은 장단점들을 기준으로 둘을 비교하며 이야기해봐야 할 것 같다.
성능에서 플러터와 비교해 8:10의 점수를 준 것은 논란의 여지가 있을 수 있다.
하지만 어찌됐든 javascript에서 한번 변환을 거치고 실행하는 것과
애초에 기계어에 가깝게 실행하는것은 메울 수 없는 차이라고 생각한다.
(운동 개빡세게한 동양인과 애초에 근육량 넘치는 흑인의 넘을 수 없는 차이랄까..)
더하여, 가장 성능이 좋던 네이티브에서 그보다는 덜한 크로스 플랫폼으로
가는 것이다보니, 성능/기능이 게중에서 가장 우수한 것을 정해야했다.
개발 난이도에서도 다들 갸우뚱 했을 것이다.
javascript 쓰는 RN을 두고 dart쓰는 플러터 개발 난이도가 좋아..??!
해명하자면 이는 언어 자체의 난이도보다 내 케이스에 특화된 결론이다.
애초에 나는 파이썬이나 자바스크립트 처럼 동적인 언어보다
자바, 코틀린, swift처럼 엄격한 언어를 선호한다.
파이썬, 자바스크립트는 처음 배울때야 편하겠지만,
아마추어 정도만 되어도 '잘'쓰기 정말 어렵다.
반면 자바, 코틀린, swift등은 처음 진입장벽은 높지만
조금만 익숙해져도 꽤 그럴듯한 코드를 뽑아낼 수 있다.
(어디까지나 제 경험 안에서 입니다. 반박시 당신이 맞아요)
때문에 RN으로 내가 원하는 수준의 프로덕트를 뽑아내는게
어렵다고 생각해 개발 난이도 점수를 낮게주었다.
코드푸쉬는 정말 인정하지 않을 수 없다.
네이티브 앱으로 출시하면서 안드로이드 로컬 디비를 잘못 건드려
업데이트하고 바로 튕기는 현상이 있었는데,
해결하고나서 이를 업데이트시킬 방법이 없었다.
코드 푸쉬가 가능했다면 해결하고 푸쉬하면 끝날 일이었을 것..
플러터에서도 firebase와 연동해 어떻게 비슷하게
구현하는 방법이 있다는데.. 찾아봐야겠다.
(추가)
현재는 shorebird를 통해 안드로이드/IOS 모두
코드 푸쉬가 가능하다고한다.
월 5,000 다운로드까지는 무료라니 잘 활용하자.
자체 라이브러리, 3rd 파티 패키지의 차이인데,
플러터는 자체 라이브러리가 잘 되어있고 3rd 파티 패키지가 적다.
RN은 반대로 자체 라이브러리보다는 대부분 3rd 파티에서 가져다 쓴다.
비록 개발 경험은 적지만, 내 경험상 결국 쓰라고 제공해주는게 최고더라.
제공해주는 걸 적당히 커스터마이징해서 쓰는게 가장 좋았다.
(백엔드에서 장고를 쓰고있는 이유이기도 하다)
장래성을 생각해보자. 각각 구글, 메타에서 지원해주는 플랫폼으로
회사가 망하는 일은 내생에는 없을 것 같다.
그럼 회사에서 얼마나 각 플랫폼을 지원해주냐인데,
최근 폼을 보면 플러터 쪽이 우세인듯 하다.
플러터는 RN보다 3년 늦게 출범했는데도 3.0까지 출시하며
웹, 데스크톱앱, 임베디드까지 노리고 있다.
고로 내 카페자리 서비스가 망했으면 먼저 망했지
구글이 플러터를 버려 망할일은 없다는 것.
RN이야 워낙 잘 해오고 있어 애초에 걱정없으니
장래성에서 둘의 차이는 없어보인다.
다만 회사가 망해 취직을 해야하는 날이 온다면 어떨까?
사람인에서 각각의 키워드로 검색해 구직 인원수를 비교해본 결과
현재 시점에서 둘의 큰 차이는 찾아볼 수 없었다.
javascript를 쓴다는 점과 여차하면 웹 프론트(react)로
넘어갈 수 있다는 점에서 RN이 우세해 보기이도 한다만..
취직할 시점에 플러터가 안좋다면 그냥 네이티브 앱개발을 할거고,
그마저도 안된다면 백엔드가 더 좋다. (뭐 내가 선택할 입장은 아니지만..)
고로 내게있어서 둘의 장래성을 비교하는 것은 의미가 없다.
그래서 결론은
프로젝트를 진행하며 개발 글을 정리해 시리즈로 만드는게 좋아보였는데,
나는 매번 바쁘다는 핑계로 (게으름의 좋은 포장지) 안해왔었다.
해서 이번에는 아예 처음부터 과정을 전부 담아보고싶다ㅎㅎ