Files
asciinevrdie/analysis/supply-chain-review.md
JiWoong Sul 916a50992c docs: CLAUDE.md 작업 프로토콜 추가 및 수정 계획 작성
- CLAUDE.md: Claude-Gemini 교차 토론 프로토콜 추가
- CLAUDE.md: 존재하지 않는 디렉토리 3개 제거
- analysis/fix-plan: 4 Phase 수정 계획 (Claude-Gemini 합의)
- .claude/agents/: dev 리뷰 에이전트 9개 복사
- .claude/skills/: 프로젝트 스킬 4개 복사
2026-03-27 16:52:52 +09:00

7.5 KiB

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 업데이트 계획 수립

[HIGH] 단기 조치 (1-2주)

  1. cupertino_icons 제거

    # pubspec.yaml에서 삭제
    # cupertino_icons: ^1.0.8
    
  2. build_runner 체인 업데이트

    flutter pub upgrade build_runner json_serializable
    
    • 중단된 build_resolvers, build_runner_core 전이 의존성 해소
    • 빌드 성능 개선 기대
  3. freezed 2.x -> 3.x 마이그레이션

    • freezed_annotation + freezed 동시에 메이저 업데이트
    • 코드 생성 파일 전체 재생성 필요: dart run build_runner build --delete-conflicting-outputs

[MEDIUM] 중기 조치 (1개월)

  1. just_audio 0.10.x 업데이트

    • Android 최신 버전 호환성 개선
    • 단일 메인테이너(ryanheise) 패키지이므로 대안(audioplayers) 검토도 병행
  2. package_info_plus 9.x 업데이트

  3. flutter_lints 6.x 업데이트

    • 최신 lint 규칙 적용으로 코드 품질 향상

[LOW] 장기 고려

  1. 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 수정 동의)
폰트 라이선스 중간 리스크 중간 리스크 합의