Flutter

Package 버전관리 전략

flutter developer 2025. 1. 27. 20:23

 

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 기능을 빠르게 적용하고 있다. 그러나 일부 패키지가 정식 버전과 호환되지 않아, 다음과 같은 전략을 사용한다:

  1. beta 또는 alpha 버전을 사용하지만, 핵심 기능에는 안정적인 stable 버전을 유지한다.
  2. flutter channel beta로 전환하여 실험적 기능을 테스트한다.
  3. 특정 팀만 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 패키지 관리는 프로젝트의 유지보수성을 결정하는 중요한 요소이다. 안정적인 버전 전략을 선택하는 것이 중요하며, 다음과 같은 원칙을 따르는 것이 좋다:

  1. 일반적으로 ^버전을 사용하여 패치 및 마이너 업데이트를 허용한다.
  2. + 또는 -beta, -alpha 등의 메타데이터 버전을 이해하고 적절히 활용한다.
  3. 장기 유지보수가 필요한 경우 고정 버전을 사용하지만, 업데이트를 주기적으로 확인해야 한다.
  4. 의존성 충돌이 발생하면 flutter pub outdated와 dependency_overrides를 활용하여 해결한다.
  5. 로컬 패키지 또는 Git 패키지를 활용할 수 있지만, 배포용 프로젝트에서는 pub.dev 등록 패키지를 선호한다.
  6. CI/CD 파이프라인에 flutter pub outdated 검사 및 의존성 관리 정책을 추가하여 안정적인 배포 환경을 구축한다.

이를 통해 버전 충돌을 최소화하고, 안정적인 개발 환경을 유지할 수 있다.