Flutter 튜토리얼 77편: SDK와 pubspec.yaml

요약#

핵심 요지#

  • 문제 정의: Flutter 프로젝트를 설정하고 관리하려면 SDK 구조와 pubspec.yaml1 파일을 이해해야 한다.
  • 핵심 주장: pubspec.yaml은 프로젝트의 의존성, 에셋, 폰트 등 핵심 설정을 관리하는 중앙 구성 파일이다.
  • 주요 근거: Flutter는 Dart SDK를 포함하며, flutterdart CLI 도구를 통해 앱을 생성, 빌드, 테스트한다.
  • 실무 기준: 에셋, 폰트, 플러그인 설정은 pubspec.yaml의 flutter 섹션에서 관리한다.
  • 한계: YAML 문법에서 들여쓰기(탭 vs 공백)가 중요하며, 실수하면 파싱 오류가 발생한다.

문서가 설명하는 범위#

  • Flutter SDK에 포함된 구성 요소
  • flutter와 dart CLI 도구 사용법
  • pubspec.yaml의 Flutter 전용 필드
  • 에셋, 폰트, 플러그인 설정 방법

읽는 시간: 15분 | 난이도: 초급


참고 자료#


문제 상황#

Flutter 프로젝트를 시작하면 여러 파일과 폴더가 생성됩니다. 그중 pubspec.yaml은 가장 중요한 설정 파일이지만, 어떤 옵션이 있는지 모르면 제대로 활용하기 어렵습니다.

흔한 질문들#

패키지를 어떻게 추가하지?
이미지를 앱에 포함하려면 어디에 설정하지?
커스텀 폰트는 어떻게 사용하지?
Flutter SDK에는 뭐가 들어있지?

해결 방법#

Flutter SDK의 구조를 이해하고 pubspec.yaml의 필드를 알면 프로젝트를 효과적으로 관리할 수 있습니다.

챕터 1: Flutter SDK 구성 요소#

Why#

NOTE

Flutter 앱을 개발하려면 Flutter SDK가 필요합니다. SDK에는 Dart 언어, 프레임워크, 도구들이 포함되어 있습니다.

SDK가 무엇을 제공하는지 알면 어떤 도구를 언제 사용해야 하는지 이해할 수 있습니다.

What#

NOTE

Flutter SDK에는 다음이 포함됩니다.

구성 요소설명
Dart SDKDart 언어와 런타임
렌더링 엔진모바일 최적화 2D 렌더링 엔진
프레임워크React 스타일의 선언적 UI 프레임워크
위젯 라이브러리Material Design, Cupertino 스타일 위젯
테스트 API유닛, 위젯, 통합 테스트 도구
DevTools디버깅, 프로파일링 도구
CLI 도구flutter, dart 명령어 도구

How#

TIP

flutter CLI 도구

flutter 명령어는 Flutter 앱 개발의 핵심 도구입니다.

Terminal window
# 새 프로젝트 생성
flutter create my_app
# 앱 실행
flutter run
# 앱 빌드
flutter build apk
flutter build ios
# 테스트 실행
flutter test
# 의존성 설치
flutter pub get
# 환경 확인
flutter doctor

dart CLI 도구

dart 명령어는 Dart 언어 관련 작업에 사용됩니다.

Terminal window
# 코드 포맷팅
dart format .
# 정적 분석
dart analyze
# deprecated API 자동 수정
dart fix --apply
# 패키지 관리
dart pub get
dart pub add http

SDK 위치

Flutter SDK는 설치 시 지정한 경로에 있습니다.

Terminal window
# SDK 위치 확인
flutter sdk-path
# 환경 변수 설정 (macOS/Linux)
export PATH="$PATH:$HOME/development/flutter/bin"

Watch out#

WARNING

IDE 도구(VS Code 확장, Android Studio 플러그인)는 최근 2년간의 Flutter SDK 버전만 지원합니다. 너무 오래된 SDK를 사용하면 IDE 기능이 제대로 작동하지 않을 수 있습니다.

Terminal window
# SDK 버전 확인
flutter --version
# SDK 업그레이드
flutter upgrade

결론: Flutter SDK는 앱 개발에 필요한 모든 도구와 라이브러리를 포함합니다.


챕터 2: pubspec.yaml 기본 구조#

Why#

NOTE

