Dart 프로그래밍에서 다양한 기능을 구현하기 위해서 패키지를 사용하는 것은 필수적이다. Pub.dev는 Dart 생태계의 중심에 있는 패키지 저장소로, Dart 및 Flutter 패키지들을 제공하는 주요 플랫폼이다. 이 섹션에서는 Pub.dev에서 패키지를 검색하고 설치하는 방법을 단계별로 설명하겠다.

Pub.dev 개요

Pub.dev는 Dart 패키지들을 쉽게 검색하고 관리할 수 있는 중앙 플랫폼이다. 이를 통해 수많은 오픈 소스 라이브러리와 도구들을 쉽게 활용할 수 있으며, Dart 및 Flutter 프로젝트에서 사용할 수 있는 수많은 패키지들을 제공한다.

Pub.dev에서 패키지 검색

  1. 패키지 검색 인터페이스
    Pub.dev의 홈페이지에서 검색창을 이용해 필요한 패키지를 찾을 수 있다. 검색창에 원하는 키워드를 입력하면 해당 키워드와 관련된 패키지들이 리스트 형태로 제공된다.

  2. 검색 결과 필터링
    Pub.dev는 검색 결과를 필터링할 수 있는 옵션을 제공한다. 이를 통해 필요한 패키지를 더욱 쉽게 찾을 수 있다.

  3. Platform: Dart, Flutter, Web, Android, iOS 등의 플랫폼을 기준으로 필터링할 수 있다.

  4. Score: Pub.dev는 패키지의 품질, 사용성, 유지관리 상태를 종합적으로 평가하는 점수 시스템을 제공한다. 높은 점수를 받은 패키지를 우선적으로 고려하는 것이 좋다.
  5. Popularity: 패키지가 얼마나 널리 사용되는지를 나타낸다.
  6. Last updated: 최근 업데이트된 패키지를 기준으로 정렬하여, 활발히 유지관리되는 패키지를 우선 선택할 수 있다.

Pubspec.yaml 파일

Dart 및 Flutter 프로젝트에서 패키지를 사용하려면 프로젝트의 pubspec.yaml 파일에 해당 패키지를 명시해야 한다. pubspec.yaml 파일은 프로젝트의 의존성, 메타데이터, 스크립트 등을 정의하는 파일로, 패키지를 관리하는 핵심 역할을 한다.

Pubspec.yaml 파일 구조

name: example_project
description: A new Dart project.
version: 1.0.0

environment:
  sdk: '>=2.12.0 <3.0.0'

dependencies:
  http: ^0.13.3
  provider: ^6.0.0

위와 같이 dependencies 섹션에서 필요한 패키지를 정의할 수 있다. 여기서 각 패키지의 이름과 버전 제약을 설정하는 것이 중요하다.
예를 들어, 위의 예제에서는 http 패키지와 provider 패키지를 명시하고 있다.

패키지 설치

패키지를 설치하는 방법은 두 가지로 나눌 수 있다.

  1. 명령어를 이용한 설치
    패키지를 설치할 때 가장 간단한 방법은 Dart 패키지 관리 도구인 pub 명령어를 사용하는 것이다. 프로젝트의 루트 디렉터리에서 아래 명령어를 실행하면 pubspec.yaml 파일에 정의된 패키지가 설치된다.

bash dart pub get

또는 Flutter 프로젝트에서는 아래 명령어를 사용할 수 있다.

bash flutter pub get

  1. 직접 패키지 추가
    pubspec.yaml 파일의 dependencies 섹션에 필요한 패키지 이름과 버전을 추가한 후, 다시 위의 명령어를 실행하면 패키지가 설치된다.
    예를 들어, http 패키지를 설치하려면 다음과 같이 추가한다.

yaml dependencies: http: ^0.13.3

그런 다음 dart pub get을 실행하여 패키지를 설치한다.

의존성 관리

프로젝트의 패키지 의존성을 관리하는 것은 매우 중요하다. Dart 프로젝트에서 의존성 관리는 pubspec.lock 파일을 통해 이루어진다.

의존성 잠금 (Locking)

pubspec.lock 파일은 프로젝트에서 사용 중인 패키지들의 버전을 기록하고, 이후 패키지 업데이트 시 일관된 버전이 유지되도록 도와준다. 이 파일은 pubspec.yaml 파일에서 정의된 버전을 기반으로 설치된 패키지들의 실제 버전을 잠금(lock) 처리하여 기록한다.

Semantic Versioning

패키지 버전을 명시할 때 Dart는 Semantic Versioning을 따른다. 패키지의 버전은 MAJOR.MINOR.PATCH 형식으로 관리되며, 각 부분은 아래와 같은 의미를 가진다.

예를 들어, ^0.13.3이라고 명시하면, 0.13.x 버전의 패키지를 사용하지만, 0.14.0 이상의 버전은 설치되지 않는다.

Pub.dev에서 패키지 업그레이드

패키지를 처음 설치한 이후에도 프로젝트가 발전함에 따라 패키지의 최신 버전을 사용할 필요가 있을 수 있다. Pub.dev에서는 설치된 패키지의 최신 버전을 확인하고, 이를 업그레이드할 수 있는 기능을 제공한다.

명령어를 이용한 패키지 업그레이드

Dart 프로젝트에서 설치된 패키지의 최신 버전으로 업그레이드하려면 다음 명령어를 사용할 수 있다.

