# asciineverdie Supply Chain Review > 검토일: 2026-03-27 > Flutter 3.35.3 / Dart 3.9.2 > Claude-Gemini Cross-Debate 완료 (합의 도달) ## Supply Chain Score: 6 / 10 | 항목 | 점수 | 비고 | |------|------|------| | 보안 (CVE) | 8/10 | 알려진 CVE 없음 | | 라이선스 | 6/10 | GPL 오염 없음, 폰트 라이선스 파일 누락 | | 유지보수 건강도 | 5/10 | google_mobile_ads 2 메이저 뒤처짐, build_runner 전이 의존성 중단 | | 최신성 | 4/10 | 직접 의존성 7개 중 5개 메이저 버전 뒤처짐 | | 의존성 비대화 | 7/10 | 직접 11개, 프로덕션 전이 포함 ~62개 (합리적 수준) | --- ## 1. 취약점 (Vulnerabilities) | 패키지 | 버전 | CVE | 심각도 | 수정 버전 | |--------|------|-----|--------|-----------| | (해당 없음) | - | - | - | - | **결론:** OSV(Open Source Vulnerabilities) 데이터베이스 및 GitHub Advisory Database 기준, 현재 사용 중인 의존성 버전에서 알려진 CVE는 발견되지 않음. 다만 `google_mobile_ads` 5.x는 최신 iOS Privacy Manifest 및 UMP(User Messaging Platform) 요구사항을 완벽히 지원하지 않을 가능성이 있어, App Store 심사 거절 리스크 존재. --- ## 2. 라이선스 이슈 | 패키지/자산 | 라이선스 | 리스크 | 필요 조치 | |------------|---------|--------|-----------| | 모든 Dart 패키지 | BSD-3 / MIT / Apache-2.0 | 없음 | GPL 오염 없음 -- 상업적 사용 안전 | | JetBrainsMono (폰트) | OFL-1.1 (추정) | 중간 | 라이선스 파일 미포함. `assets/fonts/`에 OFL.txt 추가 필요 | | PressStart2P (폰트) | OFL-1.1 (추정) | 중간 | 라이선스 파일 미포함. `assets/fonts/`에 OFL.txt 추가 필요 | **폰트 라이선스 상세:** - JetBrains Mono: JetBrains 배포, Apache 2.0 라이선스 - Press Start 2P: Google Fonts 배포, OFL 라이선스 - 두 폰트 모두 상업적 사용 가능하나, 라이선스 텍스트를 앱에 포함해야 하는 의무(attribution) 존재 - 현재 `assets/fonts/` 디렉토리에 LICENSE 파일이 **전혀 없음** - App Store / Play Store 심사에서는 보통 문제되지 않으나, 법적 리스크는 존재 --- ## 3. 유지보수 건강도 | 패키지 | 현재 버전 | 상태 | 리스크 | |--------|----------|------|--------| | cupertino_icons | 1.0.8 | 정상 유지보수 | 낮음 (단, 미사용) | | intl | 0.20.2 | Dart 팀 관리 | 없음 | | path_provider | 2.1.5 | Flutter 팀 관리 | 없음 | | shared_preferences | 2.5.3 | Flutter 팀 관리 | 없음 | | just_audio | 0.9.46 | 활발한 커뮤니티 (ryanheise) | 단일 메인테이너 리스크 | | freezed_annotation | 2.4.4 | 활발한 커뮤니티 (rrousselGit) | 단일 메인테이너 리스크 | | json_annotation | 4.9.0 | Google/Dart 팀 관리 | 없음 | | google_mobile_ads | 5.3.1 | Google 관리 | **v5.x 지원 종료 임박** | | in_app_purchase | 3.2.3 | Flutter 팀 관리 | 없음 | | package_info_plus | 8.3.1 | FlutterCommunity 관리 | 낮음 | | build_runner | 2.5.4 | Google/Dart 팀 관리 | **전이 의존성 중단됨** | **중단된 전이 의존성 (Discontinued transitive deps):** - `build_resolvers` 2.5.4 -- 공식 중단 선언 - `build_runner_core` 9.1.2 -- 공식 중단 선언 - 이 패키지들의 기능은 최신 `build_runner`(2.10+)에 내재화됨 - 즉각적인 빌드 실패를 일으키진 않으나, 향후 Dart SDK 업데이트 시 호환성 문제 발생 확실 --- ## 4. 메이저 버전 뒤처짐 (Outdated - Major Behind) ### 직접 의존성 (Direct) | 패키지 | 현재 | 최신 | 뒤처짐 | 비고 | |--------|------|------|--------|------| | google_mobile_ads | 5.3.1 | 7.0.0 | **2 메이저** | iOS Privacy Manifest, UMP 지원 필수 | | freezed_annotation | 2.4.4 | 3.1.0 | 1 메이저 | freezed 3.x와 짝 맞춰야 함 | | package_info_plus | 8.3.1 | 9.0.0 | 1 메이저 | | | just_audio | 0.9.46 | 0.10.5 | 1 마이너 (pre-1.0) | 0.x 시맨틱에서는 마이너 = 메이저 | | json_annotation | 4.9.0 | 4.11.0 | 2 마이너 | | ### 개발 의존성 (Dev) | 패키지 | 현재 | 최신 | 뒤처짐 | 비고 | |--------|------|------|--------|------| | build_runner | 2.5.4 | 2.13.1 | 8 마이너 | 중단된 전이 의존성 해소 위해 업데이트 필요 | | freezed | 2.5.8 | 3.2.5 | **1 메이저** | freezed_annotation 3.x와 함께 업데이트 | | json_serializable | 6.9.5 | 6.13.1 | 4 마이너 | | | flutter_lints | 5.0.0 | 6.0.0 | 1 메이저 | | --- ## 5. 불필요한 의존성 | 패키지 | 사용 여부 | 판정 | 근거 | |--------|----------|------|------| | cupertino_icons | 미사용 | **제거 권장** | `lib/` 전체에서 `CupertinoIcons` import 0건. ~280KB 바이너리 낭비 | | json_annotation | 간접 사용 | 유지 | freezed_annotation이 re-export하지만, .g.dart 생성 파일이 직접 import함. 제거 시 빌드 깨질 수 있음 | --- ## 6. 의존성 트리 통계 | 항목 | 수치 | |------|------| | 직접 프로덕션 의존성 | 11개 (SDK 포함) | | 직접 개발 의존성 | 6개 (SDK 포함) | | 프로덕션 전이 포함 총 패키지 | ~62개 | | 개발 포함 총 패키지 (pubspec.lock) | 122개 | | 코드 생성 대상 파일 (.freezed.dart + .g.dart) | 8개 | --- ## 권장 조치 사항 ### [CRITICAL] 즉시 조치 1. **폰트 라이선스 파일 추가** - `assets/fonts/JetBrainsMono-LICENSE.txt` (Apache 2.0) - `assets/fonts/PressStart2P-OFL.txt` (OFL 1.1) - 앱 내 오픈소스 라이선스 화면에 표시 필요 - Google Fonts 및 JetBrains 공식 사이트에서 다운로드 2. **google_mobile_ads 7.x 업데이트 계획 수립** - iOS Privacy Manifest 대응 필수 (App Store 심사 거절 리스크) - v7.0.0 마이그레이션 가이드: https://developers.google.com/admob/flutter/migration ### [HIGH] 단기 조치 (1-2주) 3. **cupertino_icons 제거** ```yaml # pubspec.yaml에서 삭제 # cupertino_icons: ^1.0.8 ``` 4. **build_runner 체인 업데이트** ```bash flutter pub upgrade build_runner json_serializable ``` - 중단된 `build_resolvers`, `build_runner_core` 전이 의존성 해소 - 빌드 성능 개선 기대 5. **freezed 2.x -> 3.x 마이그레이션** - freezed_annotation + freezed 동시에 메이저 업데이트 - 코드 생성 파일 전체 재생성 필요: `dart run build_runner build --delete-conflicting-outputs` ### [MEDIUM] 중기 조치 (1개월) 6. **just_audio 0.10.x 업데이트** - Android 최신 버전 호환성 개선 - 단일 메인테이너(ryanheise) 패키지이므로 대안(audioplayers) 검토도 병행 7. **package_info_plus 9.x 업데이트** 8. **flutter_lints 6.x 업데이트** - 최신 lint 규칙 적용으로 코드 품질 향상 ### [LOW] 장기 고려 9. **win32 전이 의존성** -- package_info_plus가 Windows 지원에 사용. 모바일 전용이면 무시 가능 --- ## Claude-Gemini Cross-Debate 결과 | 항목 | Claude 의견 | Gemini 초기 의견 | 합의 | |------|------------|-----------------|------| | 종합 점수 | 6/10 | 3.5/10 | **6/10** (Gemini 수정 동의) | | CVE-2023-48220 | 해당 없음 (Nextcloud 취약점) | package_info_plus 관련 주장 | **해당 없음** (Gemini 철회) | | json_annotation 제거 | 위험 (빌드 깨짐 가능) | 제거 권장 | **유지** (Gemini 수정 동의) | | build_runner 긴급도 | 중기 과제 (당장은 동작) | 즉시 수술 필요 | **단기 과제** (절충) | | 보안 리스크 수준 | Low | Medium-High | **Low** (Gemini 수정 동의) | | 폰트 라이선스 | 중간 리스크 | 중간 리스크 | **합의** |