Thursday, March 7, 2024

Flutter 웹 개발 완벽 가이드: 빌드부터 Firebase/GitHub Pages 배포까지

Flutter란 무엇인가?

Flutter는 Google이 개발하고 오픈소스로 제공하는 UI 툴킷입니다. 단일 코드베이스를 사용하여 모바일(iOS, Android), 웹, 데스크톱(Windows, macOS, Linux)용으로 아름답고 네이티브하게 컴파일된 애플리케이션을 빌드할 수 있는 것이 가장 큰 특징입니다. 개발에는 클라이언트 개발에 최적화된 프로그래밍 언어인 'Dart'를 사용합니다.

Flutter의 핵심적인 장점은 '한 번 작성하면 어디서든 실행된다(Write once, run anywhere)'는 점입니다. 이를 통해 하나의 코드로 iOS와 Android 양쪽을 모두 지원하는 고성능 앱을 개발할 수 있을 뿐만 아니라, 웹과 데스크톱으로도 손쉽게 확장할 수 있습니다. 결과적으로 개발 시간, 비용, 복잡성을 획기적으로 줄일 수 있습니다.

Flutter의 아키텍처는 독특합니다. 웹뷰(WebView)나 운영체제(OS)에서 제공하는 기본 UI 부품(OEM 위젯)에 의존하는 대신, 자체적인 고성능 렌더링 엔진인 'Skia'를 사용하여 화면의 모든 픽셀을 직접 그립니다. 이를 통해 개발자는 UI를 완벽하게 제어할 수 있으며, 모든 플랫폼에서 일관된 디자인과 부드러운 애니메이션을 보장할 수 있습니다. '모든 것이 위젯이다'라는 철학을 바탕으로, 작고 재사용 가능한 컴포넌트를 조립하여 복잡한 UI를 직관적으로 구성할 수 있습니다.

개발자에게 Flutter는 환상적인 개발 환경을 제공합니다. 안드로이드 스튜디오, 비주얼 스튜디오 코드, 인텔리제이와 같은 인기 IDE에 플러그인 형태로 완벽하게 통합됩니다. 특히 주목할 만한 기능은 '상태 유지 핫 리로드(Stateful Hot Reload)'입니다. 이 기능을 사용하면 코드를 변경했을 때, 앱의 상태를 그대로 유지한 채 1초 이내에 변경 사항을 실행 중인 앱에 즉시 반영할 수 있습니다. 덕분에 UI 프로토타이핑, 기능 추가, 버그 수정 등의 작업이 훨씬 빠르고 상호작용적으로 이루어집니다.

Flutter를 이용한 웹 애플리케이션 개발의 장점

초기에는 모바일에 중점을 두었던 Flutter지만, 이제 웹 지원이 성숙해지면서 풍부한 기능을 갖춘 웹 애플리케이션을 구축하기 위한 매력적인 선택지가 되었습니다. 주요 장점은 다음과 같습니다.

  • 진정한 크로스플랫폼 개발: 앞서 언급했듯이, 모바일 앱과 웹 앱 간에 단일 코드베이스를 공유할 수 있다는 것은 개발의 패러다임을 바꿉니다. 이를 통해 비즈니스 로직, UI, 사용자 경험의 일관성을 유지하면서 개발 및 유지보수 비용을 크게 절감할 수 있습니다.
  • 표현력 있고 유연한 UI: Flutter는 머티리얼 디자인(Material Design)과 쿠퍼티노(Cupertino, iOS 스타일) 디자인 가이드라인을 따르는, 아름답고 사용자 정의가 가능한 방대한 위젯 라이브러리를 제공합니다. 기존의 HTML, CSS의 제약에서 벗어나 픽셀 하나까지 완벽하게 제어하는 창의적인 UI를 구현할 수 있습니다.
  • 뛰어난 성능: Flutter 웹은 두 가지 렌더링 옵션을 제공합니다. 넓은 호환성과 작은 다운로드 크기에 최적화된 'HTML 렌더러'와, WebAssembly를 사용하여 Skia 엔진의 성능을 브라우저로 가져오는 'CanvasKit 렌더러'입니다. 특히 CanvasKit은 네이티브 앱에 가까운 그래픽 성능을 제공하여, 복잡한 애니메이션과 부드러운 스크롤이 중요한 그래픽 집약적인 애플리케이션에 이상적입니다.
  • 개발 속도 향상: '핫 리로드' 기능은 웹 개발에서도 완벽하게 지원됩니다. 개발자는 앱을 새로고침하거나 현재 상태를 잃지 않고도 코드 변경 결과를 브라우저에서 즉시 확인할 수 있습니다. 이처럼 빠른 피드백 루프는 개발, 테스트, 디버깅 과정을 놀랍도록 효율적으로 만듭니다.

