01

사실 Flutter(이하 플러터)와 React Native(RN)도 엄밀히 말하면 네이티브 앱 개발이긴 하나, 편의상 이 글에서는 기존의 Android App 개발과 iOS 개발을 네이티브 개발이라 칭하고 플러터와 RN과 같은 프레임워크를 크로스플랫폼이라 칭합니다. 또한 크로스플랫폼에도 RN, 플러터, Unity, Xarmarin 등 여러가지가 있으나 이번 포스팅에서는 플러터에 초점을 맞춰 이야기를 진행합니다.




모바일 개발자에게 크로스 플랫폼이란?

모바일 개발자라면 누구나 한번쯤 크로스플랫폼에 혹하기 마련인 것 같다. 나 또한 그랬고 주변의 모바일 개발자들까지도 한번 씩은 혹한다는 걸 보면 똑같은 iOS, Android 앱을 꼭 별개의 앱으로 따로 개발해야 한다는 점은 네이티브 개발자에게 해소되지 않는 갈증으로 남아있는 듯 하다. 그래서인지 플러터는 굉장히 주목받고 있으며 무서울 정도로 빠르게 성장하고 있는 플랫폼인 것은 부정할 수 없다.

그러나 모순적이게도 동시에 계륵과도 같은 것이, 네이티브를 이미 현업에서 다루고 있다면 굳이 크로스 플랫폼을 추가로 배울 필요를 못느낀다는 것이다. 왜냐하면 이미 네이티브를 하나 다룰 줄 아는 시점에서 크로스 플랫폼을 배우는 것은 기회비용 측면에서 손해이기 때문이다. 쉽게 말해 만약 모바일로 모든 플랫폼을 개발하기 위해서라면 이미 안드로이드, iOS 중 하나를 할 줄 아는 상황에서 굳이 크로스플랫폼을 배우는 대신 나머지 하나를 네이티브로 학습을 하는 편이 낫다는 것이다. 아니면 차라리 다른 백엔드나 프론트엔드처럼 아예 다른 스택의 기술을 배우는 편이 장기적인 면에서는 더 도움이 될 수 있다. 그래서 백엔드 개발자가 토이프로젝트로 앱을 개발하고 싶다면 플러터를 추천 할지언정 앱개발자가 토이프로젝트를 한다면 굳이 크로스 플랫폼을 택해야 할 이유가 딱히 없는 모순에 빠지게 된다.



크로스 플랫폼의 장점

더 빠르게

크로스 플랫폼으로 개발하게되면 훨씬 더 쉽고 빠르게 개발할 수 있다. iOS, Android 두번 개발할 것을 한번에 개발할 수 있다는 강력한 장점이 있다.

단순히 따져도 두배정도의 생산성을 갖게 된다는데 실제로 크로스플랫폼을 경험해보신 분들에게 들어보면 실제로는 두배 이상의 생산성을 낼 수 있다는 간증을 어렵지 않게 들을 수 있다. 급변하는 IT 시장에서는 빠르게 변화하는 트렌드에 맞춰 서비스를 빠르게 개발해야만 한다. 빠른 출시로 서비스가 유효한지 빠르게 피드백을 통해 검증하고 서비스의 방향성을 빠르게 잡아가야 한다. 장인정신으로 좋은 서비스를 만드는 것은 그 이후가 된다. 따라서 새로운 비즈니스를 개발하는 입장에서는 크로스플랫폼을 이용하면 적은 인건비로 더 빠른 결과를 낼수 있다.


더 쉽게

또한 진입 장벽도 낮은 편이다. 특히나 플러터는 Dart라는 새로운 언어를 배워야 함에도 불구하고 입문이 쉽고 숙련자가 되기 까지의 시간과 비용이 훨씬 적게 든다. 실제로 iOS, Android, 플러터를 모두 사용하는 개발자분의 경험담에 따르면 플러터가 유독 쉬워서 기존 모바일 네이티브와 React Native를 포함한 다른 크로스 플랫폼보다 훨씬 빠르게 배우고 익힐 수 있었다고 한다. 이 부분은 개발자 취준생(특히 비전공자)분들 에게는 특히나 더 매력적인 포인트로 다가올 것이다.




크로스 플랫폼의 이면

빠르게 출시한 이후 서비스가 성공해서 충분한 리소스와 기술력을 갖춘 뒤에도 크로스플랫폼을 고집할까?

물론 크로스플랫폼을 끝까지 유지하는 서비스도 적지 않지만 결과적으로 전환한 사례도 어렵지 않게 찾아볼 수 있다. 쉽게 배우고 빠르게 개발하는 크로스 플랫폼의 단점은 무엇일까? 물론 여러가지가 있겠지만 가장 큰 이유는 안정성측면이 크다.