pubspec.yaml은 Flutter 프로젝트의 핵심 설정 파일입니다. 프로젝트 메타데이터, 의존성, 에셋 등 모든 설정이 이 파일에 있습니다.

패키지를 추가하거나 에셋을 포함할 때 반드시 이 파일을 수정해야 합니다.

What#

NOTE

pubspec.yaml은 YAML 형식으로 작성됩니다. Dart 공통 필드와 Flutter 전용 필드가 있습니다.

Dart 공통 필드:

  • name: 프로젝트 이름
  • description: 프로젝트 설명
  • version: 버전 번호
  • environment: SDK 버전 제약
  • dependencies: 런타임 의존성
  • dev_dependencies: 개발용 의존성

Flutter 전용 필드:

  • flutter: Flutter 관련 설정
  • assets: 에셋 파일 목록
  • fonts: 커스텀 폰트 설정
  • uses-material-design: Material 아이콘 사용 여부

How#

TIP

기본 pubspec.yaml 예제

name: my_flutter_app
description: A new Flutter project.
publish_to: none # pub.dev에 공개하지 않음
version: 1.0.0+1
environment:
sdk: ^3.10.0
dependencies:
flutter:
sdk: flutter # Flutter SDK 의존성
cupertino_icons: ^1.0.8 # iOS 스타일 아이콘
dev_dependencies:
flutter_test:
sdk: flutter
flutter_lints: ^6.0.0 # 권장 린트 규칙
flutter:
uses-material-design: true # Material 아이콘 사용

버전 지정 방법

표현의미
^1.0.01.0.0 이상, 2.0.0 미만 (권장)
>=1.0.0 <2.0.0명시적 범위
any모든 버전
1.0.0정확히 이 버전만

의존성 추가하기

Terminal window
# 명령어로 추가 (권장)
flutter pub add http
# pubspec.yaml에 직접 추가 후 설치
flutter pub get

pubspec.lock

첫 빌드 시 pubspec.lock 파일이 생성됩니다. 이 파일은 설치된 패키지의 정확한 버전을 기록합니다.

# pubspec.lock (자동 생성, 수정하지 않음)
packages:
http:
dependency: "direct main"
version: "1.2.0"

Watch out#

WARNING

YAML은 들여쓰기에 민감합니다. 탭 대신 공백 2칸을 사용해야 합니다.

# 잘못된 예 (탭 사용)
flutter:
uses-material-design: true # 오류!
# 올바른 예 (공백 2칸)
flutter:
uses-material-design: true

들여쓰기가 잘못되면 파싱 오류가 발생합니다.

결론: pubspec.yaml은 YAML 형식으로 프로젝트 설정을 관리하며, 들여쓰기에 주의해야 합니다.


챕터 3: 에셋 설정#

Why#

NOTE

이미지, JSON 파일, 아이콘 등을 앱에 포함하려면 에셋으로 등록해야 합니다. pubspec.yaml에 에셋 경로를 명시하면 앱 번들에 포함됩니다.

What#

NOTE

assets 필드는 앱에 포함할 파일이나 폴더를 지정합니다.

지원되는 파일 유형:

  • 이미지: JPEG, PNG, GIF, WebP, BMP
  • 데이터: JSON, XML, 텍스트
  • 기타: 설정 파일, 라이선스 파일

How#

TIP

개별 파일 등록

flutter:
assets:
- assets/images/logo.png
- assets/images/background.jpg
- assets/data/config.json

폴더 전체 등록

폴더 경로 끝에 /를 붙이면 해당 폴더의 모든 파일이 포함됩니다.

flutter:
assets:
- assets/images/ # images 폴더의 모든 파일
- assets/icons/ # icons 폴더의 모든 파일

해상도별 이미지

Flutter는 해상도별 이미지를 자동으로 선택합니다.

assets/
images/
logo.png # 1x (기본)
2.0x/
logo.png # 2x
3.0x/
logo.png # 3x

pubspec.yaml에는 기본 경로만 등록합니다.

flutter:
assets:
- assets/images/logo.png

Flavor별 에셋

빌드 Flavor에 따라 다른 에셋을 사용할 수 있습니다.

flutter:
assets:
- path: assets/production/images
flavors:
- production
- path: assets/staging/images
flavors:
- staging

코드에서 에셋 사용

// 이미지 위젯
Image.asset('assets/images/logo.png')
// JSON 파일 로드
final jsonString = await rootBundle.loadString('assets/data/config.json');

Watch out#

WARNING

