4.1 KiB
4.1 KiB
Refactoring History 001 — command_data.dart 도메인 분리
목표
AI(Claude 등)가 코드베이스를 더 효율적으로 읽고 수정할 수 있도록 하나의 거대한 파일에 집중된 데이터 클래스들을 도메인별로 분리한다.
배경
command_data.dart 파일에 100개 이상의 JSON 직렬화 데이터 클래스가
단일 파일에 존재했다. json_serializable의 build_runner가 하나의
command_data.g.dart를 생성하는 구조라 관리 편의상 통합되어 있었으나,
AI가 단일 커맨드를 수정할 때도 전체 파일을 읽어야 해서 컨텍스트 낭비가 컸다.
AI가 코드 관리를 지원하는 환경에서는 파일 파편화 비용이 사라지므로 도메인 분리 결정을 내렸다.
변경 내용
새로 생성된 파일
| 파일 | 내용 | 클래스 수 |
|---|---|---|
lib/oto/data/base_data.dart |
DataParam, DataFile (모든 커맨드 데이터의 베이스) | 2 |
lib/oto/data/build_data.dart |
iOS/Flutter/MSBuild/Xcode/Testflight 등 빌드 관련 | 19 |
lib/oto/data/file_data.dart |
Copy/Delete/Rename/Zip/FileRead/FileWrite 등 | 10 |
lib/oto/data/git_data.dart |
Git/GitHub 커맨드 데이터 | 15 |
lib/oto/data/notification_data.dart |
Slack, Mattermost 발송 데이터 | 5 |
lib/oto/data/integration_data.dart |
Jira, Jenkins 연동 데이터 | 3 |
lib/oto/data/network_data.dart |
FTP, Web 요청 데이터 | 3 |
lib/oto/data/infra_data.dart |
Docker, AWS CLI, Gradle, Protobuf | 4 |
lib/oto/data/util_data.dart |
Shell, String, JSON, Process, SMB, Timer 등 | 20 |
수정된 파일
lib/oto/data/command_data.dart
- DataParam, DataBuildFlutter 등 모든 도메인 클래스 제거
- DataBuild, DataScheduler, DataCommand 3개만 유지 (파이프라인 루트 데이터)
- 도메인 파일 9개를
export하는 barrel 파일로 전환
영향받은 파일
없음. 기존 48개 파일의 import 'package:oto_cli/oto/data/command_data.dart'가
barrel export를 통해 그대로 동작하므로 import 수정 불필요.
생성된 .g.dart 파일
build_runner build --delete-conflicting-outputs 실행으로 자동 생성됨:
base_data.g.dartbuild_data.g.dartfile_data.g.dartgit_data.g.dartnotification_data.g.dartintegration_data.g.dartnetwork_data.g.dartinfra_data.g.dartutil_data.g.dart
결과
dart analyze에러 0개 (기존 warning 1개 그대로)build_runner278 outputs 성공- AI가 특정 도메인 커맨드 수정 시 읽어야 할 코드량 대폭 감소
- 예: Flutter 빌드 수정 →
build_data.dart(~330줄) 만 읽으면 됨 - 이전:
command_data.dart(1300+ 줄) 전체를 읽어야 했음
- 예: Flutter 빌드 수정 →
현재 data/ 디렉토리 구조
lib/oto/data/
├── command_data.dart ← barrel (DataBuild, DataScheduler, DataCommand + exports)
├── command_data.g.dart
├── base_data.dart ← DataParam, DataFile 베이스 클래스
├── base_data.g.dart
├── build_data.dart ← 빌드 관련 (iOS, Flutter, MSBuild 등)
├── build_data.g.dart
├── file_data.dart ← 파일 시스템 operations
├── file_data.g.dart
├── git_data.dart ← Git, GitHub
├── git_data.g.dart
├── notification_data.dart ← Slack, Mattermost
├── notification_data.g.dart
├── integration_data.dart ← Jira, Jenkins
├── integration_data.g.dart
├── network_data.dart ← FTP, Web
├── network_data.g.dart
├── infra_data.dart ← Docker, AWS, Gradle, Protobuf
├── infra_data.g.dart
├── util_data.dart ← Shell, String, JSON, Process, Timer 등
├── util_data.g.dart
├── pipeline_data.dart ← 기존 파이프라인 구조 데이터 (변경 없음)
├── pipeline_data.g.dart
├── jenkins_data.dart ← Jenkins 환경변수 응답 데이터 (변경 없음)
├── jenkins_data.g.dart
├── jira_data.dart ← Jira API 응답 데이터 (변경 없음)
└── jira_data.g.dart
다음 작업
refactoring/to-do.md 참조