Dart 튜토리얼 19편: 배포·버전·보안(dart pub publish·versioning·verified publishers·security advisories)

요약#

핵심 요지#

  • 문제 정의: 패키지를 배포하면 “버전”과 “배포 파일 목록”과 “보안 취약점 대응”이 함께 따라오며, 이 중 하나라도 놓치면 사용자 신뢰를 잃기 쉽다.
  • 핵심 주장: pub 배포는 dart pub publish --dry-run1으로 사전 점검한 뒤 dart pub publish2로 업로드하고, 버전 범위는 caret(^) 같은 문법으로 의미를 고정하며, 보안 권고는 dart pub get3 단계에서 노출되므로 반드시 확인해야 한다.
  • 주요 근거: dry-run이 pubspec/레이아웃 검증과 “업로드될 파일 목록 표시”를 수행하는 설명, caret 범위 설명, verified publisher 배지 의미, security advisory 출력/ignored_advisories4 예시가 제시된다.
  • 실무 기준: “(1) 버전 정책(semver) → (2) dry-run으로 파일 점검 → (3) publish → (4) 보안 권고 확인/업그레이드”를 릴리즈 체크리스트로 둔다.

문서가 설명하는 범위#

  • dart pub publish --dry-run/dart pub publish 배포 절차와 검증 항목
  • 버전 범위(예: '>=2.3.5 <2.4.0', ^2.3.5)의 의미와 제약 해결(범위 교집합) 흐름
  • verified publisher 배지의 의미와 DNS 기반 검증 개요
  • security advisories가 pub 클라이언트에 표시되는 방식과 무시 목록(ignored_advisories)

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


참고 자료#


문제 상황#

배포는 “내 로컬에서 잘 된다”로 끝나지 않습니다.
배포 후에는 다른 개발자가 의존성으로 가져다 쓰고, 버전 범위로 업데이트가 흘러가며, 취약점이 발견되면 보안 권고가 표시됩니다.
즉, 배포는 기능보다 “절차와 신뢰”가 중요해지는 단계입니다.


해결 방법#

단계 1: 버전 범위는 “의미가 있는 약속”으로 관리하기#

Why#

NOTE

의존성 버전을 딱 하나로 고정하면, 다른 패키지와 함께 쓸 때 충돌이 생기기 쉽습니다.
그래서 pub는 “버전 범위(range)”를 사용해 제약을 풀고, 교집합을 찾아 해결하는 모델을 설명합니다.

What#

NOTE

버전 범위는 예를 들어 다음처럼 표현될 수 있습니다.
'>=2.3.5 <2.4.0'은 2.3.5 이상 2.4.0 미만 범위를 뜻합니다.
caret 문법 ^2.3.5는 2.3.5 이상 3.0.0 미만(3.0.0 포함하지 않음) 범위를 뜻하는 것으로 설명됩니다.

How#

TIP

버전 범위 표현 예시는 다음과 같습니다.

dependencies:
collection: '>=2.3.5 <2.4.0'

caret 문법 예시는 다음과 같습니다.

dependencies:
collection: ^2.3.5

Watch out#

WARNING

범위가 너무 좁으면(잠금) 업데이트가 막히고, 범위가 너무 넓으면 호환성 문제가 생길 수 있습니다.
따라서 버전 범위는 “호환성 약속(semantic versioning)”을 전제로 잡고, 범위를 정하는 것이 기준으로 설명됩니다.

결론: 버전은 “범위”로 관리하되, 그 범위가 의미를 가지려면 semver 약속을 함께 전제로 둡니다.


단계 2: 배포 전에는 --dry-run으로 “업로드될 파일 목록”을 반드시 확인하기#

Why#

NOTE

배포에서 흔한 실수는 “원치 않는 파일이 함께 업로드되는 것”입니다.
이 실수는 되돌리기 어렵고, 신뢰/보안에도 영향을 줄 수 있습니다.

What#

NOTE

dart pub publish --dry-run은 실제 업로드 없이 배포 과정을 시뮬레이션하고, pubspec/레이아웃 검증을 수행한 뒤 업로드될 파일 목록을 보여준다고 설명됩니다.

How#

TIP

dry-run 명령은 다음과 같습니다.

Terminal window
$ dart pub publish --dry-run

파일 목록 예시는 다음과 같이 제시됩니다.

Publishing transmogrify 1.0.0
.gitignore
CHANGELOG.md
README.md
lib
transmogrify.dart
src
transmogrifier.dart
transmogrification.dart
pubspec.yaml
test
transmogrify_test.dart
Package has 0 warnings.

