Flutter 소개

Flutter 란? Flutter의 소개는 https://flutter.io/ 에 나와있습니다.

"Flutter allows you to build beautiful native apps on iOS and Android from a single codebase."

(엘리베이터 피치에 어울리는 표어적 문구로 작성한) Flutter의 슬로건은‘빠른 시간 안에 아름다운 네이티브 앱 빌드’ 입니다.

  • 빠르 시간 안에
  • 아름답고 명시적이고 유연한 UI
  • 네이티브 성능(단일 코드베이스로 크로스 플랫폼을 개발)

Flutter

기존에도 하나의 코드로 여러개의 환경에서 동작하는 "크로스 플랫폼" 프레임워크를 향한 시도는 있었습니다.

모든 새로운 시스템을 만났을때 그렇지만, 사람들은 어떤점이 특별한지 그리고 “Flutter가 가지는 새롭고 흥미로운 점이 어떤것인지?” 궁금해합니다. 이는 당연한 질문이며, 이 글에서 비즈니스와 기술적인 관점에서 Flutter에 대해 이야기 해보고자 합니다.

TIP

알리바바의 이십억 사용자 중에 오천만 명은 Flutter를 사용합니다 (2018.09.19 기준.)

가장 큰 온라인 쇼핑 회사인 알리바바가 iOS와 안드로이드에서 5천만 다운로드를 넘긴 시안유 앱에서 훌륭한 앱 경험을 구축하기 위해 Flutter를 사용했습니다.

알리바바가 플러터를 이용해 만든 5천만 사용자 시안유 앱 (Flutter 개발자 이야기)

알리바바의 미션은 어디서든 사업을 쉽게 만드는 것입니다. - 비즈니스 관점

TIP

회사 경영진이나 팀원, 고객들이 단지 뭔가 대단한 기술이라는 이유만으로 최신 기술을 채택하는 데 열정을 보이지는 않습니다. 그들 역시 대체로 기술을 잘 알고 있는 사람들이지만, 그게 그들의 유일한 관심사는 아닙니다. 그들은 새로운 기술을 사용하는 것이, 예컨대 신규 고객 확보나 위험 감소와 같이, 회사의 성공에 도움이 될지 알고 싶어 합니다.

🍑회사 경영진에게 Flutter를 사용해야 할 이유를 설득하고 싶은 개발자, Flutter를 사용하여 제품을 개발할지 스스로 결정하고 싶은 개발자 분들에게 추천합니다. by Google

빠른 시간안에 개발

기업의 경우 돈을 버는게 목적이고 돈을 벌기 위해서 마케팅, 영업, 기획, 사용자의 등의 다양한 비즈니스 요구사항이 존재한다. 기업에서 개발하는 소프트웨어는 이러한 비즈니스 요구사항을 실체로 구현하며 개발 & 유지보수 된다. 비즈니스 요구사항이 실체화 되는 구간이 짧으면 더 빠르게 출시하여 더 빠르게 비즈니스에 대응 할 수 있다. 그러므로 효용성(투자한 시간이나 노력에 비해 더 가치가 있다)이 중요하고 Flutter를 사용한 iOS와 안드로이드는 단일 코드베이스에서 구현되므로 효용성이 높다고 할 수 있다.

완전한 크로스 플랫폼 대응

Flutter는 현재 iOS 및 Android용 모바일 앱을 빌드하는 데 초점이 맞춰져 있습니다. Flutter가 현재의 모바일 프레임워크와 구분되는 더욱 크고 장기적인 비전이 있습니다. Flutter는 단순한 프레임워크가 아니라 화면을 사용하여 상호 작용하는 앱을 빌드하기 위한 완전한 SDK 입니다. 즉, Flutter에는 렌더러와 렌더링할 것들(Flutter에서 위젯이라고 함)을 비롯하여 사용자 인터페이스를 만드는 데 필요한 모든 것이 있다는 의미입니다. Flutter가 완전한 SDK라는 사실은 디스플레이를 포함한 사실상 어떤 하드웨어에서든 실행하도록 포팅 가능하다는 의미입니다. Flutter앱은 점점 더 휴대폰의 범위를 뛰어넘어 확장할 것입니다. (IDC의 추정에 따르면 2020년에 데스크톱, 홈 어시스턴트, 자동차, 가전기기, 기타 IOT 와 같은 기기가 300억 개를 넘을 것이라고 합니다.) 즉, Flutter의 확장성은 미래의 개발비용을 아끼도록 해줍니다.

TIP

플러터로 모바일 앱과 데스크탑 앱을 동시에 출시 사례

https://feather-apps.com/

아름답고 명시적이고 유연한 UI