Flutter 웹 애플리케이션 빌드 및 배포 과정

Flutter 웹 애플리케이션을 만들고 빌드하는 과정은 매우 간단합니다. 아래 단계별 가이드를 따라 해보세요.

  1. Flutter SDK 설치: 아직 설치하지 않았다면, 공식 웹사이트에서 Flutter SDK를 다운로드하여 설치하고 시스템 경로(PATH)에 추가합니다.
  2. 웹 지원 활성화 확인: 최신 버전의 Flutter에서는 웹 지원이 기본적으로 활성화되어 있습니다. 터미널에서 flutter devices 명령을 실행하여 'Chrome'이나 'Web Server'가 목록에 있는지 확인하세요. 만약 없다면 flutter config --enable-web 명령으로 활성화할 수 있습니다.
  3. 새로운 Flutter 프로젝트 생성: CLI를 사용하여 새 프로젝트를 생성합니다. 이 명령어는 웹, 모바일, 데스크톱용으로 미리 설정된 간단한 카운터 앱을 포함하는 새 디렉터리를 만듭니다.
    flutter create my_awesome_app
  4. 로컬에서 앱 실행: 새로 생성된 프로젝트 디렉터리로 이동한 후(cd my_awesome_app), Chrome 브라우저에서 앱을 실행합니다.
    flutter run -d chrome
  5. 프로덕션용으로 빌드: 앱 개발이 완료되면, 배포용 빌드를 생성합니다. 이 명령어는 Dart 코드를 JavaScript로 컴파일하고, 배포에 필요한 모든 HTML, CSS, 에셋 파일을 생성합니다.
    flutter build web
  6. 빌드 결과물 확인: 빌드 과정이 끝나면 build/web 디렉터리 안에 웹 앱을 위한 모든 정적 파일이 생성됩니다. 이 디렉터리가 바로 웹 서버에 배포할 결과물입니다.

이 과정을 통해 배포 가능한 웹 애플리케이션이 준비되었습니다. 다음 장에서는 Firebase와 GitHub Pages 같은 인기 있는 서비스를 사용하여 무료로 호스팅하는 방법을 자세히 알아보겠습니다.

Firebase와 GitHub Pages를 활용한 배포 방법

Firebase Hosting과 GitHub Pages는 Flutter 웹 앱과 같은 정적 사이트를 배포하기 위한 훌륭하고 개발자 친화적인 서비스입니다. 두 서비스 모두 빠르고 안정적이며, 넉넉한 무료 플랜을 제공합니다.

Firebase Hosting을 이용한 배포

