Dio 패키지에 문제점을 발견해서 이슈 제기하고 PR을 넣었다. 하지만 패키지 버전 기입을 수정하라는 답변이 날라왔고 이번기회를 통해 패키지 버전관리 전략에 대해 한 번 짚고 넘어가야겠다는 생각이들었다.
플러터 패키지 버전 관리 전략
1 ^버전 (Caret 버전, 권장 방식)
dependencies:
http: ^0.13.6
- ^는 Semantic Versioning을 따르는 범위 지정 방식이다.
- ^0.13.6은 0.13.6 이상이면서 메이저 버전(첫 번째 숫자)가 변하지 않는 범위에서 최신 버전을 사용한다.
- 0.13.7, 0.13.8 → 허용됨
- 0.14.0 → 허용되지 않음
2 +버전 (Build Metadata 버전)
dependencies:
http: 0.13.6+1
- +1은 빌드 메타데이터를 나타내며, 기능이 동일하지만 빌드가 변경되었음을 의미한다.
- 일반적으로 버전 충돌을 유발하지 않으며, 패키지의 빌드 및 배포 과정에서 활용된다.
3 -beta, -alpha (Pre-release 버전)
dependencies:
http: 0.14.0-beta.1
- -beta, -alpha 등은 사전 배포(Pre-release) 버전을 의미한다.
- 정식 출시 전에 테스트 용도로 제공되며, 안정성이 낮을 수 있다.
- 일반적으로 stable 버전을 사용하지만, 최신 기능을 테스트할 때 활용할 수 있다.
📌 예제: 최신 버전 테스트 전략
스타트업 C에서는 flutter 3.10.0-beta.2 버전을 사용하여 최신 Flutter 기능을 빠르게 적용하고 있다. 그러나 일부 패키지가 정식 버전과 호환되지 않아, 다음과 같은 전략을 사용한다:
- beta 또는 alpha 버전을 사용하지만, 핵심 기능에는 안정적인 stable 버전을 유지한다.
- flutter channel beta로 전환하여 실험적 기능을 테스트한다.
- 특정 팀만 pre-release 버전을 사용하여 문제 발생 시 빠르게 롤백할 수 있도록 한다.
4 "고정 버전"
dependencies:
http: "0.13.6"
- 특정 버전만 사용하도록 강제한다.
- 안정성이 높지만, 패키지 업데이트가 자동으로 이루어지지 않는다.
- 장기 유지보수가 필요한 프로젝트에서는 권장되지 않는다.
5 버전 범위 지정 (>=버전 <버전)
dependencies:
http: ">=0.13.0 <0.14.0"
- 최소 버전과 최대 버전을 지정한다.
- 예제에서는 0.13.0 이상이지만 0.14.0 미만까지만 허용된다.
- 의존성 충돌을 해결하는 용도로 활용할 수 있다.
6 any (최신 버전 자동 적용)
dependencies:
http: any
- 항상 최신 버전을 가져온다.
- 예측이 어렵고, 호환성 문제가 발생할 수 있으므로 실제 프로젝트에서는 잘 사용하지 않는다.
버전 충돌 및 해결 방법
의존성 충돌(Dependency Hell)은 패키지 간 요구하는 버전이 서로 다를 때 발생한다. 예를 들어, flutter_form_builder가 http: ^0.13.4를 요구하지만, 다른 패키지가 http: ^0.14.0을 요구하면 충돌이 발생할 수 있다.
1 flutter pub outdated 사용
터미널에서 실행하면 사용 중인 패키지의 최신 상태를 확인할 수 있다.
flutter pub outdated
출력 예시:
Package Current Upgradable Resolvable Latest
http 0.13.6 0.14.0 0.14.0 0.14.1
2 dependency_overrides 활용
만약 특정 패키지 버전을 강제해야 한다면 dependency_overrides를 사용할 수 있다.
dependency_overrides:
http: 0.13.6
그러나 이는 최후의 수단으로 사용해야 하며, 장기적인 해결책이 아니다.
Flutter 패키지 관리는 프로젝트의 유지보수성을 결정하는 중요한 요소이다. 안정적인 버전 전략을 선택하는 것이 중요하며, 다음과 같은 원칙을 따르는 것이 좋다:
- 일반적으로 ^버전을 사용하여 패치 및 마이너 업데이트를 허용한다.
- + 또는 -beta, -alpha 등의 메타데이터 버전을 이해하고 적절히 활용한다.
- 장기 유지보수가 필요한 경우 고정 버전을 사용하지만, 업데이트를 주기적으로 확인해야 한다.
- 의존성 충돌이 발생하면 flutter pub outdated와 dependency_overrides를 활용하여 해결한다.
- 로컬 패키지 또는 Git 패키지를 활용할 수 있지만, 배포용 프로젝트에서는 pub.dev 등록 패키지를 선호한다.
- CI/CD 파이프라인에 flutter pub outdated 검사 및 의존성 관리 정책을 추가하여 안정적인 배포 환경을 구축한다.
이를 통해 버전 충돌을 최소화하고, 안정적인 개발 환경을 유지할 수 있다.
'Flutter' 카테고리의 다른 글
어떻게 플러터는 변경된 위젯만 콕찝어서 다시 페인팅할 수 있는걸까? (0) | 2025.02.02 |
---|---|
Stateless Widget 과 Stateful Widget 의 선택 기준 (0) | 2025.02.02 |
Expanded 과 Flexible 의 차이 (0) | 2025.01.25 |
Segment 버튼에 애니메이션 적용하기 (0) | 2025.01.25 |
Future 와 Task의 차이 (0) | 2025.01.19 |