Google Play Store에 있는 380만 개의 앱과 Apple App Store에 있는 200만 개의 앱과 경쟁하는 현실에서 어떻게 앱의 성공을 보장할 수 있을까요? 사용자가 앱을 다운로드하도록 하는 데까지는 그럭저럭 성공하더라도, 사용자가 30일 후에도 앱을 활발히 사용할 가능성은 3%에 불과합니다. 최근 몇 년간 가장 큰 인기를 끌었던 모바일 앱을 살펴보면 각각 나름대로 고유하고 눈에 띄는 디자인을 지니고 있음을 알 수 있습니다. 뿐만 아니라, 아름다운 앱은 이런저런 상도 받으면서 가치 있는 대중성도 얻게 됩니다. 마지막으로, 디자이너에게 훌륭하고 멋진 아이디어가 있었는데 그 아이디어가 실제로 구현되는 시점에 돌이켜보면 툴킷의 제한과 커스텀뷰를 개발하는 시간 때문에 최초의 아이디어를 제대로 살리지 못하는 경우가 종종 있습니다. Flutter는 자신의 비전을 구현하는 앱을 빌드하려는 디자이너에게 자신 있게 '예'라고 대답 할 수 있게 해줍니다.

네이티브 앱

네이티브 앱은 장점이 많습니다. 네이티브 앱은 시작 속도가 더 빠르다는 점도 있지만, 가장 중요한 점은 더욱 원활하게 작동하며 기존 앱보다 끊김이나 버벅거림이 덜하다는 사실입니다(버벅거림은 아름다운 일이 아님). 또한 네이티브 앱은 개발자에게 앱의 동작에 대해 더 강력한 제어 능력을 부여합니다. 그러므로 사용자의 경험이 좋습니다.

네이티브 앱의 장점을 누리기 위해, 모바일 개발자는 보통 별개의 도구와 언어를 사용하여 두 개의 앱을 따로 빌드해왔습니다. Android, iOS 개발자 팀을 따로 두고서 개발한 후 API,인터렉션 등을 팀 간에 조정해야 하는 경우가 자주 있습니다. 이로 인해 비용이 상당히 상승하고 위험이 증가하고 출시 시간이 길어집니다. 개발자는 Flutter를 사용하여 단일 코드베이스로 통합하고 개발 팀을 하나로 뭉치고 위험을 줄이고 출시 시간을 앞당길 수 있습니다. 이 모든 것이 네이티브 앱의 이점을 누리는 동시에 가능한 일들입니다. 즉, 앱을 사용자들에게 전달하는데까지의 시간을 엄청나게 줄여주고 개발 비용이 감소하게 됩니다.

새로운 아이디어와 새로운 레이아웃을 빠르게 시도해 볼 수 있습니다. - 기술적 관점

빠른시간안에 개발

Flutter는 앱을 다시 처음부터 새롭게 빌드할 필요없이 빠르고 쉽게 여러분의 앱에 변화를 가할 수 있도록 도와주는 Stateful hot reload 기능을 통해 속도 높은 개발 환경을 제공합니다.

Stateful hot reload 는 고급 컴파일러 기술과 Flutter가 네이티브이고 반응형 뷰를 기반으로 한다는 사실 덕분에 가능합니다. 속도가 빨라졌다는 점 외에도, 많은 개발자가 Flutter 덕분에 코딩 방식이 극적으로 변했다고들 합니다. 개발자는 Flutter로 새로운 아이디어와 새로운 레이아웃을 빠르게 시도해 볼 수 있습니다. 개발자는 이해관계자가 요청하는 변경 사항을 그들이 보는 앞에서 바로 구현할 수 있습니다.

TIP

2Dimensions의 공동 창업자 Luigi Rosso는 Flutter에 대해 다음과 같이 말합니다.

Hot Reload는 저에게 작업에만 계속 집중할 수 있는 피드백 환경을 제공해주었습니다. 저의 가장 큰 생산성 방해 요소는 바로 개발자보다 느린 생산 도구들이었습니다. Flutter는 마침내 이 장애물을 없애주었습니다.

아름답고 명시적이고 유연한 UI 회사 웹사이트와 웹 앱에 대해서도 그러하듯이, 회사의 브랜딩을 보완해주는 모바일 앱을 원하는 회사가 점점 늘고 있습니다. 이에 따라 높은 수준의 맞춤화 작업이 필요합니다. Flutter에 내장된 아름다운 머터리얼 디자인 위젯, 쿠퍼티노(Cupertino, iOS-flavor) 위젯, 풍부한 모션 API, 부드럽고 자연스러운 스크롤, 플랫폼 인식 기능을 활용하여 디자인을 표현할 수 있다

네이티브 앱