Firebase는 Google의 모바일 및 웹 애플리케이션 개발 플랫폼으로, 글로벌 CDN과 무료 SSL 인증서가 포함된 빠르고 안전한 웹 호스팅 기능인 'Firebase Hosting'을 제공합니다.

  1. Firebase CLI 설치: 먼저 Firebase 커맨드 라인 도구가 필요합니다. npm을 통해 설치할 수 있습니다: npm install -g firebase-tools
  2. 로그인 및 Firebase 초기화: firebase login 명령으로 Google 계정에 로그인한 후, Flutter 프로젝트의 루트 디렉터리에서 firebase init을 실행합니다.
  3. Hosting 설정: 초기화 마법사에서 키보드 방향키를 사용하여 'Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys'를 선택합니다. 이후 나타나는 질문에 다음과 같이 답합니다.
    • 기존 Firebase 프로젝트를 선택하거나 새로 생성합니다.
    • 공개 디렉터리로 build/web을 입력합니다.
    • 싱글 페이지 앱(SPA)으로 구성할지 묻는 질문에 'Yes(y)'를 선택합니다. 이는 Flutter의 라우팅이 올바르게 작동하기 위해 매우 중요합니다.
    • GitHub를 이용한 자동 빌드 및 배포 설정은 지금은 'No(n)'를 선택합니다.
  4. 배포: 초기화가 완료되면 배포 명령어를 실행합니다: firebase deploy. 잠시 후 Firebase가 파일을 업로드하고, 접속 가능한 공개 URL을 알려줍니다.

GitHub Pages를 이용한 배포

GitHub Pages는 GitHub 저장소의 HTML, CSS, JavaScript 파일을 직접 가져와 정적 사이트로 호스팅해주는 무료 서비스입니다.

  1. GitHub 저장소 생성: 프로젝트 코드와 배포된 사이트를 호스팅할 새로운 저장소를 GitHub에 만듭니다.
  2. 프로젝트 푸시: Flutter 프로젝트 전체(build/web 디렉터리만이 아닌)를 새로 만든 저장소의 main 브랜치에 푸시합니다.
  3. 빌드 및 배포 자동화: 가장 권장되는 방법은 빌드 및 배포 과정을 자동화하여, 빌드 결과물을 gh-pages라는 별도의 브랜치에 푸시하는 것입니다. 이를 위해 gh_pages와 같은 패키지를 사용하는 것이 편리합니다.
    • pubspec.yaml 파일의 dev_dependencies에 해당 패키지를 추가합니다.
    • 웹 빌드 명령어를 실행합니다: flutter build web
    • 패키지가 제공하는 배포 스크립트를 실행합니다: flutter pub run gh_pages. 이 스크립트는 build/web 디렉터리의 내용을 가져와 저장소의 gh-pages 브랜치로 푸시해줍니다.
  4. GitHub Pages 소스 설정: GitHub 저장소의 'Settings' 탭에서 'Pages' 섹션으로 이동합니다. 배포 소스(Source)를 'Deploy from a branch'로 설정하고, 브랜치를 gh-pages로 선택합니다. 잠시 후 https://<사용자이름>.github.io/<저장소이름> 형식의 주소에서 웹사이트가 공개됩니다.

마치며

이번 글에서는 Flutter의 기본 개념부터 웹 개발에서의 강력한 장점, 그리고 실제 애플리케이션을 빌드하고 배포하는 단계별 과정까지 살펴보았습니다. 단일 코드베이스로 고성능의 미려한 애플리케이션을 만들 수 있는 Flutter의 능력은 현대 개발자에게 매우 효율적이고 보람 있는 도구가 되어줍니다.

Firebase Hosting이나 GitHub Pages와 같이 간단하면서도 강력한 배포 서비스를 활용하면, 여러분이 만든 결과물을 단 몇 분 만에 전 세계와 공유할 수 있습니다. 이러한 플랫폼들이 호스팅의 복잡한 부분을 대신 처리해주므로, 여러분은 최고의 애플리케이션을 만드는 데에만 집중할 수 있습니다.

이제 직접 Flutter의 풍부한 위젯 라이브러리를 탐험하며 무엇을 만들 수 있을지 도전해보시기 바랍니다. 더 깊이 있는 정보가 필요하다면 공식 Flutter 문서는 매우 귀중한 자료가 될 것입니다. 즐거운 코딩 여정이 되기를 바랍니다!


0 개의 댓글:

Post a Comment