에셋 경로는 pubspec.yaml 기준 상대 경로입니다. 경로가 잘못되면 빌드 시 오류가 발생하거나 런타임에 파일을 찾을 수 없습니다.

# 프로젝트 구조
my_app/
pubspec.yaml
assets/
images/
logo.png
# pubspec.yaml
flutter:
assets:
- assets/images/logo.png # 올바른 경로
# - images/logo.png # 잘못된 경로

결론: assets 필드로 이미지, 데이터 파일 등을 앱에 포함할 수 있습니다.


챕터 4: 폰트 설정#

Why#

NOTE

앱에 커스텀 폰트를 사용하면 브랜드 아이덴티티를 강화하고 가독성을 높일 수 있습니다. pubspec.yaml에서 폰트 파일을 등록하고 스타일(굵기, 기울임)을 지정합니다.

What#

NOTE

fonts 필드는 커스텀 폰트를 등록합니다.

속성설명
family폰트 패밀리 이름
asset폰트 파일 경로
weight굵기 (100-900)
style스타일 (italic)

How#

TIP

기본 폰트 등록

flutter:
fonts:
- family: Roboto
fonts:
- asset: fonts/Roboto-Regular.ttf
- asset: fonts/Roboto-Bold.ttf
weight: 700
- asset: fonts/Roboto-Italic.ttf
style: italic

여러 폰트 패밀리

flutter:
fonts:
- family: Roboto
fonts:
- asset: fonts/Roboto-Regular.ttf
- asset: fonts/Roboto-Bold.ttf
weight: 700
- family: NotoSansKR
fonts:
- asset: fonts/NotoSansKR-Regular.ttf
- asset: fonts/NotoSansKR-Bold.ttf
weight: 700

코드에서 폰트 사용

// TextStyle에서 직접 사용
Text(
'Hello',
style: TextStyle(fontFamily: 'Roboto'),
)
// ThemeData에서 기본 폰트 설정
MaterialApp(
theme: ThemeData(
fontFamily: 'NotoSansKR',
),
)
// 굵기와 스타일 지정
Text(
'Bold Italic',
style: TextStyle(
fontFamily: 'Roboto',
fontWeight: FontWeight.w700,
fontStyle: FontStyle.italic,
),
)

가변 폰트 (Variable Fonts)

가변 폰트는 하나의 파일로 여러 굵기를 지원합니다.

flutter:
fonts:
- family: RobotoFlex
fonts:
- asset: fonts/RobotoFlex-VariableFont.ttf
// 가변 폰트에서 원하는 굵기 사용
Text(
'Variable Weight',
style: TextStyle(
fontFamily: 'RobotoFlex',
fontWeight: FontWeight.w450, // 100-900 사이 값
),
)

Watch out#

WARNING

폰트 weight 값은 정해진 값만 사용할 수 있습니다. 100, 200, 300, 400, 500, 600, 700, 800, 900 중 하나여야 합니다.

# 잘못된 예
- asset: fonts/Roboto-Medium.ttf
weight: 550 # 오류!
# 올바른 예
- asset: fonts/Roboto-Medium.ttf
weight: 500

폰트 파일이 없거나 경로가 잘못되면 기본 시스템 폰트가 사용됩니다.

결론: fonts 필드로 커스텀 폰트를 등록하고 굵기, 스타일을 지정할 수 있습니다.


챕터 5: 기타 Flutter 필드#

Why#

NOTE

pubspec.yaml에는 에셋과 폰트 외에도 여러 Flutter 전용 필드가 있습니다. 이 필드들을 활용하면 앱 빌드와 동작을 세밀하게 제어할 수 있습니다.

What#

NOTE

주요 Flutter 전용 필드:

필드설명
uses-material-designMaterial 아이콘 포함 여부
generate로컬라이제이션 코드 생성
plugin플러그인 설정
shadersGLSL 셰이더 파일
deferred-components지연 로딩 컴포넌트 (Android)
configCLI 설정 플래그

How#

TIP

uses-material-design

Material 아이콘을 사용하려면 true로 설정합니다.

flutter:
uses-material-design: true
// Material 아이콘 사용
Icon(Icons.home)
Icon(Icons.settings)

generate (로컬라이제이션)

다국어 지원을 위한 코드를 자동 생성합니다.

flutter:
generate: true

l10n.yaml 파일과 함께 사용합니다.

licenses (추가 라이선스)