'네이티브'라는 용어는 모바일에 사용되는 용어이므로 컴퓨팅 기술의 다른 영역에서는 실제로는 사용되지 않습니다. 예를 들어 Windows 및 macOS 컴퓨터 그리고 다른 많은 종류의 컴퓨터에 Linux를 설치할 수 있지만, Windows 또는 macOS를 '네이티브'라고 부르거나 Linux를 '교차 플랫폼' 또는 '하이브리드' 솔루션이라고 부르지는 않습니다. 사람들은 Linux를 그냥 Windows나 macOS와 똑같이 네이티브로 생각합니다. 그냥 그게 당연하다 생각하기 때문이죠.

컴퓨팅에 대해 '네이티브'의 정의를 더욱 정밀하게 내려보자면 '특정 시스템을 위해 디자인되거나 특정 시스템에 내장된다는 뜻으로, 특히 특정 프로세서, 컴퓨터 또는 컴파일러와 그 안에 작성된 프로그램과 관련된 언어를 나타냅니다.' Flutter 앱은 iOS와 Android에서 모두 네이티브 기계(ARM) 코드로 컴파일됩니다.

Android, iOS 개발자들은 오랜시간 OS의 버전 파편화에 대응해 오느라 고생을 했습니다. Flutter는 플랫폼 캔버스에 직접 렌더링하는 완전한 SDK이므로 OS에 따른 버전별 대응을 하지 않아도 문제가 발생하지 않습니다. Android OS, iOS의 버전이 올라가면 플랫폼의 위젯, 글꼴 등이 변경될 수 있는데 직접 랜더링을 하므로 앱이 플랫폼에 종속되지 않습니다. 예를 들어 Android Jelly Bean(4.1.2)을 실행하는 휴대폰에 머티리얼 디자인 위젯을 사용하는 Flutter 앱이 있습니다. 이 휴대폰은 머티리얼 디자인이 처음 만들어진 시점보다 2년이나 앞서 나온 제품이므로, 이 휴대폰에는 머티리얼 디자인용으로 내장된 위젯이 전혀 없습니다. 하지만 Flutter 앱은 이 휴대폰에서도 더 최근 버전의 OS가 설치된 더 최신 기종의 휴대폰에서와 똑같이 작동하고 멋진 모습을 보여줍니다. (안드로이드에서는 이러한 버전별 호환성을 지원하기위해 서포트라이브러리를 제공하고 개발자는 이를 활용하여 버전별 대응을 해주어야 합니다.)

Flutter의 단점 (제한 사항)

어떤 일에든 항상 절충할 점이 있게 마련인데, Flutter 역시 예외는 아닙니다.

  • 최종 완성된 Flutter 앱은 Flutter 위젯과 렌더러를 포함하므로 플랫폼 위젯과 렌더러를 활용하는 앱보다 크기가 약간 더 큽니다.
  • 하나의 특정한 플랫폼에 긴밀하게 연계되어 있는 앱이나 주로 알림 기능을 제공하는 백그라운드 서비스를 제공하는 앱과 같이 플랫폼에서 제공되는 뷰 주위의 래퍼가 주된 역할인 앱이 있습니다. 이러한 앱을 Flutter로 작성할 수 있지만 그 이점을 충분히 누리지는 못할 것입니다.
  • 잠재적 문제는 Flutter가 비교적 새로운 도구라는 점입니다. 따라서 당연히 기능과 커뮤니티 지원이라는 측면에서 모두 Flutter가 기존 도구를 따라잡으려면 시간이 어느 정도 걸릴 것입니다.

과연 트랜드가 될 것인가?

2019.02.19일 기준 구글 트랜드 통계를 보면 다음과 같다.

열심히 리엑트 네이티브를 따라잡고 있고 구글이 밀고 있다는 점으로 보아 지금이 남들보다 빠르게 시작하기에 좋은 시점이라고 생각한다.

Flutter TIP

TIP

모바일 앱 생산자의 가장 흔한 어려움 중 하나는 초기 스케치 디자인을 사용자들이 사용해 볼 수 있는 인터랙티브 프로토타입으로 만드는 일입니다. 개발자 도구와 컴포넌트의 가장 큰 서비스 제공사인 Infragistics는 이번주에 있었던 Google I/O에서 Flutter에대한 공식 지원을 선언했습니다. 이들은 그들의 서비스를 통해 디자이너와 개발자 사이의 간극을 어떻게 줄일 수 있는지 보여줬습니다. Indigo Design to Code Studio는 디자이너들이 Sketch 파일에 상호작용을 넣을 수 있도록 해주고 pixel-perfect한 Flutter 앱을 생성해줍니다.

TIP

2Dimensions는 Flutter를 위한 강력한 인터랙티브 애니메이션을 위한 새로운 도구를 발표했습니다. https://www.2dimensions.com/

Flutter 로 만들어진 앱 찾아보기

https://itsallwidgets.com 에 가면 Flutter로 만들어진 앱들을 더 만나 볼 수 있습니다.

참고