dart pub upgrade

또는 Flutter 프로젝트에서는 다음 명령어를 실행할 수 있다.

flutter pub upgrade

이 명령어는 pubspec.yaml 파일에 명시된 패키지들의 버전 제약을 고려하여, 해당 패키지의 최신 버전으로 업데이트한다.
업데이트된 패키지들의 버전 정보는 pubspec.lock 파일에 기록되어 추후 동일한 패키지 버전이 유지되도록 관리된다.

특정 패키지 업그레이드

모든 패키지가 아닌, 특정 패키지만을 최신 버전으로 업그레이드하고 싶다면 해당 패키지의 이름을 명시할 수 있다. 예를 들어, http 패키지를 최신 버전으로 업그레이드하려면 다음 명령어를 실행한다.

dart pub upgrade http

이렇게 특정 패키지만을 선택하여 업그레이드할 수 있으며, 업그레이드된 패키지의 버전 역시 pubspec.lock 파일에 기록된다.

패키지 롤백 (Reverting to a Previous Version)

패키지 업그레이드 후 예상치 못한 문제나 버그가 발생하는 경우, 이전 버전으로 롤백해야 할 수도 있다. Pub.dev는 이러한 상황에 대비해 패키지 버전을 쉽게 제어할 수 있도록 돕는다.

pubspec.yaml 파일을 이용한 롤백

이전 버전으로 패키지를 롤백하기 위해서는 pubspec.yaml 파일에서 패키지의 버전을 수동으로 조정하면 된다. 예를 들어, http 패키지의 이전 버전인 0.12.2로 롤백하려면 다음과 같이 버전을 명시한다.

dependencies:
  http: 0.12.2

이후, dart pub get 명령어를 실행하여 지정된 버전으로 패키지를 다시 설치할 수 있다.

특정 버전 범위 지정

Dart의 Semantic Versioning 시스템은 패키지의 특정 버전 범위를 지정할 수 있는 유연한 방법을 제공한다. 예를 들어, http 패키지의 버전을 0.12.x 범위 내로 제한하고 싶다면 다음과 같이 명시할 수 있다.

dependencies:
  http: '>=0.12.0 <0.13.0'

이 경우 0.12.x 버전의 패키지 중 가장 최신 버전이 설치된다.

패키지의 디펜던시 트리 확인

프로젝트에서 사용하는 패키지들이 서로 의존하는 패키지들이 있을 수 있다. 이러한 의존 관계를 확인하고 관리하는 것은 프로젝트의 안정성을 보장하는 데 중요하다. Dart는 이러한 의존 관계를 시각적으로 확인할 수 있는 도구를 제공한다.

명령어를 이용한 디펜던시 트리 확인

dart pub deps 명령어를 사용하면 프로젝트의 디펜던시 트리를 출력하여, 각 패키지가 다른 어떤 패키지에 의존하는지 확인할 수 있다.

dart pub deps

위 명령어를 실행하면 설치된 모든 패키지들의 의존 관계가 트리 형식으로 출력되며, 이를 통해 충돌 가능성을 미리 확인하고 조정할 수 있다.

직접 만든 패키지 배포

Pub.dev에서는 Dart 패키지를 검색하고 설치하는 것뿐만 아니라, 직접 만든 패키지를 배포하는 것도 가능한다. 자신이 개발한 라이브러리를 다른 개발자와 공유하거나, 자신이 사용하기 위해 패키지로 관리하는 것이 가능해진다.

패키지 작성

직접 만든 패키지를 Pub.dev에 배포하려면, 먼저 패키지 구조를 정의해야 한다. Dart 프로젝트 디렉터리는 다음과 같은 구조를 따른다.

my_package/
  lib/
    my_package.dart
  pubspec.yaml

여기서 lib/ 폴더는 패키지의 주요 코드를 저장하는 디렉터리이고, pubspec.yaml 파일은 패키지의 메타데이터 및 의존성을 정의하는 역할을 한다.

패키지 배포 과정

  1. Pubspec.yaml 설정
    패키지를 배포하기 위해서는 pubspec.yaml 파일에 메타데이터를 적절히 설정해야 한다. 특히, 패키지의 이름, 설명, 버전, 라이선스 정보 등이 포함되어야 한다. 예시는 다음과 같다.

yaml name: my_package description: A Dart package for demonstrating Pub.dev publishing. version: 1.0.0 environment: sdk: '>=2.12.0 <3.0.0'

  1. 배포 준비
    배포 준비가 완료되면 dart pub publish 명령어를 실행하여 패키지를 Pub.dev에 업로드할 수 있다.

bash dart pub publish

명령어 실행 후, 패키지가 정상적으로 배포되기 전에 몇 가지 확인 과정이 진행되며, 이 과정에서 패키지의 구조와 설정이 검토된다.

  1. 배포 완료
    모든 과정이 정상적으로 완료되면 패키지는 Pub.dev에 게시되고, 다른 개발자들이 사용할 수 있게 된다.

Pub.dev에서 패키지 버전 관리와 협업

다수의 개발자가 협업하는 프로젝트에서는 패키지 버전 관리가 매우 중요하다. Pub.dev는 패키지 관리와 관련된 여러 가지 도구를 제공하여 프로젝트가 효율적으로 운영되도록 지원한다. 특히, 패키지 충돌 방지 및 의존성 관리에 주의해야 한다.