패키지의 버전 관리를 위해 사용되는 pubspec.yaml에 대해,
그 역할과 사용 방법을 자세히 소개합니다.
yaml이란?
YAML은 “YAML Ain’t Markup Language”의 약자로,
데이터를 간결하게 표현하기 위한 데이터 직렬화 언어입니다.
설정 파일이나 JSON과 같은 데이터 파일에 사용됩니다.
특징으로, YAML은 Python처럼 들여쓰기를 사용하여 계층적 데이터를 표현합니다.
flutter의 pubspec.yaml이란?
“pubspec.yaml”은 Flutter 프로젝트의 설정 파일로,
애플리케이션의 이름, 설명, 버전 정보와 프로젝트가 의존하는 패키지 정보,
그 패키지의 버전 등을 관리합니다.
pubspec.yaml의 구조
“pubspec.yaml”의 기본 구조는 다음과 같습니다:
- “name”:
애플리케이션의 이름. - “description”:
애플리케이션의 간단한 설명. - “version”:
애플리케이션의 버전. - “environment”:
이 프로젝트가 의존하는 Flutter SDK의 버전을 지정. - “dependencies”:
이 프로젝트가 의존하는 외부 패키지를 지정. - “dev_dependencies”:
개발 중에만 사용되는 패키지(테스트 프레임워크 등)를 지정.
buildrunner나 riverpod_generator와 같은 개발 시 동작하는 패키지는 여기에 정의합니다.
실제로는 다음과 같이 작성됩니다.
name: check
description: A new Flutter project.
version: 1.0.0+1
environment:
sdk: ">=2.17.6 <3.18.2"
dependencies:
cupertino_icons: 1.0.2
flutter:
sdk: flutter
flutter_localizations:
sdk: flutter
flutter_riverpod:
dev_dependencies:
build_runner: ^2.4.0
dart_code_metrics: ^5.7.0
flutter_test:
sdk: flutter
pubspec.yaml의 버전 의미
패키지의 버전 번호는 “주.부.패치” 형식으로 표현됩니다.
각 숫자의 의미는 다음과 같습니다.
- “주”:호환되지 않는 큰 변경을 가한 경우 증가합니다.
- “부”:기존 기능에 영향을 주지 않고 기능을 추가한 경우 증가합니다.
- “패치”:버그 수정이나 작은 변경의 경우 증가합니다.
예를 들어, [패키지명: 3.12.4]와 같이 지정한 경우, 주 버전이 3, 부 버전이 12, 패치 버전이 4입니다.
pubspec.yaml의 버전 지정
pubspec.yaml의 버전 지정은 다음과 같이 작성할 수 있습니다.
패키지명: [공백]
버전을 지정하지 않은 경우입니다. 최신 버전이 자동으로 선택됩니다.
드물게 파괴적인 변경(기존 코드에서 실행되지 않는 등)이 있기 때문에,
특히 중요한 패키지에는 구체적인 버전을 지정하는 것이 권장됩니다.
패키지명: 1.0.0
버전을 지정한 경우입니다. 기재된 버전이 선택됩니다.
패키지명: “>=1.0.0 <2.0.0”
버전을 범위 지정한 경우입니다. 지정된 범위 내에서 버전이 선택됩니다.
패키지명: ^1.0.0
지정한 버전 이상, 주 버전이 동일한 버전 범위에서
자동으로 선택됩니다. 이 경우, “>=1.0.0 <2.0.0″과 동의어입니다.
버전을 지정하지 않은 경우, 최신 버전이 자동으로 선택되지만,
예기치 않은 문제를 피하기 위해, 특히 중요한 패키지에는 구체적인 버전을
지정하는 것이 권장됩니다.
pubspec.lock이란?
“pubspec.lock” 파일은 사용되는 각 패키지의 구체적인 버전을 기록합니다.
패키지의 버전을 범위 지정한 경우, 실제로 선택된 버전을 여기서 확인할 수 있습니다.
버전 업데이트 명령어
pubspec.yaml은 작성한 것만으로는 버전 업그레이드는 이루어지지 않습니다.
다음을 참고하여 명령어를 실행하세요.
- 설치: “flutter pub get”
pubspec.yaml에 기재된 패키지를 설치합니다.
설치된 경우 패키지의 버전을 최신 버전으로 업데이트합니다.
- 업그레이드: “flutter pub upgrade”
패키지의 버전을 최신 버전으로 업데이트합니다.
범위 지정한 경우, 그 범위 내의 최신 버전으로 업데이트합니다.
- 다운그레이드: “flutter pub downgrade”
패키지의 버전을 가장 오래된 버전으로 업데이트합니다.
범위 지정한 경우, 그 범위 내의 가장 오래된 버전으로 업데이트합니다.
- 버전 의존 관계 확인: “flutter pub deps”
패키지 간의 버전 의존 관계를 확인할 수 있습니다.
프로젝트의 의존 관계 트리가 표시되며, 패키지 간의 의존 관계를 참조할 수 있습니다.
- 버전 확인: “flutter pub outdated”
다음 항목에서 버전 정보를 확인할 수 있습니다.
Current: 현재 버전
Upgradable: pubspec.yaml 파일에서 허용되는 최신 버전
Resolvable: 의존 관계 있는 다른 패키지가 사용할 수 있는 버전
Latest: 사용할 수 있는 패키지의 최신 버전
- 주 버전 업그레이드: flutter pub upgrade –major-versions
pubspec.yaml 파일에 열거된 패키지를
가능한 최신 버전으로 업데이트합니다.
- 개별 업데이트: “flutter pub [명령어] [패키지명]
위의 명령어 뒤에 패키지명을 지정하면 그 패키지만 업데이트할 수 있습니다.
예) “freezed”의 설치: flutter pub get freezed
정리
“pubspec.yaml”은 Flutter 프로젝트에서 주로 패키지 관리 역할을 하지만,
그 외에도 프로젝트 메타데이터 정의, 외부 패키지 의존 관계 관리, 리소스 지정 등을
관리할 수 있습니다.
pubspec.yaml을 사용한 버전 관리는 Flutter로 애플리케이션 개발에 매우 중요하며,
저는 종종 버전 관리에 실패하여 빌드하지 못하거나 buildrunner를 실행하지 못하는 경우가 있습니다.
이 기사가 같은 방식으로 pubspec.yaml 설계에 어려움을 겪는 분들에게 도움이 되기를 바랍니다.