iBetter Books
수정

의존성 관리 — dart pub

dart pub은 Dart의 패키지 매니저입니다. npm(Node.js), pip(Python), cargo(Rust)와 같은 역할을 합니다. 패키지 설치, 업데이트, 충돌 해결, 로컬/글로벌 패키지 관리까지 모두 dart pub 명령어 하나로 처리합니다.


dart pub get

pubspec.yaml에 선언된 의존성을 설치합니다.

# 기본 실행dart pub get# 오프라인 모드 (캐시에서만 설치)dart pub get --offline# 실행 결과 예시Resolving dependencies...+ http 1.2.1+ http_parser 4.0.2+ path 1.9.0Changed 3 dependencies!

설치된 패키지는 다음 위치에 캐시됩니다.

운영체제 캐시 위치
macOS ~/.pub-cache/
Linux ~/.pub-cache/
Windows %LOCALAPPDATA%\Pub\Cache\

dart pub upgrade

설치된 패키지를 pubspec.yaml의 버전 제약 범위 안에서 최신 버전으로 올립니다.

# 전체 업그레이드dart pub upgrade# 특정 패키지만 업그레이드dart pub upgrade http# 메이저 버전까지 포함한 업그레이드dart pub upgrade --major-versions# 업그레이드 대상 미리 확인 (실제 변경 없음)dart pub upgrade --dry-run

--major-versions 옵션은 pubspec.yaml의 버전 제약을 업데이트하고 파괴적 변경이 포함된 버전으로 올릴 수 있으므로 주의해서 사용합니다.


dart pub downgrade

의존성을 허용 범위 내 최소 버전으로 내립니다. 최소 버전 지원을 테스트할 때 유용합니다.

# 전체 다운그레이드dart pub downgrade# 특정 패키지 다운그레이드dart pub downgrade http

dart pub outdated

업데이트 가능한 패키지 목록을 보여줍니다.

dart pub outdated

출력 예시입니다.

Dependencies  Current  Upgradable  Resolvable  Latest
http          1.1.0    1.2.1       1.2.1       1.2.1
path          1.8.3    1.9.0       1.9.0       1.9.0
collection    1.17.2   1.18.0      1.18.0      1.18.0

2 upgradable dependencies
컬럼 의미
Current 현재 설치된 버전
Upgradable 제약 내에서 올릴 수 있는 최신 버전
Resolvable 모든 제약을 만족하면서 올릴 수 있는 버전
Latest pub.dev 최신 버전

dart pub add / remove

패키지를 직접 추가하거나 제거합니다. pubspec.yaml을 직접 편집하는 대신 커맨드로 처리합니다.

# 패키지 추가 (자동으로 dart pub get 실행)dart pub add httpdart pub add http:^1.2.0   # 버전 지정# dev 의존성으로 추가dart pub add --dev lintsdart pub add --dev test mockito# 패키지 제거dart pub remove http# 여러 패키지 한 번에 추가dart pub add collection path http

의존성 충돌 해결

가장 흔한 문제입니다. 여러 패키지가 동일한 패키지의 서로 다른 버전을 요구할 때 발생합니다.

충돌 메시지 이해

Because my_app depends on package_a ^1.0.0 and package_b ^2.0.0,
and package_b 2.0.0 depends on package_a ^2.0.0,
version solving failed.

my_apppackage_a 1.x가 필요하고, package_b 2.xpackage_a 2.x가 필요합니다. 두 요구사항이 충돌합니다.

해결 방법 1: 버전 제약 완화

# 변경 전dependencies:  package_a: ^1.0.0# 변경 후: package_b가 요구하는 버전 포함dependencies:  package_a: ^2.0.0

해결 방법 2: dependency_overrides

임시 방편입니다. 특정 패키지의 버전을 강제로 지정합니다.

dependency_overrides:  package_a: ^2.0.0

이 방식은 다른 패키지의 버전 제약을 무시하므로 런타임에 예상치 못한 오류가 날 수 있습니다. 임시로만 사용하고 근본적인 해결을 목표로 합니다.

해결 방법 3: 의존성 트리 분석

# 의존성 트리 전체 출력dart pub deps# 특정 패키지가 어디서 요구되는지 확인dart pub deps | grep package_a

글로벌 패키지 설치

시스템 전체에서 사용할 수 있는 Dart 도구를 설치합니다.

# 글로벌 설치dart pub global activate dart_styledart pub global activate pana       # pub.dev 점수 분석 도구dart pub global activate devtools   # Dart DevTools# 글로벌 설치된 패키지 목록dart pub global list# 글로벌 패키지 제거dart pub global deactivate pana# 글로벌 패키지 실행dart pub global run dart_style --version

글로벌 패키지는 ~/.pub-cache/bin/에 실행 파일이 생성됩니다. PATH에 추가해야 직접 실행할 수 있습니다.

# macOS/Linux: ~/.zshrc 또는 ~/.bashrc에 추가export PATH="$PATH:$HOME/.pub-cache/bin"

dart pub cache

캐시 관리 명령어입니다.

# 캐시 위치 확인dart pub cache clean  # 캐시 초기화 (디스크 공간 확보)# 특정 패키지 캐시 수동 추가dart pub cache add http 1.2.0# 캐시에서 다시 설치dart pub cache repair

dart pub publish

pub.dev에 패키지를 배포합니다.

# 배포 전 유효성 검사 (실제 배포 안 함)dart pub publish --dry-run# 실제 배포dart pub publish# 특정 저장소에 배포 (사내 pub 서버)dart pub publish --server https://pub.internal.company.com

배포 전 체크리스트입니다.

  • description이 60자 이상입니다.
  • LICENSE 파일이 있습니다.
  • CHANGELOG.md가 업데이트됐습니다.
  • 모든 테스트가 통과합니다 (dart test).
  • dart analyze에서 경고가 없습니다.

오프라인 개발 환경 설정

인터넷이 제한된 환경에서는 로컬 패키지 저장소를 사용합니다.

# pubspec.yaml: 로컬 경로 의존성dependencies:  my_shared_lib:    path: ../../packages/my_shared_lib

또는 dependency_overrides로 온라인 패키지를 로컬로 대체합니다.

dependency_overrides:  http:    path: /local/packages/http

정리

이번 챕터에서 다룬 내용입니다.

  • dart pub get → 의존성 설치, dart pub upgrade → 업그레이드, dart pub outdated → 업데이트 현황 확인입니다.
  • dart pub add/removepubspec.yaml을 편집 없이 패키지를 추가/제거합니다.
  • 의존성 충돌은 버전 제약 조정 → dependency_overrides → 의존성 트리 분석 순으로 해결합니다.
  • dart pub global activate로 시스템 전체에서 사용할 Dart CLI 도구를 설치합니다.

다음 챕터에서는 Dart 프로젝트의 폴더 구조를 어떻게 설계할지 다룹니다.