[플러터] 플러터(Flutter) 시작

2 분 소요

플러터 등장 배경

애플은 ios 운영체제를 발표하면서 오브젝티브-C로 만든 아이폰용 앱을 출시할 수 있는 앱스토어를 만들었고, 구글도 안드로이드 운영체제를 발표하면서 자바를 사용해 안드로이드용 앱을 판매할 수 있는 구글 플레이를 만들었다.

애플과 구글은 각자의 앱 개발 생태계를 확장하려는 목적으로 새로운 언어를 내놓았다. 애플은 스위프트(swift)라는 언어, 구글은 코틀린(kotlin)이라는 새로운 언어를 만들었다.

오브젝티브-C나 스위프트로 ios앱을 개발하거나 자바나 코틀린으로 안드로이드 앱을 개발하는 것처럼 각 모바일 운영체제에 맞는 언어로 개발한 앱을 네이티브 앱(native apps)이라고 한다.

웹앱, 하이브리도 앱 등장

웹앱(web apps)은 웹 기술을 이용해 만든 앱이다. 앱의 화면을 나태내는 뷰를 모바일용 웹으로 만들어 다양한 기종과 해상도에 대응하며 빠르게 개발할 수 있다. 네이티브 앱처럼 알림도 보내고 오프라인에서도 동작하는 프로그레시브 웹앱(progressive web apps, PWA)도 주목받고 있다.

하이브리드 앱(hybride apps)은 웹앱을 만든 후 별도의 프레임워크를 이용해 운영체제별로 동작하는 앱을 만드는 기술이다.

하지만 이러한 기술로 만든 앱은 네이트브 앱과 비교해 상대적으로 속도가 느리고 애니메이션 사용에도 제약이 있는 등 스마트폰 성능을 충분히 활용할 수 없다.

이때 리액트 네이티브가 등장한다.

리액트 네이티브와 플러터

구분 리액트 네이티브 플러터
개발 주체 페이스북 구글
언어 자바스크립트 다트
출시 2015년 2017년
성능 빠르지만 네이티브 앱만큼은 아님 네이티브 앱에 근접한 속도
학습 곡선 높음 낮음
대표앱 페이스북, 인스타그램,핀터레스트 등 알리바바, 구글 애드센스, 리플렉틀리 등
장점 저변이 넓은 자바스크립트 생태계, 웹 개발자의 접근성, npm으로 많은 패키지 이용 가능 다양한 위젯, 강력한 애니메이션 성능, 블루투스 등 네이티브 하드웨어와의 연결성
단점 기본 위젯이 부족해 커스텀해 사용, 안드로이드, ios 네이티브 위젯을 이용하기에 os 판올림에 따른 업데이트 필요, 블루투스 등 네이티브 커스텀해 통신하는 부분 개발이 어려움 플러터 sdk로 앱 크기가 큼, 아직 개발 생태계가 성숙하지 않아 빠른 피드백 얻기가 어려움, 업데이트 주기가 빠름(분기별)
최종목표 자바스크립트로 웹, 앱, 데스크톱 모든 플랫폼을 개발할 수 있는 통합 솔루션 개발 안드로이드, ios, 웹, 윈도우10 앱을 같은 코드로 개발할 수 있는 플랫폼 개발

페이스북에서 만든 리액트 네이티브(react native)는 여러 운영체제에서 동작하는 앱을 개발할 수 있는 크로스 플랫폼 앱 개발 프레임워크이다. 네이티브 언어로 앱을 개발 시 사용장 인터페이스를 변경할 때마다 다시 빌드해야 하지만, 리액트 네이티브는 코드를 변경하면 화면에 바로 표시되므로 개발 효율이 좋다.

리액트 네이티브에서는 자바스크립트가 다리 역할을 하면서 안드로이드나 ios의 네이티브 api에 접근한다. 따라서 웹앱이나 하이브리도 앱보다는 속도가 빠르지만 화면에 표시할 내용이 많으면 느려질 수 있다. 그리고 운영체제가 업데이트되면 디자인이 의도한 바와 달라질 수 있다.

플러터는 똑같이 크로스 플랫폼 앱 개발 프레임워크지만 구글에서 만든 다트라는 언어를 사용한다. 따라서 자바나 c#같은 컴파일 언어가 가진 특징을 활용해 앱을 개발할 수 있다.

플러터는 크게 프레임워크와 엔진, 임베더 계층으로 구성돼 있다. 프레임워크 계층에는 다트 언어로 개발된 여러 가지 클래스가 있으며 이러한 클래스를 이용해 앱을 개발한다. 그리고 엔진 계층은 플러터의 코어를 담당하는 대부분 c와 c++ 언어로 만들어졌다. 여기서는 데이터 통신, 다트 컴파일, 렌더링, 그리고 시스템 이벤트 등을 처리한다. 임베더 계층에는 플러터 앱이 크로스 플랫폼에서 동작하도록 플러터 엔진이 렌더링한 결과를 플랫폼별 네이티브 언어로 뷰를 만들어 화면에 보여준다. 따라서 다트 언어로 소스 파일만 작성하면 플러터의 각 계층을 거쳐 플랫폼별 앱을 개발할 수 있다. 이 가운데 내부적인 처리는 신경쓰지 않고서 플러터나 다트 언어를 업데이트만 하면 된다.

플러터 장점

  1. 높은 개발 효율 안드로이드, ios앱을 동시에 개발할 수 있고 이렇게 개발된 앱은 어떤 운영체제에서도 똑같은 사용자 인터페이스와 사용자 경험을 제공. 또한 플러터의 핫 리로드(hot reload)기능은 소스 수정 후 번거로운 빌드 과정 없이 결과 화면에 바로 표시해 주므로 개발 시간 단축.

  2. 유연한 사용자 인터페이스 다양한 위젯을 제공하므로 사용자 맞춤형 앱을 쉽게 만들 수 있다. 플러터의 위젯을 활용하면 ios에서 구글의 머티리얼 디자인이 적용된 앱을 만들거나 반대로 안드로이드에서 ios 스타일 앱을 개발할 수 있다.

  3. 빠른속도 플러터는 전체화면을 그릴 때 스키아(skia)엔진을 사용. 초당 60프레임 이상의 속도로 화면을 갱신한다.

  4. 웹 플러터 sdk를 모바일 앱에서 웹으러 더욱 확장된다고 발표함. 허밍버드라 불리는 이 프로젝트는 플러터의 기본 라이브러리를 사용해 손쉽게 웹을 구현할 수 있다. 아직은 베타버전이지만 정식 버전의 출시를 준비하고 있다.