Watch out#

WARNING

원치 않는 파일이 보이면 업로드를 취소하고, .pubignore5 또는 .gitignore6로 제외하거나 파일을 제거하는 흐름이 제시됩니다.

결론: 배포는 --dry-run으로 파일 목록까지 확인한 뒤 진행합니다.


단계 3: dart pub publish는 검증 후 업로드하며, verified publisher는 “발행자 신원 표시”다#

Why#

NOTE

사용자는 패키지의 출처를 신뢰하고 싶어 합니다.
또한 배포 명령은 “검증 → 업로드” 절차를 포함해야 실수를 줄일 수 있습니다.

What#

NOTE

dart pub publish는 pubspec/레이아웃 검증, git status가 깨끗한지 확인, 업로드 파일 목록 표시, 그리고 pub.dev 업로드까지 수행한다고 설명됩니다.
verified publisher 배지7는 pub.dev가 발행자 신원을 확인했음을 나타내는 표시로 설명됩니다.

How#

TIP

배포 명령은 다음과 같습니다.

Terminal window
$ dart pub publish

Watch out#

WARNING

새 패키지를 verified publisher로 “직접” 배포하는 기능은 pub 명령이 지원하지 않는다는 안내가 함께 제시됩니다.
즉, 배포 흐름을 구성할 때 이 제약을 고려해야 합니다.

결론: 배포는 dart pub publish가 수행하는 검증 절차를 믿되, 발행자 신원(verified publisher)과 제약 사항은 별도로 이해해야 합니다.


단계 4: 보안 권고는 dart pub get에서 노출되며, 필요하면 ignored_advisories로 처리한다#

Why#

NOTE

취약한 의존성을 그대로 두면, 앱과 사용자에게 위험이 될 수 있습니다.
그래서 의존성 해결 단계에서 보안 권고를 확인하는 흐름이 제시됩니다.

What#

NOTE

security advisory는 GitHub Advisory Database를 사용하며, dart pub get 단계에서 영향을 받는 의존성이 출력될 수 있다고 설명됩니다.
또한 루트 패키지의 pubspec.yaml8ignored_advisories를 넣어 경고를 무시할 수 있는 방식이 제시됩니다.

How#

TIP

dart pub get 출력 예시는 다음과 같이 제시됩니다.

Terminal window
$ dart pub get
Resolving dependencies...
http 0.13.0 (affected by advisory: [^0], 1.2.0 available)
Got dependencies!
Dependencies are affected by security advisories:
[^0]: https://github.com/advisories/GHSA-4rgh-jx4f-qfcq

무시 목록 예시는 다음과 같습니다.

name: myapp
dependencies:
foo: ^1.0.0
ignored_advisories:
- GHSA-4rgh-jx4f-qfcq

Watch out#

WARNING

무시 목록은 “루트 패키지에만 적용”된다고 설명됩니다.
즉, 의존성 내부에서 무시하더라도 내 프로젝트의 해결 결과에는 적용되지 않을 수 있으므로 범위를 정확히 이해해야 합니다.

결론: 보안 권고는 dart pub get 단계에서 확인하고, 무시가 필요하면 ignored_advisories의 적용 범위를 이해한 뒤 설정합니다.

Footnotes#

  1. dart pub publish —dry-run(dry-run): 실제 업로드 없이 배포 과정을 검증하고 업로드 파일 목록을 보여주는 명령이다.

  2. dart pub publish(pub publish): 패키지를 pub.dev에 업로드하는 명령이다.

  3. dart pub get(pub get): 의존성을 해결하고 내려받는 명령이다.

  4. ignored_advisories(무시할 보안 권고 목록): 특정 보안 권고 경고를 무시하도록 하는 pubspec 필드다.

  5. .pubignore(.pubignore): 배포에서 제외할 파일을 지정하는 ignore 파일이다.

  6. .gitignore(.gitignore): Git에서 무시할 파일을 지정하는 ignore 파일이다.

  7. verified publisher(검증된 발행자): pub.dev가 발행자 신원을 검증했음을 나타내는 배지/개념이다.

  8. pubspec.yaml(pubspec): 패키지 메타데이터와 의존성을 선언하는 파일이다.

공유

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

Dart 튜토리얼 19편: 배포·버전·보안(dart pub publish·versioning·verified publishers·security advisories)
https://moodturnpost.net/posts/dart/dart-pub-publishing-version-security/
작성자
Moodturn
게시일
2026-01-04
Moodturn

목차