Dart 프로젝트 생성과 실행
Dart SDK가 준비됐다면 이제 프로젝트를 만들 차례입니다. dart create 명령어 하나로 다양한 형태의 프로젝트를 시작할 수 있습니다. 각 템플릿이 어떤 구조를 생성하는지, 어떻게 실행하는지 실제로 해봅니다.
dart create 기본 사용법
dart create [옵션] <프로젝트명>
가장 단순한 형태입니다.
dart create my_project
옵션 없이 실행하면 기본 템플릿인 console이 사용됩니다.
프로젝트 템플릿 종류
-t 옵션으로 템플릿을 지정합니다.
dart create -t <템플릿명> <프로젝트명>
| 템플릿 | 용도 |
|---|---|
console |
CLI 프로그램 (기본값) |
package |
재사용 가능한 라이브러리 패키지 |
server-shelf |
shelf 기반 HTTP 서버 |
web |
웹 앱 (dart2js 컴파일 대상) |
이 교재에서는 console, package, server-shelf를 주로 사용합니다.
console 템플릿
가장 기본적인 CLI 프로그램 템플릿입니다.
dart create -t console hello_dartcd hello_dart
생성되는 구조입니다.
hello_dart/
├── bin/
│ └── hello_dart.dart ← 진입점 (main 함수)
├── lib/
│ └── hello_dart.dart ← 비즈니스 로직
├── test/
│ └── hello_dart_test.dart
├── pubspec.yaml
├── pubspec.lock
├── .dart_tool/
├── .gitignore
└── analysis_options.yaml
bin/hello_dart.dart를 열면 다음 내용이 보입니다.
import 'package:hello_dart/hello_dart.dart' as hello_dart;
void main(List<String> arguments) {
print('Hello world: ${hello_dart.calculate()}!');
}
lib/hello_dart.dart에 비즈니스 로직이 들어갑니다.
int calculate() {
return 6 * 7;
}
package 템플릿
다른 프로젝트에서 가져다 쓸 수 있는 라이브러리 패키지입니다.
dart create -t package my_utilscd my_utils
my_utils/
├── lib/
│ ├── my_utils.dart ← 공개 API 진입점
│ └── src/
│ └── my_utils_base.dart ← 실제 구현
├── test/
│ └── my_utils_test.dart
├── pubspec.yaml
└── analysis_options.yaml
bin/ 폴더가 없습니다. 패키지는 직접 실행하는 것이 아니라 다른 프로젝트에서 import 합니다.
server-shelf 템플릿
shelf 패키지를 사용하는 HTTP 서버 템플릿입니다.
dart create -t server-shelf my_apicd my_api
my_api/
├── bin/
│ └── server.dart ← 서버 진입점
├── lib/
│ └── src/
│ └── handler.dart ← 요청 처리 핸들러
├── test/
│ └── server_test.dart
├── pubspec.yaml
└── Dockerfile ← Docker 배포용 파일 포함
bin/server.dart의 기본 내용입니다.
import 'package:my_api/src/handler.dart';
import 'package:shelf/shelf_io.dart' as shelf_io;
void main() async {
final server = await shelf_io.serve(
handler,
'localhost',
8080,
);
print('Server running on port ${server.port}');
}
프로젝트 실행
dart run
프로젝트 루트에서 실행합니다.
# bin/ 안의 기본 파일 실행dart run# 특정 파일 실행dart run bin/hello_dart.dart# 패키지명으로 실행 (pubspec.yaml의 name 기준)dart run hello_dart
특정 파일 직접 실행
단일 .dart 파일은 dart 명령어로 바로 실행합니다.
# 스크립트처럼 직접 실행dart hello.dart# 또는dart run hello.dart
의존성 먼저 설치
처음 dart create로 만들면 의존성이 자동으로 설치됩니다. 하지만 git에서 clone 한 프로젝트라면 먼저 설치해야 합니다.
dart pub getdart run
핫 리로드와 감시 모드
Dart CLI에는 Flutter처럼 완전한 핫 리로드는 없지만, 파일 변경을 감지해 자동으로 재실행하는 --watch 모드가 있습니다.
참고:
dart run --watch는 Dart 3.3+ 에서 지원됩니다.
# 파일 변경 시 자동 재실행dart run --watch# server-shelf 서버를 감시 모드로 실행dart run --watch bin/server.dart
--watch 없이 유사한 효과를 내려면 dart_frog dev(PART 06에서 다룸) 또는 watchexec 같은 외부 도구를 사용합니다.
# watchexec 설치 (macOS)brew install watchexec# 파일 변경 시 dart run 재실행watchexec -e dart dart run
컴파일과 배포
JIT 실행 (개발)
dart run bin/server.dart
AOT 컴파일 (프로덕션)
# 네이티브 실행 파일 생성dart compile exe bin/hello_dart.dart -o build/hello_dart# 실행 (런타임 불필요)./build/hello_dart
JavaScript 컴파일
dart compile js bin/hello_dart.dart -o build/hello_dart.js
VS Code에서 실행
터미널 없이 VS Code에서 바로 실행할 수 있습니다.
bin/안의.dart파일을 엽니다.- 상단 재생 버튼(▶) 클릭 또는
F5를 누릅니다. - 하단 터미널 패널에 출력 결과가 나타납니다.
launch.json을 설정하면 실행 옵션을 저장할 수 있습니다.
// .vscode/launch.json{ "version": "0.2.0", "configurations": [ { "name": "Dart Run", "type": "dart", "request": "launch", "program": "bin/hello_dart.dart" } ]}
프로젝트 생성 실습
세 가지 템플릿을 직접 만들어보겠습니다.
# 작업 폴더 생성mkdir ~/dart_practice && cd ~/dart_practice# console 프로젝트dart create -t console practice_clicd practice_cli && dart run && cd ..# package 프로젝트dart create -t package practice_libcd practice_lib && dart test && cd ..# server-shelf 프로젝트dart create -t server-shelf practice_apicd practice_apidart pub getdart run bin/server.dart &curl http://localhost:8080kill %1cd ..
정리
이번 챕터에서 다룬 내용입니다.
dart create -t <템플릿>으로 프로젝트를 생성합니다.console,package,server-shelf세 가지 템플릿의 구조와 용도를 파악했습니다.dart run으로 실행하고--watch로 자동 재실행 모드를 활용합니다.- AOT 컴파일로 단일 실행 파일을 만들 수 있습니다.
다음 챕터에서는 VS Code 디버거와 dart analyze를 활용해 오류를 효율적으로 잡아내는 방법을 배웁니다.