플러터 안정성의 한계

플러터로 겪은 분들의 경험담을 들어보면 보통 아래 기능 중 하나라도 사용하면 심각한 문제를 겪는다고들 한다.

  • HW 입출력 : 카메라, 마이크, 블루투스 등
  • 3rd 파티 라이브러리 : 지도, 광고(AdMob) 등
  • 플랫폼 종속 : 인앱 결제, 인앱 업데이트 등

아이러니하게도 대부분 프로토타입이나 학습단계에서는 사용해볼 확률이 낮은 기능 들이다. 즉 플러터가 괜찮은지 검증하려고 프로토타이핑을 할땐 안나왔다가 막상 출시하려고 하니 드러나는 문제가 많다는 것. 특히나 인앱 결제나 광고의 경우는 상용 앱이 아니면 써볼일도 없고 보통 마지막에 개발하는 경우가 많은데, 여기서 문제가 발생하면 수익에 직접적인 제동이 걸리므로 심각한 문제가 된다고들 한다. 이와 같이 크로스플랫폼에서 해결하기 참 어려운 문제가 자주 발생한다. 특히 플러터가 그 경향이 심한데 지원하는 공식 라이브러리 등의 기술 성숙도가 낮은 것이 이유이다. 결과적으로 2개(iOS, Android)를 하나로 개발하려다 3개(iOS, Android, 플러터)를 개발하는 경우가 생긴다.

당연하지만 Android와 iOS를 만드는 플랫폼사(Google, Apple)입장에서는 어찌됐든 네이티브를 우선 지원한다. 플러터 역시 구글에서 만들었지만 플러터와 안드로이드는 애초에 팀이 다르고 목적이 다르기 때문에 안드로이드보다 플러터를 우선 지원하는 일은 영원히 없을 것이다. 결국 크로스 플랫폼은 태생적으로 안정성면에서 한계를 가지고 태어날 수 밖에 없는 것이다. 이 이유로 큰 회사일수록 플러터를 선호하지 않는 경향이 있다.


🤔 만약 여기서 결론 지을 것이었다면 아마 이 글을 작성하지 않았을 것이다.




플러터의 새로운 시장 개척

02

의외로 플러터가 경쟁력에서 우위를 찾는 분야를 알게 되었는데, 바로 모바일이 아닌 데스크톱(혹은 웹) 상업용 어플리케이션 시장이다. 애초에 플러터의 크로스플랫폼은 모바일에 한정되지 않는다. Flutter 3.0 기준으로 Flutter는 Android, iOS, Web, Windows, MAC, Linux를 모두 지원한다. 2D GUI 엔진인 Skia 그래픽 엔진만 설치할 수 있다면 어느 곳이든 사용할 수 있다는 뜻이다.

식당, 은행, 병원, 주유소 등지에서 사용하는 키오스크와 같이 개인 PC나 모바일 단말이 아닌 환경에서 동작하는 상업용 어플리케이션들이 있다. 이런 경우 제조나 비즈니스적 제한사항에 따라 Windows, Android, Linux 등 다양한 플랫폼 기반이 될 수 있다. 카메라, 블루투스 등과 다른 외부 입출력을 사용하는 경우가 적고 비교적 복잡한 기능을 요구하지 않는 경우가 많다.

이 모든 제한 사항이 플러터에게 아주 적합한 환경이 된다. 디바이스가 Windows, Android, Linux 중 어느 OS를 사용하든 어느쪽이든 플러터라면 커버가 가능하고 심지어 가격절감을 위해 출시 이후에 Windows에서 Android 또는 Linux로 바꾸더라도 문제가 전혀 없다. 게다가 웹으로도 개발 가능하기 때문에 더더욱 플랫폼에 제한이 없으며 이 경우 업데이트도 용이해진다. 또한 생산성이 높아 개발 기간이 짧고 클라이언트를 혼자서 다 개발할 수 있다는 장점 때문에 SI 솔루션 개발에서도 유용하다.

나 역시도 몇년 전에 아주 간단한 키오스크 윈도우 어플리케이션을 안드로이드로 만들어 달라는 요청을 받은 적이 있었는데 그 이유가 윈도우 태블릿보다 안드로이드 태블릿이 훨씬 싸기 때문이었다. 키오스크와 같이 대량생산을 상정한다면 기업 입장에서는 충분히 해볼법한 고민일 것이다. 만약 이때 플러터가 있었다면 나라도 플러터 도입을 고민해 봤을 것이다.

