iBetter Books
수정

Dart의 활용 영역

Dart는 Flutter의 언어입니다. 많은 사람들이 그렇게 알고 있습니다.

틀린 말은 아닙니다. 하지만 Dart가 Flutter에만 묶여 있다고 생각한다면, Dart가 실제로 할 수 있는 일의 절반도 보지 못하는 것입니다. Dart는 모바일 앱, 서버, CLI 도구, 재사용 가능한 패키지 어디에서도 동작합니다.


모바일과 크로스플랫폼

Dart를 가장 널리 쓰는 영역은 Flutter입니다.

Flutter는 하나의 코드베이스로 iOS, Android, Web, Desktop(Windows, macOS, Linux) 앱을 만들 수 있는 프레임워크입니다. 2024년 Stack Overflow 개발자 설문에서 Flutter는 가장 많이 사용되는 크로스플랫폼 프레임워크 중 하나로 꼽혔습니다.

국내 채용시장도 마찬가지입니다. 2026년 기준 Flutter 관련 채용 공고는 165건을 넘습니다. 스타트업부터 중견 기업까지 Flutter 개발자 수요는 꾸준히 증가하고 있습니다.

[Flutter 앱 하나]
      ↓ 빌드
 ┌────┼────┐
iOS  Android  Web  Desktop

서버 사이드

Dart는 서버에서도 동작합니다.

shelf는 Dart 공식 HTTP 서버 라이브러리입니다. 미들웨어 스택을 조합해서 서버를 구성하는 방식으로, Node.js의 Express와 개념이 비슷합니다.

dart_frogshelf 위에 구축된 풀스택 서버 프레임워크입니다. 파일 시스템 기반 라우팅을 지원하고, Next.js의 서버 컴포넌트처럼 라우트 파일만 만들면 엔드포인트가 생성됩니다. Hot reload를 지원해서 개발 중 서버를 재시작하지 않아도 변경 사항이 즉시 반영됩니다.

# dart_frog 서버 시작$ dart_frog dev Running on http://localhost:8080

Docker 이미지로 빌드해서 배포할 수 있기 때문에 실제 프로덕션 환경에 올리는 것도 어렵지 않습니다.


CLI 도구

Dart는 네이티브 바이너리로 컴파일됩니다.

dart compile exe 명령으로 플랫폼별 실행 파일을 만들 수 있습니다. 컴파일된 바이너리는 Dart 런타임 없이 독립 실행되며, 빠른 시작 시간과 낮은 메모리 사용량을 갖습니다.

# Dart 소스를 실행 파일로 컴파일$ dart compile exe bin/main.dart -o my_tool# 컴파일된 바이너리 실행 (Dart 설치 불필요)$ ./my_tool --help

내부 자동화 스크립트, 빌드 도구, 데이터 변환 유틸리티를 Dart로 만들면 팀 전체가 언어 설치 없이 바로 쓸 수 있습니다.


패키지 생태계

pub.dev에는 37,000개 이상의 Dart 및 Flutter 패키지가 올라와 있습니다.

자주 쓰는 패키지들을 보면 Dart가 얼마나 다양한 영역을 커버하는지 알 수 있습니다.

패키지 용도
http HTTP 클라이언트
dio 고급 HTTP 클라이언트
shelf HTTP 서버
dart_frog 풀스택 서버 프레임워크
freezed 불변 데이터 클래스 생성
riverpod 상태 관리
drift SQLite ORM
args CLI 인수 파싱

이 패키지들을 직접 만들어서 공개하는 것도 가능합니다. 이 책의 프로젝트 3에서 직접 해봅니다.


Full-Stack Dart

Full-Stack Dart는 프론트엔드(Flutter)와 백엔드(dart_frog/shelf) 모두를 Dart로 구성하는 개발 방식입니다.

같은 언어를 사용한다는 것은 단순한 편의 이상의 의미가 있습니다.

첫째, 코드 공유가 가능합니다. 데이터 모델 클래스, 유효성 검사 로직, 유틸리티 함수를 앱과 서버가 함께 사용할 수 있습니다. 같은 코드를 두 번 쓰지 않아도 됩니다.

[공유 패키지]
  ├── models/
  │   └── user.dart   ← Flutter 앱과 서버가 함께 사용
  └── validators/
      └── email.dart  ← 동일한 유효성 검사 로직

둘째, 컨텍스트 전환 비용이 줄어듭니다. JavaScript(프론트)와 Python(백엔드)을 오가는 것과, Dart 하나로 양쪽을 다루는 것은 다릅니다. 언어 전환 없이 API 설계와 클라이언트 구현을 함께 생각할 수 있습니다.

셋째, 팀이 작을 때 특히 유리합니다. 혼자서 또는 소규모 팀에서 풀스택을 개발할 때, 하나의 언어로 모든 레이어를 다룰 수 있으면 개발 속도가 달라집니다.


Dart를 선택하는 이유

Dart는 Google이 설계하고 유지 관리합니다.

언어 설계 면에서 Dart는 강한 타입 시스템, Null Safety, 비동기 처리, 제네릭을 갖추고 있습니다. 현대 언어가 갖춰야 할 것들을 잘 정리해서 담았습니다. Java처럼 무겁지 않고, JavaScript처럼 예측 불가능하지 않습니다.

실행 환경 면에서는 JIT(개발 중 빠른 피드백)와 AOT(배포 시 빠른 실행)를 모두 지원합니다. 개발할 때는 hot reload로 빠르게 반복하고, 배포할 때는 최적화된 네이티브 코드로 실행됩니다.

Dart를 배우면 Flutter가 따라옵니다. Flutter를 쓰면 모바일, 웹, 데스크톱이 따라옵니다. 서버까지 더하면 풀스택이 됩니다. 하나의 언어가 커버하는 범위치고는 넓습니다.