[Dart 언어강좌] 016. Dart 패키지 관리, 직접 패키지 만들기

작성일: 2023년 10월

1. Dart 패키지란?

Dart 패키지는 Dart 언어로 작성된 코드의 집합으로, 특정 기능을 재사용할 수 있도록 돕는 모듈입니다. 패키지는 코드, 리소스, 문서, 그리고 메타데이터를 포함하는 여러 개의 파일과 디렉토리로 구성됩니다. 패키지를 사용함으로써 개발자는 코드 중복을 줄이고, 유용한 기능들을 손쉽게 가져와 사용할 수 있습니다.

2. Dart의 패키지 관리 시스템

Dart 패키지 관리는 pub이라는 도구를 통해 이루어집니다. 이 도구는 패키지 설치, 업데이트, 제거, 그리고 의존성 관리 등을 지원합니다.

2.1. pubspec.yaml 파일

패키지를 관리하기 위해, 모든 Dart 프로젝트는 pubspec.yaml 파일을 포함해야 합니다. 이 파일은 프로젝트의 이름, 버전, 의존성 등을 정의합니다. 예를 들어:

name: my_package
version: 1.0.0

dependencies:
  http: ^0.13.3

위의 예제에서, my_package라는 패키지는 http 패키지에 의존하고 있습니다. 의존성의 버전 번호는 일정 범위 내에서 지정할 수 있으며, ^ 기호는 해당 버전 이상을 의미합니다.

3. 패키지 설치 및 관리

3.1. 패키지 설치

특정 패키지를 설치하기 위해서는 아래의 명령어를 사용합니다:

dart pub get

이 명령어는 pubspec.yaml 파일에 명시된 모든 의존성을 다운로드하고 설치합니다. 설치된 패키지는 .dart_tool/packages 디렉토리에 저장됩니다.

3.2. 패키지 업데이트

패키지를 업데이트하려면 아래의 명령어를 사용합니다:

dart pub upgrade

이 명령어는 의존성의 최신 버전으로 패키지를 업데이트합니다.

3.3. 설치된 패키지 목록 보기

현재 프로젝트에 설치된 모든 패키지를 보려면 다음의 명령어를 사용합니다:

dart pub deps

4. Dart 패키지 만들기

자신만의 패키지를 만들기 위해서는 아래의 단계를 따릅니다.

4.1. 패키지 생성

다음 명령어를 통해 새로운 패키지를 생성합니다:

dart create --template=package-simple my_new_package

이렇게 생성된 my_new_package 디렉토리에는 기본적인 구조와 샘플 코드가 포함되어 있습니다.

4.2. 패키지 구조

다음은 생성된 패키지의 기본 구조입니다:


my_new_package/
├── lib/
│   └── my_new_package.dart
├── test/
│   └── my_new_package_test.dart
└── pubspec.yaml

lib/my_new_package.dart: 패키지의 주요 코드를 작성하는 곳입니다.

test/my_new_package_test.dart: 패키지를 테스트하기 위한 유닛 테스트 코드입니다.

pubspec.yaml: 패키지의 메타데이터와 의존성을 정의하는 파일입니다.

4.3. 패키지 개발

lib/my_new_package.dart 파일에 기능을 추가하여 패키지를 개발할 수 있습니다. 예를 들어:

library my_new_package;

class Greeter {
  String greet(String name) {
    return '안녕하세요, $name!';
  }
}

위의 예시는 Greeter 클래스를 정의하고, 사용자의 이름을 받아 인사하는 메소드를 추가했습니다.

4.4. 패키지 테스트

패키지의 코드가 예상대로 작동하는지 확인하기 위해, 유닛 테스트를 작성할 필요가 있습니다. test/my_new_package_test.dart 파일에 테스트 코드를 추가합니다:

import 'package:test/test.dart';
import 'package:my_new_package/my_new_package.dart';

void main() {
  test('Greeter 인사 테스트', () {
    final greeter = Greeter();
    expect(greeter.greet('John'), '안녕하세요, John!');
  });
}

이 코드는 Greeter 클래스의 greet 메소드를 테스트합니다. 테스트 패키지 test를 사용하려면 pubspec.yaml에 추가해야 합니다:

dev_dependencies:
  test: ^1.16.0

4.5. 패키지 실행

패키지를 테스트하려면 다음의 명령어를 실행합니다:

dart test

이 명령어는 test 디렉토리 내 모든 유닛 테스트를 실행합니다. 모든 테스트가 통과하면 패키지가 성공적으로 작동하는 것입니다.

5. 패키지 배포

신규 패키지를 만들고 테스트한 후에는, 이를 배포할 수 있습니다. Dart 패키지를 배포하기 위해서는 pub.dev로 가서 로그인한 후 패키지를 업로드해야 합니다.

5.1. 패키지 배포 준비하기

패키지를 배포하기 전에, pubspec.yaml 파일을 다음과 같이 업데이트해야 합니다:

name: my_new_package
version: 1.0.0
description: '간단한 인사 패키지'
homepage: 'https://github.com/유저이름/my_new_package'
repository: 'https://github.com/유저이름/my_new_package'
issue_tracker: 'https://github.com/유저이름/my_new_package/issues'
environment:
  sdk: '>=2.14.0 <3.0.0'

여기서 각 필드는 다음과 같은 의미를 갖습니다:

  • name: 패키지의 이름
  • version: 패키지의 버전
  • description: 패키지 설명
  • homepage: 패키지의 홈페이지 URL
  • repository: 소스 코드 저장소 링크
  • issue_tracker: 이슈 트래킹 링크
  • environment: 패키지가 작동할 Dart SDK의 버전

5.2. 패키지 배포하기

패키지를 배포하려면 다음 명령어를 실행합니다:

dart pub publish

이 명령어는 패키지를 pub.dev에 업로드합니다. 배포 전에 필요한 정보를 입력하라는 메시지가 표시됩니다.

6. 결론

Dart 패키지 관리는 코드의 재사용성을 높이고, 개발 생산성을 크게 향상시킬 수 있는 중요한 도구입니다. 다양한 패키지를 활용하고, 자신만의 패키지를 만들어 배포하는 과정을 통해 Dart 생태계에 기여할 수 있습니다. Dart 언어의 매력을 한 층 더 깊이 느껴 보세요!

이 글이 도움이 되셨다면 공유 부탁드립니다!