앱에 추가 라이선스 파일을 포함합니다.

flutter:
licenses:
- assets/licenses/third_party_license.txt

shaders (GLSL 셰이더)

커스텀 셰이더를 앱에 포함합니다.

flutter:
shaders:
- assets/shaders/blur.frag
- assets/shaders/glow.frag

default-flavor

기본 빌드 Flavor를 지정합니다.

flutter:
default-flavor: production
Terminal window
# 기본 flavor 실행 (production)
flutter run
# 다른 flavor 실행
flutter run --flavor staging

config (CLI 설정)

flutter CLI 동작을 설정합니다.

flutter:
config:
enable-swift-package-manager: true
cli-animations: false

plugin (플러그인 개발용)

Flutter 플러그인을 개발할 때 플랫폼별 설정을 지정합니다.

flutter:
plugin:
platforms:
android:
package: com.example.my_plugin
pluginClass: MyPlugin
ios:
pluginClass: MyPlugin

Watch out#

WARNING

uses-material-design: true를 설정하지 않으면 Material 아이콘이 표시되지 않습니다.

// uses-material-design: false면 아이콘이 안 보임
Icon(Icons.home) // 빈 공간 또는 오류

새 프로젝트를 생성하면 기본적으로 true로 설정됩니다.

결론: Flutter 전용 필드를 활용하면 Material 디자인, 로컬라이제이션, 셰이더 등 다양한 기능을 설정할 수 있습니다.


챕터 6: 필수 Flutter 패키지#

Why#

NOTE

Flutter 앱 개발에는 몇 가지 필수 패키지가 있습니다. 이 패키지들은 Flutter SDK의 일부이거나 거의 모든 프로젝트에서 사용됩니다.

What#

NOTE

필수 패키지:

패키지용도
flutterFlutter SDK
flutter_test테스트 도구
flutter_localizations다국어 지원
flutter_lints코드 린트 규칙
cupertino_iconsiOS 스타일 아이콘

How#

TIP

flutter 패키지

모든 Flutter 프로젝트에 필수입니다.

dependencies:
flutter:
sdk: flutter

flutter_test 패키지

테스트 코드 작성에 필요합니다.

dev_dependencies:
flutter_test:
sdk: flutter

flutter_localizations 패키지

다국어 지원(i18n)에 필요합니다.

dependencies:
flutter_localizations:
sdk: flutter
intl: any # 함께 사용
MaterialApp(
localizationsDelegates: [
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
Locale('en'),
Locale('ko'),
],
)

flutter_lints 패키지

권장 린트 규칙을 제공합니다.

dev_dependencies:
flutter_lints: ^6.0.0

analysis_options.yaml에서 사용합니다.

analysis_options.yaml
include: package:flutter_lints/flutter.yaml

cupertino_icons 패키지

iOS 스타일 아이콘을 제공합니다.

dependencies:
cupertino_icons: ^1.0.8
Icon(CupertinoIcons.heart)
Icon(CupertinoIcons.settings)

Watch out#

WARNING

패키지를 추가한 후에는 반드시 flutter pub get을 실행해야 합니다.

Terminal window
# pubspec.yaml 수정 후
flutter pub get

IDE에서 자동으로 실행되기도 하지만, 문제가 생기면 수동으로 실행해 보세요.

결론: Flutter SDK 패키지들은 테스트, 로컬라이제이션, 린트 등 핵심 기능을 제공합니다.


한계#

pubspec.yaml과 Flutter SDK에는 몇 가지 주의점이 있습니다.

  • YAML 문법 민감성: 들여쓰기 오류가 파싱 실패로 이어짐
  • 에셋 경로 오류: 잘못된 경로는 런타임 오류 발생
  • SDK 버전 호환성: 패키지가 현재 SDK 버전과 호환되지 않을 수 있음
  • pubspec.lock 충돌: 팀 개발 시 lock 파일 충돌 가능

Footnotes#

  1. pubspec.yaml(펍스펙): Dart/Flutter 프로젝트의 의존성과 메타데이터를 정의하는 YAML 형식의 설정 파일이다.

공유

이 글이 도움이 되었다면 다른 사람과 공유해주세요!

Flutter 튜토리얼 77편: SDK와 pubspec.yaml
https://moodturnpost.net/posts/flutter/flutter-sdk-pubspec/
작성자
Moodturn
게시일
2026-01-08
Moodturn

목차