결과적으로 사용자의 단말에 직접 설치하여 서비스를 운영하는 모바일 시장이 아닌 키오스크와 같은 비(非)모바일 시장에서 서비스에서는 오히려 플러터가 안드로이드보다 훨씬 강력할 수도 있다는 의미가 된다. 이 영역은 아직까지도 Android가 완전히 장악하지 못한 영역이기 때문에 경쟁하기에도 불리하지 않다.

그래서 모바일 시장에서 네이티브 앱들과 경쟁하는 것이 아니라 모바일 밖에서 새로운 시장을 개척해나가기에는 더 유리할 수도 있다.


성장 추세의 플러터 취업 시장

이러한 연유로 생각보다 플러터 개발자의 수요가 최근 많이 늘어난 편이며 난이도가 높지 않아 입문 이후 실무수준에 역량까지 도달하는데 오래걸리지 않으므로 신입 개발자의 채용이 예상했던 것 보다 훨씬 많다고 한다.

또한 학습이 쉽고 출시한지 얼마 안되서 이른바 고인물이 적기 때문에 비전공자 취업에도 굉장히 유리한 편이라고 한다. 안드로이드 5개월도 빠듯한 분량을 플러터로는 2개월이면 충분하기 때문에 실제로 국비지원과 같은 단기 커리큘럼에도 더 적합하다는 것이다. 그래서 비슷한 조건이라면 안드로이드보다 플러터로 취업이 더 쉽고, 심지어는 안드로이드 신입 개발자보다 플러터 신입 개발자의 연봉이 더 높은 사례도 종종 있다고 한다.


쉬운 취업이 곧 좋은 취업인가?

04

하지만 단순히 채용이 늘었다고해서 좋은 회사에 갈 수 있다는 의미는 아니다.

아직까지는 플러터를 활용한 고기능의 서비스를 개발하는 경우는 많지 않고 아까 말한듯이 단순한 기능이거나 신규서비스를 빠르게 개발하는 경우가 많다. 즉 단순한 일에 신입을 채용했다면 큰 기술력을 기대하지 않는다는 의미가 된다. 바꿔말하면 어렵게 취업한 그 신입 개발자에게는 그 회사에서 성장할 수 있는 역량의 최대치와 기회가 제한되어 있다는 의미이다. 즉 쉽고 빠르게 배울 수 있어서 허들이 낮다는 장점이 아이러니하게도 개발자 개인 입장에서는 성장에 한계가 빨리 찾아오는 결과로 이어질수도 있다.

전체적인 개발 취업시장의 입장에서는 플러터가 전망이 좋을 수는 있으나, 개발자 개인의 입장에서는 꼭 앞으로 전망이 밝다고 말하기 어려울 수 있다는 것이다. 이미 우리에게는 Java, Javascript(NodeJS)로 충분히 준비되지 않은 인력이 시장에 대거 투입되었을 때 어떤일이 일어나는 지 겪어보지 않았는가?




결론

03

크로스플랫폼의 한계가 아직은 섣부른 판단일 수도 있다. 플러터가 앞으로 시장에 진출하고 꾸준한 업데이트로 안정화 되어 복잡하고 어려운 기능도 개발할 수 있다면 한계점인 안정성 문제도 조만간 충분히 극복할 수 있을 것이다. 플러터의 전망이 절대 어둡지 않으며 기존 모바일 플랫폼(Android, iOS)과 경쟁하기 보다는 오히려 새로운 시장을 개척해나가며 꾸준히 성장하지 않을까 조심스럽게 예상해본다.

하지만 한편으로는 개발자 개인의 입장에서는 당장은 취업하기에 유리할 수는 있으나 장기적인 커리어 측면에서는 조심하라고 당부하고 싶다. 비전공자가 취업하지 좋은 쉬운 기술이라는 것이 얼마나 허울좋은 말인지 생각해보아야 한다. 얼핏 달콤해보이는 이 유혹은 반대로 말하면 당신 말고도 누구나 할 수 있다는 의미가 되며 무엇보다도 명확한 성장의 한계가 존재한다는 의미가 된다. 또한 최근들어 코로나 여파로 인한 개발자 취업시장 호황도 끝이 났다는 기사가 연이어 나오는 상황이니 더더욱 조심스러울 필요가 있다. 만약 모바일 개발자로 취업을 고민 중이시라면 플러터가 도움이 될 수는 있으나, 장기적으로 본다면 네이티브나 백엔드를 반드시 함께 공부할 것을 추천드린다.

비록 김빠지는 결론일 수도 있겠으나, 내 코가 석자인데 어쩌겠는가…