< Web & Desktop 개발 – Introduction >
우리는 지금까지 Dart의 기본 문법과 기능들, 그리고 Flutter를 통한 모바일 프로그래밍에 대해서 알아 왔습니다. 그리고 다음으로 Dart/Flutter를 통한 Web과 Desktop 어플리케이션을 다루고 합니다. 같은 언어와 프레임워크로 다양한 분야를 지원할 수 있는 것은, Dart 언어의 가장 큰 장점 중 하나 이며, 앞서의 연재 글에서 주요 프로그래밍 언어 별로 지원하는 플랫폼에 대한 부분을 정리한 내용에서 세부적으로 다루었습니다.
앞으로 Web으로 지칭하는 것은, 일반적인 Web browser 류의 client가 Web server에 접속하여 다양한 컨텐츠와 정보를 제공받고, client의 요청에 따라 server에서 작업을 수행하는 형태의 서비스를 의미합니다. 앞서 Dart 언의 HTTP 기능에 대해서 설명하면서, client와 server를 HTTP 프로토콜을 사용하여 주고 받는 부분을 설명했는데, 지금부터 설명할 내용은 이렇게 주고 받는 (HTTP가 실어 나르는) 내용에 대한 부분에 집중한다고 보면 됩니다. 이 부분은 통상 HTML/CSS/JavaScript가 보편적으로 사용되는 영역으로, 해당 부분을 어떻게 Dart와 Flutter로 개발하는지가 앞으로의 핵심 주제 입니다.
다음으로 Desktop은 일반적인 데스크탑과 노트북 컴퓨터 상에서 MS Windows, macOS, Linux 운영체제를 기반으로 동작하는 프로그램을 의미합니다.
Dart/Flutter로 Web을 프로그래밍 하는 것은 지금까지의 내용에 대한 연장선상에 있습니다. 하지만 추가적으로 설치할 프로그램과 개념들에 대한 이해가 필요하므로, 남은 내용은 다음의 단계로 설명이 이루어질 예정입니다.
첫째로 Dart/Flutter로 Web을 개발하기 위한 개발 환경을 구축합니다. 우리가 앞으로 다룰 내용은 Web browser와 Web server 사이에서 주고 받는 컨텐츠 적인 측면을 주로 다룰 예정이므로, (비록 우리가 Dart를 통하여 이러한 컨텐츠를 네트워크에서 주고 받도록 하는 HTTP를 배웠지만) Dart/Flutter 언어에서 이런 부분을 용이하게 지원하는 개발용 웹 서버인 WebDev를 이해하고 설치합니다. 또한, 앞서 Flutter에서 개발에 필요한 화일들을 자동으로 생성하여 줌으로써, 개발자가 프로젝트를 용이하게 시작하도록 도와준 것처럼, Web을 개발하는데 있어 필요한 화일들을 자동으로 먼저 생성해 주는 도구로서 Stagehand를 이해하고 설치합니다.
둘째로 모든 프로그래밍 언어의 시작과 동일하게 Dart/Flutter를 토대로 Web 개발을 시작해 보는 “Hello, World!”를 만들어 봅니다. 이를 통해서, 가장 간단한 프로그램이지만, 완전한 프로그램을 만들기에 필요한 부분을 점검하게 됩니다.
셋째로 Dart/Flutter로 Web을 개발할 수 있는 세가지 접근 방법을 설명합니다. 이는 Dart for Web, AngularDart, 그리고 Flutter for Web 입니다. 각각의 방법은 장단점이 있으며, 이들 기술이 갖는 특징과 개발자의 역량에 맞춰서, 개발하고자 하는 프로그램에 맞는 방법을 선택하면 됩니다. 간단히 설명하면, Dart for Web은 Dart 언어의 built-in-features인 dart:html을 사용하는 방법입니다. HTML/CSS를 이해하는 개발자가, 이들을 직접 다루는 방법이라고 보면 됩니다. AngularDart는 기존의 Angular 혹은 AngularJS에 대한 지식이 있는 개발자가 선택할 수 있는 방법입니다. 마지막으로 Flutter for Web은 HTML/CSS에 대한 지식이 없어도, 지금까지 우리가 수행한 Flutter 기술을 그대로 사용하여 Web을 개방하는 방법 입니다. 세가지 방법에 대해서 전체적으로 다루겠고, 세가지 방법에 각각의 장단점이 있지만, 우리는 Dart/Flutter의 장점에 집중하자는 의미에서 세번째 방법인 Flutter for Web에 조금 더 방범을 두고 진행할 예정입니다.
넷째로 이미 우리가 살펴보았던 Dart 언어의 HTTP 기능을 사용한 Web server 개발에 대해서 다시 한번 살펴본다. 단 처음부터 모든 것을 개발자가 스스로 만들어야 하는 이 접근 방법이 아니고, HTTP server 들이 제공해야 하는 주요 기능을 이미 대부분 구현한 HTTP Framework를 사용할 것 입니다. Dart 언어의 인기가 올라가기 시작한 것이 최근의 일이지만, 이미 몇가지 훌륭한 오픈소스 HTTP Framework들이 존재하며, 이들을 통하여 개발자가 보다 수월하게 하지만 보다 완성도 있는 HTTP server를 만들도록 합니다.
다섯째로 Server 프로그래밍에서 일반화되고 있는 컨테이너 기술을 적용해 보는 방법을 설명하고자 합니다. 이를 통해서 Dart와 Flutter를 지원하는 공식(official) Docker 이미지를 살펴보고, 우리가 직접 만들 HTTP 서버를 Docker 상에서 돌려보는 경험을 갖게 됩니다. 이 부분을 위해서는 읽는 이가 Docker에 대한 기본 지식과 경험이 있어야 합니다.
마지막으로 Dart/Flutter for Desktop에서는 현재 공식 릴리즈가 나오지 않은 Flutter Desktop을 중심으로 설명합니다. 이 글을 쓰는 시점에서 Flutter for Desktop은 macOS에서 나름 완만한 동작을 하고 있으며, MS Windows 등에서는 미흡한 것으로 되어 있습니다. 하지만, 수 많은 사람들이 큰 관심을 기울이고 있고, 2020년에는 나름 의미 있는 소프트웨어가 출시될 예정이기에, 이 부분을 다루고자 합니다.
마무리
Dart와 Flutter의 능력을 확인하는 마지막 주제라고 생각합니다. Web의 경우는 개발자의 성향과 역량에 맞춰서 선택할 수 있는 세가지 길이 있으니, 장단점과 앞으로의 발전 방향을 보고 본인에게 맞는 길을 선택하기 바랍니다. Desktop은 개발자들의 흥미가 점차 낮아지는 영역이지만, 분명 필요로 하는 분야가 존재합니다. 아직은 Dart/Flutter가 경쟁력을 확보하고 있지는 않지만, Flutter의 발전 가능성을 높게 평가한다면, 꼭 경험해 보기 바랍니다.
Creative Commons License (CC BY-NC-ND)