5.11 실전 프로젝트: Flutter 모바일 앱 만들기 & APK 빌드
웹 게시판 실습에서 배운 바이브 코딩 패턴을 모바일 앱으로 확장합니다. Flutter를 사용하여 할 일 관리(Todo) 앱을 만들고, 실제 안드로이드 기기에 설치할 수 있는 APK 파일까지 빌드합니다.
- 하나의 코드로 Android + iOS — 플랫폼별 개발 불필요
- Dart 언어 — JavaScript와 유사해 바이브 코딩에 적합
- Hot Reload — 코드 수정 즉시 반영, 반복 개선에 최적
- AI 친화적 — Claude Code가 Flutter/Dart 코드 생성에 강력
전체 워크플로우
Step 1: 개발 환경 설정
Flutter 개발에 필요한 도구를 설치합니다. Claude Code에게 직접 요청할 수 있습니다.
Flutter 개발 환경을 설정해줘.
필요한 것:
1. Flutter SDK 설치 상태 확인
2. Android SDK 설치 상태 확인
3. flutter doctor로 환경 진단
4. 문제가 있으면 해결 방법 안내
# Flutter 설치 (Windows 기준)
# 1. Flutter SDK 다운로드: https://docs.flutter.dev/get-started/install
# 2. 환경 변수 설정 후 확인
flutter --version
# 3. 환경 진단 — 부족한 것 자동 안내
flutter doctor
# 4. 새 프로젝트 생성
flutter create todo_app
cd todo_app
# 5. Claude Code 시작
claude
| 필수 도구 | 역할 | 설치 방법 |
|---|---|---|
| Flutter SDK | Flutter 프레임워크 + Dart 언어 | flutter.dev에서 다운로드 |
| Android Studio | Android SDK + 에뮬레이터 | developer.android.com에서 다운로드 |
| VS Code (선택) | Flutter 확장팩 지원 에디터 | Flutter Extension 설치 |
flutter doctor 명령어 실행 시 모든 항목에 체크(✓)가 뜨면 준비 완료입니다. 체크가 안 된 항목이 있으면 Claude Code에게 "flutter doctor에서 이 에러가 나와. 해결해줘"라고 요청하세요.
Step 2: Todo 앱 설계 — 스킬 활용
Flutter로 만들 Todo 앱을 설계해줘.
기능 요구사항:
- 할 일 목록 보기 (체크박스 + 제목 + 날짜)
- 새 할 일 추가 (제목 입력, 우선순위 선택)
- 할 일 완료 처리 (체크 토글)
- 할 일 삭제 (스와이프 삭제)
- 완료/미완료 필터링
- 데이터는 로컬 저장 (SharedPreferences)
디자인 요구사항:
- Material Design 3 스타일
- 라이트/다크 테마 지원
- 부드러운 애니메이션
- FloatingActionButton으로 추가
화면 구성:
- 메인 화면: 할 일 목록 + 필터 탭
- 추가 다이얼로그: 제목 + 우선순위 입력
앱 화면 구조
Step 3: 바이브 코딩으로 구현 — Sub-Agent 활용
위 설계대로 Flutter Todo 앱을 구현해줘.
구현 지침:
1. lib/main.dart — 앱 진입점, 테마 설정
2. lib/models/todo.dart — Todo 데이터 모델
3. lib/screens/home_screen.dart — 메인 화면
4. lib/widgets/todo_item.dart — 개별 할일 위젯
5. lib/widgets/add_todo_dialog.dart — 추가 다이얼로그
6. lib/services/storage_service.dart — SharedPreferences 저장
Sub-Agent를 활용해서 모델/화면/위젯/서비스를 병렬로 만들어줘.
코딩 규칙:
- StatefulWidget 대신 가능하면 StatelessWidget + setState 패턴
- const 생성자 적극 활용
- 한글 주석으로 핵심 로직 설명
핵심 코드 구조 미리보기
// lib/models/todo.dart — 할 일 데이터 모델
class Todo {
final String id;
final String title;
final Priority priority;
final DateTime createdAt;
bool isCompleted;
Todo({
required this.id,
required this.title,
this.priority = Priority.medium,
required this.createdAt,
this.isCompleted = false,
});
// JSON 변환 (SharedPreferences 저장용)
Map<String, dynamic> toJson() => {
'id': id,
'title': title,
'priority': priority.index,
'createdAt': createdAt.toIso8601String(),
'isCompleted': isCompleted,
};
factory Todo.fromJson(Map<String, dynamic> json) => Todo(
id: json['id'],
title: json['title'],
priority: Priority.values[json['priority']],
createdAt: DateTime.parse(json['createdAt']),
isCompleted: json['isCompleted'],
);
}
enum Priority { low, medium, high }
// lib/main.dart — 앱 진입점 (핵심 부분)
import 'package:flutter/material.dart';
import 'screens/home_screen.dart';
void main() => runApp(const TodoApp());
class TodoApp extends StatefulWidget {
const TodoApp({super.key});
@override
State<TodoApp> createState() => _TodoAppState();
}
class _TodoAppState extends State<TodoApp> {
ThemeMode _themeMode = ThemeMode.system;
void _toggleTheme() {
setState(() {
_themeMode = _themeMode == ThemeMode.dark
? ThemeMode.light
: ThemeMode.dark;
});
}
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Todo App',
theme: ThemeData(
colorSchemeSeed: Colors.blue,
useMaterial3: true,
),
darkTheme: ThemeData(
colorSchemeSeed: Colors.blue,
brightness: Brightness.dark,
useMaterial3: true,
),
themeMode: _themeMode,
home: HomeScreen(onToggleTheme: _toggleTheme),
);
}
}
Step 4: 에뮬레이터 테스트 & MCP 활용
# 에뮬레이터 실행 방법
# 1. 에뮬레이터 목록 확인
flutter emulators
# 2. 에뮬레이터 실행
flutter emulators --launch Pixel_7_API_34
# 3. 앱 실행 (Hot Reload 활성화)
flutter run
# 4. Hot Reload: 코드 수정 후 r 키 입력
# 5. Hot Restart: R 키 입력 (상태 초기화)
Todo 앱을 에뮬레이터에서 테스트해줘.
테스트 시나리오:
1. 앱 실행 → 빈 목록 화면 표시 확인
2. FAB(+) 버튼 클릭 → 추가 다이얼로그 표시
3. "Flutter 공부하기" 입력 + 높음 우선순위 → 추가
4. 할 일 체크박스 토글 → 완료 표시 (취소선)
5. 스와이프 삭제 → 목록에서 제거
6. 다크모드 토글 → 테마 전환 확인
7. 앱 종료 후 재실행 → 데이터 유지 확인
각 단계 결과를 PASS/FAIL로 정리해줘.
| 테스트 방법 | 도구 | 적합한 상황 |
|---|---|---|
| 에뮬레이터 수동 테스트 | Android Emulator / iOS Simulator | UI/UX 직접 확인, 터치 인터랙션 검증 |
| Flutter 통합 테스트 | flutter test |
위젯 동작, 비즈니스 로직 자동 검증 |
| MCP Playwright | Flutter Web 빌드 후 브라우저 테스트 | 웹 버전 자동 테스트 (크로스 플랫폼 확인) |
Todo 앱의 통합 테스트 코드를 작성해줘.
test/widget_test.dart에 다음 테스트 추가:
1. 앱 실행 시 빈 목록 표시 테스트
2. Todo 추가 후 목록에 표시 테스트
3. 완료 토글 동작 테스트
4. 삭제 동작 테스트
flutter test로 실행 가능하게 해줘.
// test/widget_test.dart — AI가 자동 생성하는 테스트 코드 예시
import 'package:flutter_test/flutter_test.dart';
import 'package:todo_app/main.dart';
void main() {
testWidgets('빈 목록에서 Todo 추가 테스트', (tester) async {
// 앱 실행
await tester.pumpWidget(const TodoApp());
// 빈 목록 확인
expect(find.text('할 일이 없습니다'), findsOneWidget);
// FAB 클릭 → 다이얼로그 열기
await tester.tap(find.byType(FloatingActionButton));
await tester.pumpAndSettle();
// 제목 입력
await tester.enterText(
find.byType(TextField), 'Flutter 공부하기');
// 추가 버튼 클릭
await tester.tap(find.text('추가'));
await tester.pumpAndSettle();
// 목록에 표시 확인
expect(find.text('Flutter 공부하기'), findsOneWidget);
});
}
Step 5: APK 빌드 — 실제 기기에 설치
테스트가 완료되면 APK 파일을 빌드하여 안드로이드 기기에 설치할 수 있습니다.
Todo 앱을 APK로 빌드해줘.
빌드 전 확인:
1. pubspec.yaml에 앱 이름, 버전 정보 확인
2. 앱 아이콘 설정 (기본 Flutter 아이콘 → 커스텀)
3. 불필요한 권한 제거
빌드 옵션:
- Release 모드 (디버그 아님)
- APK 파일로 생성 (AAB 아님)
- 파일 크기 최소화
# APK 빌드 명령어
# 1. 의존성 정리
flutter clean
flutter pub get
# 2. Release APK 빌드
flutter build apk --release
# 빌드 완료 시 출력 위치:
# build/app/outputs/flutter-apk/app-release.apk
# 3. 파일 크기 확인
ls -lh build/app/outputs/flutter-apk/app-release.apk
# 예: 약 15~25MB
# 4. 연결된 기기에 직접 설치
flutter install
APK 빌드 과정 상세
| 빌드 옵션 | 명령어 | 용도 | 파일 크기 |
|---|---|---|---|
| Debug APK | flutter build apk --debug |
개발 중 테스트용 | ~60MB (디버그 정보 포함) |
| Release APK | flutter build apk --release |
배포용 (최적화됨) | ~15-25MB |
| Split APK | flutter build apk --split-per-abi |
CPU 아키텍처별 분리 | ~7-12MB (아키텍처당) |
| App Bundle | flutter build appbundle |
Google Play 스토어 등록용 | ~10-15MB (자동 최적화) |
APK 빌드 전 체크리스트
APK 빌드 전에 다음 설정을 확인하고 수정해줘:
1. pubspec.yaml:
- name: todo_app
- description: 바이브 코딩으로 만든 할 일 관리 앱
- version: 1.0.0+1
2. android/app/build.gradle:
- minSdkVersion: 21 (Android 5.0 이상)
- targetSdkVersion: 34
- versionCode, versionName 확인
3. android/app/src/main/AndroidManifest.xml:
- 앱 이름을 한글로: "할 일 관리"
- 불필요한 인터넷 권한 제거 (오프라인 앱이므로)
4. 앱 아이콘:
- flutter_launcher_icons 패키지로 커스텀 아이콘 설정
# pubspec.yaml — 핵심 설정
name: todo_app
description: 바이브 코딩으로 만든 할 일 관리 앱
version: 1.0.0+1
environment:
sdk: '>=3.0.0 <4.0.0'
dependencies:
flutter:
sdk: flutter
shared_preferences: ^2.2.0 # 로컬 데이터 저장
dev_dependencies:
flutter_test:
sdk: flutter
flutter_launcher_icons: ^0.13.0 # 앱 아이콘 생성
# 앱 아이콘 설정
flutter_launcher_icons:
android: true
ios: true
image_path: "assets/icon/app_icon.png"
기기에 설치하기
| 설치 방법 | 절차 | 필요한 것 |
|---|---|---|
| USB 직접 설치 | USB 연결 → flutter install |
USB 케이블, 개발자 모드 활성화 |
| APK 파일 전송 | APK 파일을 기기로 복사 → 파일 탐색기에서 설치 | "출처를 알 수 없는 앱" 설치 허용 |
| QR 코드 공유 | APK를 클라우드 업로드 → QR 코드 생성 → 스캔 설치 | Google Drive, Firebase App Distribution 등 |
| Play Store 등록 | AAB 빌드 → Google Play Console 업로드 | 개발자 계정 ($25 일회성) |
웹 게시판 vs Flutter 앱 — 바이브 코딩 비교
| 비교 항목 | 5.10 웹 게시판 | 5.11 Flutter 앱 |
|---|---|---|
| 결과물 | HTML 파일 (브라우저에서 실행) | APK 파일 (스마트폰에 설치) |
| 기술 스택 | HTML + CSS + JavaScript | Flutter + Dart |
| 데이터 저장 | localStorage | SharedPreferences |
| 테스트 | MCP Playwright (브라우저) | flutter test + 에뮬레이터 |
| 배포 | GitHub Pages / Netlify | APK 파일 / Play Store |
| 바이브 코딩 난이도 | 초급 (환경 설정 불필요) | 중급 (Flutter SDK 설치 필요) |
| 생산성 단축률 | 기존 대비 ~95% 단축 | 기존 대비 ~90% 단축 |
Flutter 바이브 코딩 Tips
| 상황 | 프롬프트 예시 | 활용 도구 |
|---|---|---|
| UI 수정 | "할 일 카드에 그림자 효과를 추가하고, 우선순위에 따라 왼쪽 테두리 색을 다르게 해줘" | 바이브 코딩 + Hot Reload |
| 기능 추가 | "할 일에 마감일을 추가하고, 날짜 선택기(DatePicker)를 연동해줘" | 바이브 코딩 |
| 에러 해결 | "flutter run 하면 이 에러가 나와: [에러 메시지]. 해결해줘" | 바이브 코딩 |
| 성능 개선 | "목록 스크롤이 버벅여. ListView.builder로 최적화해줘" | 바이브 코딩 + Sub-Agent |
| APK 최적화 | "APK 크기를 줄여줘. 사용하지 않는 패키지 제거하고 ProGuard 적용" | 바이브 코딩 |
Flutter 실습 과제
다음 단계를 따라 나만의 모바일 앱을 완성해보세요:
- 환경 설정:
flutter doctor로 개발 환경 확인 - 프로젝트 생성:
flutter create todo_app으로 시작 - 설계: Claude Code에게 Todo 앱 설계 요청
- 구현: Sub-Agent로 모델/화면/위젯/서비스 병렬 생성
- 실행:
flutter run으로 에뮬레이터에서 확인 - 반복 개선: Hot Reload로 UI/기능 3회 이상 수정
- 테스트:
flutter test로 위젯 테스트 실행 - APK 빌드:
flutter build apk --release로 APK 생성 - 설치: 실제 기기에 APK 설치하여 동작 확인
- (응용): 카테고리, 마감일, 알림 등 1가지 기능 추가
5.12 실전: 기존 프로젝트 소스 대규모 개선 — AI 네이티브 리팩토링
새로 만드는 것보다 기존 코드를 개선하는 것이 실무의 80%입니다. 수십~수백 개 파일을 수정해야 하는 대규모 개선 작업에서 Claude Code의 에이전트, 스킬, MCP를 총동원하여 안전하고 체계적으로 처리하는 방법을 학습합니다.
전체 워크플로우 — 7단계 안전 개선 프로세스
실습 시나리오: 레거시 웹 프로젝트 개선
Step 1: 코드베이스 분석 — 현황 파악
수정하기 전에 프로젝트의 전체 구조를 이해해야 합니다. Claude Code에게 코드를 읽고 분석하게 합니다.
이 프로젝트를 전체적으로 분석해줘.
분석 항목:
1. 프로젝트 구조 — 폴더/파일 트리와 각 역할
2. 기술 스택 — 사용 중인 언어, 프레임워크, 라이브러리 버전
3. 코드 규모 — 파일 수, 총 코드 줄 수, 언어별 비율
4. 의존성 현황 — package.json/requirements.txt 분석
5. 진입점 — 앱 시작 흐름, 라우팅 구조
6. 데이터 흐름 — DB 연결, API 호출 패턴
결과를 마크다운 표로 정리해줘.
| 분석 도구 | Claude Code 명령 | 파악하는 내용 |
|---|---|---|
| 파일 탐색 | Glob, Grep 도구 자동 사용 | 프로젝트 구조, 파일 목록, 코드 패턴 |
| 의존성 분석 | "package.json 분석해줘" | 사용 중인 라이브러리, 버전 노후화 여부 |
| 코드 통계 | "코드 규모를 분석해줘" | 총 줄 수, 파일 수, 복잡도 분포 |
| Sub-Agent 탐색 | Explore 에이전트 자동 활용 | 대규모 코드베이스를 병렬로 빠르게 탐색 |
Step 2: 영향도 분석 — 수정하면 어디가 깨지나?
대규모 수정에서 가장 중요한 단계입니다. "이 파일을 수정하면 다른 어떤 파일이 영향을 받는가?"를 사전에 파악해야 합니다.
다음 수정 작업의 영향도를 분석해줘.
수정 계획:
- utils.js의 formatDate() 함수 시그니처 변경
- api.js의 에러 핸들링 패턴을 try-catch에서 async/await로 변환
- 전체 CSS를 BEM 네이밍으로 통일
각 수정 항목별로:
1. 직접 영향 받는 파일 목록 (import/require 추적)
2. 간접 영향 받는 파일 목록 (연쇄 의존)
3. 수정 위험도 (상/중/하)
4. 추천 수정 순서 (의존성 역순)
5. 수정 후 필수 테스트 항목
의존성 그래프를 Mermaid로 시각화해줘.
영향도 분석 결과 예시
| 수정 항목 | 직접 영향 | 간접 영향 | 위험도 | 수정 순서 |
|---|---|---|---|---|
| formatDate() 시그니처 변경 | api.js, auth.js, data.js | 12개 페이지 컴포넌트 | 상 | 1순위 (가장 많은 의존) |
| 에러 핸들링 패턴 변환 | api.js 내부만 | api.js 호출하는 8개 파일 | 중 | 2순위 |
| CSS BEM 네이밍 통일 | 전체 HTML/JSX 파일 | 없음 (스타일만 변경) | 하 | 3순위 (기능 영향 없음) |
Step 3: 보안 점검 — 취약점 스캔
코드를 수정하기 전에 기존 보안 취약점을 먼저 파악합니다. 수정 과정에서 함께 해결할 수 있습니다.
이 프로젝트의 보안 취약점을 전수 검사해줘.
검사 항목 (OWASP Top 10 기준):
1. SQL 인젝션 — 사용자 입력이 쿼리에 직접 들어가는 곳
2. XSS (크로스사이트 스크립팅) — innerHTML, document.write 사용
3. 인증/인가 결함 — 토큰 관리, 세션 처리, 권한 검사
4. 민감 데이터 노출 — 하드코딩된 API 키, 비밀번호
5. 의존성 취약점 — 알려진 CVE가 있는 라이브러리
6. CSRF 보호 — 폼 제출 시 토큰 검증
7. 보안 헤더 — CSP, X-Frame-Options 등
각 취약점을 발견하면:
- 파일명:줄번호
- 위험 등급 (Critical/High/Medium/Low)
- 문제 코드 스니펫
- 수정 권고안
표로 정리해줘.
| 검사 도구/에이전트 | 역할 | 검출 대상 |
|---|---|---|
| code-analyzer 에이전트 | 코드 품질 + 보안 패턴 분석 | 위험한 함수 사용, 안전하지 않은 패턴 |
| security-reviewer 에이전트 | OWASP Top 10 전문 검사 | SQL 인젝션, XSS, 인증 결함, 민감 데이터 |
| npm audit / pip audit | 의존성 CVE 검사 | 알려진 취약점이 있는 패키지 |
| Grep 도구 | 위험 패턴 검색 | eval(), innerHTML, 하드코딩 키 |
# Claude Code에서 보안 검사 실행 예시
> 이 프로젝트에서 eval(), innerHTML, document.write를 사용하는 곳을 모두 찾아줘
검색 결과:
✗ src/utils/template.js:45 — eval(userInput) [Critical]
✗ src/pages/comment.js:23 — el.innerHTML = data [High]
✗ src/legacy/render.js:12 — document.write(html) [High]
✓ src/pages/about.js:8 — el.innerHTML = '정적 텍스트' [Safe - 정적]
> npm audit
found 3 vulnerabilities (1 critical, 2 high)
┌─────────────┬────────────────┬──────────┐
│ Package │ Vulnerability │ Severity │
├─────────────┼────────────────┼──────────┤
│ lodash │ Prototype Poll │ Critical │
│ express │ Open Redirect │ High │
│ jsonwebtoken│ Algorithm Conf │ High │
└─────────────┴────────────────┴──────────┘
Step 4: 소스 패턴 분석 — 코딩 컨벤션 파악
기존 코드의 스타일을 먼저 파악해야, 수정 후에도 일관성이 유지됩니다.
이 프로젝트의 코딩 패턴을 분석해줘.
분석할 패턴:
1. 네이밍 컨벤션 — camelCase? snake_case? 혼용?
2. 파일 구조 — 컴포넌트, 유틸, 서비스 분리 방식
3. 에러 처리 패턴 — try-catch? .catch()? 콜백?
4. 상태 관리 패턴 — 글로벌 변수? 모듈 패턴? 클래스?
5. 주석 스타일 — JSDoc? 인라인? 없음?
6. 불일치/혼용 패턴 — 같은 로직의 다른 구현 방식
패턴 분석 결과를 바탕으로 CLAUDE.md에 넣을
코딩 컨벤션 규칙을 제안해줘.
CLAUDE.md에 기록해두면, 이후 Claude Code가 수정할 때 기존 스타일과 일관된 코드를 생성합니다. 이것이 대규모 수정에서 CLAUDE.md가 필수인 이유입니다.
# CLAUDE.md — 기존 프로젝트 분석 후 작성 예시
## 프로젝트 컨텍스트
- 2년 된 사내 관리 시스템, jQuery → Vanilla JS 전환 중
- 파일 50개, 코드 15,000줄
## 코딩 컨벤션 (기존 패턴 유지)
- 변수명: camelCase (기존 코드와 통일)
- 함수명: camelCase, 동사로 시작 (getData, handleClick)
- 파일명: kebab-case (user-profile.js)
- CSS 클래스: BEM 전환 중 (block__element--modifier)
## 수정 규칙
- jQuery → Vanilla JS 전환 시 동일 동작 보장
- 기존 API 응답 형식 변경 금지 (하위 호환성)
- console.log 제거, 구조화된 로깅으로 교체
- var → const/let 전환 (const 우선)
Step 5: Sub-Agent 병렬 수정 — 대규모 코드 변경
분석이 끝나면 실제 수정에 들어갑니다. 파일이 수십 개일 때 Sub-Agent를 활용한 병렬 처리가 핵심입니다.
분석 결과를 바탕으로 프로젝트를 단계별로 개선해줘.
Phase 1 (위험도 낮음 — Sub-Agent 병렬):
- 전체 CSS 클래스를 BEM 네이밍으로 통일
- Sub-Agent를 pages/, components/, layouts/ 폴더별로 분배
- 각 Sub-Agent는 HTML의 클래스명과 CSS를 함께 수정
- Phase 1 완료 후 git commit
Phase 2 (위험도 중간 — Sub-Agent 병렬):
- var → const/let 전환 (const 우선)
- jQuery 선택자 → document.querySelector 전환
- 콜백 기반 → async/await 전환
- Phase 2 완료 후 git commit
Phase 3 (위험도 높음 — 순차 처리):
- formatDate() 함수 시그니처 변경 + 호출부 전체 수정
- 보안 취약점 수정 (eval 제거, innerHTML → textContent)
- Phase 3 완료 후 git commit
각 Phase 완료 후 반드시 변경사항을 커밋하고,
다음 Phase로 넘어가기 전에 기본 동작 확인해줘.
대규모 수정 시 필수 전략
| 전략 | 방법 | 이유 |
|---|---|---|
| Phase별 커밋 | 각 Phase 완료마다 /commit으로 저장 |
문제 발생 시 해당 Phase만 롤백 가능 |
| 브랜치 분리 | git checkout -b refactor/phase-1 |
메인 브랜치 보호, PR 리뷰 후 머지 |
| 위험도 순 실행 | 낮음 → 중간 → 높음 순서 | 안전한 변경으로 자신감 확보 후 위험한 작업 |
| CLAUDE.md 유지 | 프로젝트 컨벤션 + 수정 규칙 명시 | Sub-Agent가 일관된 스타일로 수정 |
| 변경 전 스냅샷 | "수정 전 현재 상태를 기록해줘" | Before/After 비교, 보고서 증적 |
Step 6: 검증 & 테스트 — 수정 후 안전성 확인
대규모 수정의 가장 중요한 단계입니다. 수정이 기존 기능을 깨뜨리지 않았는지 다층 검증합니다.
수정 결과를 다음 4단계로 검증해줘.
Layer 1 — 정적 분석:
- ESLint/TSC 실행하여 문법/타입 오류 확인
- 사용하지 않는 변수, import 정리
Layer 2 — Gap 분석:
- 수정 계획서 대비 실제 변경 파일 비교
- 빠진 수정 항목이 있는지 확인
- Match Rate 계산
Layer 3 — 기존 테스트 실행:
- 기존 테스트 코드가 있으면 전부 실행
- 실패하는 테스트가 있으면 원인 분석
Layer 4 — MCP 화면 테스트:
- 주요 페이지 접속하여 렌더링 확인
- 로그인, 목록, 상세, 폼 제출 시나리오 테스트
- 모바일 뷰포트에서 레이아웃 확인
각 Layer별 PASS/FAIL 결과를 표로 정리해줘.
검증 결과 예시
| 검증 Layer | 검사 항목 | 결과 | 상세 |
|---|---|---|---|
| Layer 1: 정적 분석 | ESLint 검사 | PASS | 0 errors, 3 warnings (미사용 변수) |
| Layer 2: Gap 분석 | 수정 계획 대비 일치율 | PASS | Match Rate: 95% (47/50 파일 수정 완료) |
| Layer 3: 기존 테스트 | jest 테스트 32개 | FAIL | 30 passed, 2 failed (formatDate 관련) |
| Layer 4: UI 테스트 | MCP Playwright 5개 시나리오 | PASS | 5/5 시나리오 정상 |
Step 7: 문서화 & 보고서 — 변경 이력 정리
이번 리팩토링 작업의 종합 보고서를 DOCX로 작성해줘.
보고서 구성:
1. 개요 — 프로젝트 정보, 작업 기간, 작업자
2. 수정 전 현황 — 코드 분석 결과 요약
3. 영향도 분석 결과 — 의존성 그래프, 위험도 분류
4. 보안 점검 결과 — 발견 취약점 및 조치 내역
5. 수정 내역 상세
- Phase별 수정 파일 목록
- Before/After 코드 비교 (주요 변경)
- 수정 라인 수 통계
6. 검증 결과 — 4-Layer 검증 PASS/FAIL
7. 잔여 이슈 — 미처리 항목, 후속 작업 필요 사항
8. 성과 지표 — 코드 품질 Before/After 비교
파일명: refactoring-report-2026-04-09.docx
수정 성과 지표 예시
| 지표 | 수정 전 | 수정 후 | 개선율 |
|---|---|---|---|
| 보안 취약점 | Critical 1, High 4, Medium 8 | Critical 0, High 0, Medium 2 | 85% 감소 |
| 코드 일관성 | 네이밍 혼용 38개 파일 | 전체 BEM + camelCase 통일 | 100% 통일 |
| 의존성 노후화 | 3개 CVE 취약 패키지 | 전체 최신 안정 버전 | 100% 해결 |
| 레거시 코드 | jQuery 사용 23개 파일 | Vanilla JS 전환 완료 | 100% 전환 |
| 테스트 커버리지 | 42% | 78% | +36%p |
| 수정 파일 수 | — | 47개 파일, 2,300줄 변경 | — |
활용 도구 총정리 — 단계별 최적 도구
| 단계 | 주요 도구 | 역할 | 자동화 수준 |
|---|---|---|---|
| 1. 코드 분석 | Explore 에이전트, Glob/Grep | 코드베이스 구조 파악 | 완전 자동 |
| 2. 영향도 분석 | code-analyzer 에이전트 | 의존성 추적, 위험도 산정 | 완전 자동 |
| 3. 보안 점검 | security-reviewer 에이전트, npm audit | OWASP Top 10, CVE 검사 | 완전 자동 |
| 4. 패턴 분석 | code-reviewer 에이전트 | 코딩 스타일 파악, CLAUDE.md 생성 | 완전 자동 |
| 5. 병렬 수정 | Sub-Agent 3~5개 | Phase별 파일 병렬 수정 | 자동 + PM 승인 |
| 6. 검증 | gap-detector, MCP Playwright, 기존 테스트 | 4-Layer 다층 검증 | 완전 자동 |
| 7. 문서화 | report-generator 에이전트 | DOCX 보고서 자동 생성 | 완전 자동 |
기존 수동 리팩토링 vs AI 리팩토링 — 생산성 비교
| 작업 | 수동 리팩토링 | 소요 시간 | AI 리팩토링 | 소요 시간 |
|---|---|---|---|---|
| 코드 분석 | 개발자가 코드 읽으며 파악 | 2~3일 | Explore 에이전트가 자동 분석 | 5~10분 |
| 영향도 분석 | IDE에서 참조 추적, 수동 기록 | 1~2일 | code-analyzer가 의존성 자동 추적 | 3~5분 |
| 보안 점검 | 보안 전문가 코드 리뷰 | 2~3일 | security-reviewer + npm audit | 5~10분 |
| 50개 파일 수정 | 개발자 1명이 순차 수정 | 5~10일 | Sub-Agent 5개가 병렬 수정 | 30~60분 |
| 테스트 & 검증 | 수동 테스트 + 코드 리뷰 | 2~3일 | 4-Layer 자동 검증 | 10~20분 |
| 문서화 | 변경 이력 수동 작성 | 1~2일 | report-generator DOCX 자동 생성 | 5분 |
| 비교 항목 | 수동 리팩토링 | AI 리팩토링 |
|---|---|---|
| 총 소요 시간 | 2~3주 (50개 파일 기준) | 2~3시간 |
| 필요 인력 | 시니어 개발자 1~2명 + QA 1명 | PM/PL 1명 (AI가 실행) |
| 누락 위험 | 수동 추적으로 누락 발생 가능 | Grep 전수 검색으로 누락 최소화 |
| 일관성 | 개발자 간 스타일 차이 발생 | CLAUDE.md 기반 100% 일관된 스타일 |
| 롤백 용이성 | 대규모 커밋 시 롤백 어려움 | Phase별 커밋으로 정밀 롤백 가능 |
- 비즈니스 로직 이해 — AI는 코드 패턴은 변환하지만, "왜 이렇게 구현했는지" 비즈니스 맥락은 모릅니다. 특수한 비즈니스 규칙이 있는 코드는 실무자가 반드시 확인하세요.
- 데이터베이스 마이그레이션 — DB 스키마 변경은 AI에게 맡기되, 실행 전 반드시 백업하고 DBA와 리뷰하세요.
- 프로덕션 배포 — 스테이징 환경에서 충분히 테스트한 후 프로덕션에 배포합니다. AI 수정이라도 배포 프로세스는 동일하게 지켜야 합니다.
- 팀 리뷰 필수 — Sub-Agent가 수정한 코드도 반드시 PR을 만들어 팀원 리뷰를 거치세요.
/review스킬로 AI 1차 리뷰 후 사람이 2차 리뷰하는 것을 권장합니다.
대규모 개선 실습 과제
실제 프로젝트(또는 오픈소스)를 대상으로 다음을 수행해보세요:
- 프로젝트 선택: 본인의 기존 프로젝트 또는 GitHub에서 레거시 프로젝트 clone
- 코드 분석: Claude Code에게 "이 프로젝트를 전체 분석해줘" 요청
- 영향도 분석: 수정하고 싶은 항목의 영향 범위 파악
- 보안 점검: "보안 취약점을 검사해줘"로 보안 이슈 확인
- CLAUDE.md 작성: 코딩 컨벤션과 수정 규칙 정리
- Phase별 수정: 위험도 낮은 것부터 Sub-Agent로 병렬 수정
- 다층 검증: 정적 분석 → Gap 분석 → 테스트 → UI 테스트
- 보고서 생성: Before/After 비교가 포함된 DOCX 보고서
5.13 Claude Code 업무 능률 극대화 전략
지금까지 배운 스킬, MCP, 에이전트, PDCA를 실전 업무에서 최대 효율로 조합하는 방법을 정리합니다. 개별 기능을 아는 것과 이를 워크플로우로 엮어 쓰는 것은 전혀 다른 차원의 생산성을 만들어냅니다.
A. 골든 프롬프트 공식 — 10초 만에 최적 프롬프트 작성
프롬프트 품질이 결과 품질의 80%를 결정합니다. 다음 5요소 공식을 기억하세요.
상황별 최적 프롬프트 매트릭스
| 업무 상황 | 나쁜 프롬프트 (느림) | 골든 프롬프트 (빠름) | 시간 절약 |
|---|---|---|---|
| 코드 생성 | "로그인 페이지 만들어줘" | "React + TypeScript로 이메일/비밀번호 로그인 폼을 만들어줘. 빈 필드 검증, 로딩 상태, 에러 메시지 표시 포함. Tailwind CSS 사용" | 반복 수정 3회 → 0회 |
| 코드 리뷰 | "이 코드 봐줘" | "이 PR의 코드를 보안(SQL 인젝션, XSS), 성능(N+1 쿼리), 에러 처리 관점에서 리뷰하고, 심각도별로 정리해줘" | 추가 질문 2~3회 → 0회 |
| 디버깅 | "에러 나는데 고쳐줘" | "이 에러가 발생해: [에러 메시지]. 해당 파일은 src/api/auth.js야. 근본 원인을 분석하고, 수정 코드와 재발 방지 방안까지 알려줘" | 원인 파악 30분 → 2분 |
| 문서화 | "README 써줘" | "이 프로젝트의 README.md를 작성해줘. 프로젝트 소개, 기술 스택, 설치 방법(npm), 환경 변수 설정, 실행 방법, 폴더 구조를 포함. 마크다운 형식" | 수정 요청 4회 → 1회 |
| 테스트 | "테스트 코드 만들어줘" | "auth.service.ts의 login() 함수에 대한 단위 테스트를 Jest로 작성해줘. 정상 로그인, 잘못된 비밀번호, 존재하지 않는 사용자, 토큰 만료 케이스 포함" | 엣지케이스 누락 0건 |
프롬프트 체이닝 — 복잡한 작업을 단계별로
하나의 긴 프롬프트보다 여러 프롬프트를 연결하는 것이 더 정확하고 빠릅니다.
| 패턴 | 방법 | 적합한 상황 |
|---|---|---|
| 분석 → 구현 | "먼저 분석해줘" → "분석 결과대로 구현해줘" | 기존 코드를 이해한 후 수정할 때 |
| 설계 → 구현 → 테스트 | "설계해줘" → "구현해줘" → "테스트 작성해줘" | 새 기능 개발 시 |
| 에러 → 분석 → 수정 → 검증 | "에러 분석해줘" → "수정해줘" → "다시 테스트해줘" | 디버깅 시 |
| 스캐폴드 → 디테일 | "전체 구조를 잡아줘" → "각 함수를 상세 구현해줘" | 대규모 구현 시 |
B. 자동화 워크플로우 — 반복 작업을 제로로
CLAUDE.md 최적화 — 매번 반복 설명 제거
매 세션마다 "이 프로젝트는..."이라고 설명하는 시간을 CLAUDE.md로 제거합니다.
# CLAUDE.md — 업무 능률 최적화 버전
## 프로젝트
- Next.js 14 + TypeScript + Prisma + PostgreSQL
- 팀: 프론트 3명, 백엔드 2명, PM 1명
## 코딩 규칙 (AI가 자동 적용)
- TypeScript strict 모드 필수
- 함수형 컴포넌트 + React Hook 사용
- CSS: Tailwind CSS만 사용 (인라인 스타일 금지)
- API: RESTful 패턴, 에러는 try-catch + 커스텀 에러 클래스
- 테스트: Jest + React Testing Library, 커버리지 80% 이상
## 금지 사항
- any 타입 사용 금지
- console.log 커밋 금지
- 하드코딩된 문자열 금지 (상수 파일로 분리)
## 자주 쓰는 명령
- 개발 서버: npm run dev
- 테스트: npm test
- 빌드: npm run build
- 린트: npm run lint
Hooks 실전 레시피 — 자동 품질 관리
| 자동화 목표 | Hook 설정 | 효과 |
|---|---|---|
| 파일 저장 시 자동 린트 | PostToolUse + Write|Edit → eslint --fix |
코드 스타일 자동 교정, 린트 오류 즉시 수정 |
| 세션 시작 시 프로젝트 로드 | SessionStart → git status + 최근 변경 요약 |
매번 "어디까지 했지?" 확인 불필요 |
| 커밋 전 자동 테스트 | PreToolUse + Bash(git commit) → npm test |
테스트 실패한 코드 커밋 방지 |
| 위험 명령 경고 | PreToolUse + Bash(rm|drop|delete) → 확인 메시지 |
실수로 파일/DB 삭제 방지 |
// .claude/settings.json — 능률 극대화 Hooks 설정
{
"hooks": {
"SessionStart": [{
"command": "echo '=== 프로젝트 상태 ===' && git status --short && echo '=== 최근 커밋 ===' && git log --oneline -3"
}],
"PostToolUse": [{
"matcher": "Write|Edit",
"command": "npx eslint --fix \"$CLAUDE_FILE_PATH\" 2>/dev/null || true"
}],
"PreToolUse": [{
"matcher": "Bash(git commit*)",
"command": "npm test --silent 2>/dev/null || echo '⚠️ 테스트 실패! 커밋 전 확인 필요'"
}]
}
}
스킬 조합 워크플로우 — 파이프라인 패턴
개별 스킬을 순서대로 조합하면 완전한 자동화 파이프라인이 됩니다.
MCP 서버 조합 — 업무별 최적 세트
| 업무 유형 | 추천 MCP 세트 | 활용 시나리오 |
|---|---|---|
| 웹 개발 | Playwright + Filesystem | 코딩 → 브라우저 자동 테스트 → 스크린샷 비교 |
| 데이터 분석 | PostgreSQL MCP + Filesystem | DB 직접 쿼리 → 결과 분석 → 차트 생성 |
| PM 업무 | Gmail MCP + Slack MCP | 이슈 수집 → 보고서 작성 → 메일/슬랙 공유 |
| 풀스택 개발 | Playwright + DB MCP + Filesystem | API 개발 → DB 검증 → UI 테스트 → 전체 연동 |
C. 대규모 작업 전략 — 큰 작업을 빠르고 안전하게
Plan Mode — 실행 전에 계획부터
복잡한 작업은 바로 코딩하지 말고, Plan Mode로 계획을 먼저 세우고 승인 후 실행합니다.
| 상황 | Plan Mode 사용 | 바로 실행 |
|---|---|---|
| 파일 5개 이상 수정 | Plan Mode 사용 (권장) | — |
| 아키텍처 변경 | Plan Mode 필수 | — |
| 버그 수정 (1~2 파일) | — | 바로 실행 (효율적) |
| 문서/주석 추가 | — | 바로 실행 (안전) |
(Shift+Tab으로 Plan Mode 진입 후)
사용자 인증 시스템을 JWT 기반으로 전환해줘.
고려사항:
- 현재 세션 기반 인증 → JWT Access/Refresh 토큰
- 영향 받는 파일: auth.js, middleware.js, 모든 API 라우트
- 기존 로그인 사용자의 세션 호환성 유지
- 보안: 토큰 만료, 리프레시 로직, CSRF 보호
먼저 수정 계획을 세우고 보여줘. 승인 후에 실행할게.
Sub-Agent 최적 분배 전략
| 작업 유형 | 추천 Sub-Agent 구성 | 분배 기준 |
|---|---|---|
| 프론트엔드 기능 | Agent 1: 컴포넌트 Agent 2: 스타일 Agent 3: 테스트 |
관심사 분리 (UI/스타일/테스트) |
| API 개발 | Agent 1: 라우트/컨트롤러 Agent 2: 서비스/모델 Agent 3: 테스트/문서 |
레이어별 분리 (표현/비즈니스/검증) |
| 코드 마이그레이션 | Agent 1~4: 폴더별 할당 Agent 5: 통합 검증 |
폴더별 분리 (독립 작업 가능 단위) |
| 문서 일괄 생성 | Agent 1: API 문서 Agent 2: 가이드 Agent 3: CHANGELOG |
문서 유형별 분리 |
컨텍스트 관리 — 대화가 길어질 때
| 상황 | 해결 방법 | 명령어 |
|---|---|---|
| 대화가 길어져 AI 응답이 느려짐 | 대화 내용 압축 (기억은 유지) | /compact |
| 완전히 새로운 작업 시작 | 대화 초기화 (깨끗한 상태) | /clear |
| 작업 A 끝나고 작업 B 시작 | 작업 A 커밋 → /compact → 작업 B 시작 | /commit → /compact |
| 비용이 많이 나가는 느낌 | 현재 세션 비용 확인 | /cost |
/compact를 적극 활용하면 동일 세션에서 토큰 사용량 30~50% 절감- 큰 파일 전체를 읽게 하지 말고, 관련 부분만 지정: "auth.js의 login 함수만 봐줘"
- 반복 프롬프트는
CLAUDE.md에 정의하여 매번 재입력 방지 - Plan Mode로 불필요한 수정-되돌리기 반복 방지
D. 하루 업무에 적용하는 Claude Code 루틴
| 시간대 | 활동 | 사용 도구 | 소요 시간 |
|---|---|---|---|
| 09:00 | 세션 시작, 프로젝트 상태 파악 | SessionStart Hook, git status | 1분 (자동) |
| 09:05 | 오늘 작업 계획 수립 | Plan Mode / /pdca plan |
5~10분 |
| 09:15 | 핵심 기능 구현 (집중 시간) | 바이브 코딩, Sub-Agent | 2~3시간 |
| 12:00 | 오전 작업 중간 커밋 | /commit |
1분 |
| 13:00 | 코드 리뷰 + 품질 개선 | /review → /simplify |
30분 |
| 14:00 | 테스트 + 검증 | MCP Playwright, /pdca analyze |
30분 |
| 15:00 | 추가 기능 / 버그 수정 | 바이브 코딩, 프롬프트 체이닝 | 2시간 |
| 17:00 | 최종 커밋 + 보고서 + 비용 확인 | /commit → /pdca report → /cost |
5분 |
E. 업무별 능률 비교 — Before & After
| 일상 업무 | 수동 처리 | Claude Code 활용 | 절약 시간 |
|---|---|---|---|
| 새 기능 코드 작성 | 2~4시간 | 10~20분 (바이브 코딩 + 반복 개선) | ~90% |
| 코드 리뷰 | 30~60분/PR | 5분 (/review로 1차 자동 리뷰) |
~85% |
| 버그 디버깅 | 1~4시간 | 5~15분 (에러 로그 분석 + 근본 원인 추적) | ~90% |
| 테스트 코드 작성 | 1~2시간 | 5~10분 (엣지케이스 포함 자동 생성) | ~90% |
| API 문서 작성 | 2~3시간 | 5분 (코드에서 자동 추출) | ~95% |
| 코드 리팩토링 | 1~3일 | 1~2시간 (Sub-Agent 병렬 처리) | ~90% |
| 환경 설정 / 트러블슈팅 | 30분~2시간 | 2~5분 (에러 메시지 붙여넣기) | ~95% |
| 회의록 정리 | 30~60분 | 3분 (텍스트 붙여넣기 → 구조화) | ~95% |
| PR 설명 작성 | 15~30분 | 1분 (diff 분석 → 자동 생성) | ~95% |
| 보안 취약점 점검 | 2~3일 (전문가) | 10분 (security-reviewer 자동 스캔) | ~98% |
능률 극대화 실습 과제
다음 세팅을 직접 적용하고 체감 효과를 확인해보세요:
- 프로젝트에 CLAUDE.md 작성 — 코딩 규칙, 기술 스택, 자주 쓰는 명령 정리
- Hooks 설정 — SessionStart에 git status, PostToolUse에 eslint 자동 실행
- 골든 프롬프트 연습 — 5요소(역할+컨텍스트+지시+형식+제약) 적용해서 코드 생성
- 스킬 파이프라인 실행 — 구현 →
/review→/simplify→/commit - /cost로 비용 확인 — 하루 작업 후 사용량 모니터링
- Before/After 비교 — 동일 작업을 Claude Code 유무로 시간 측정해보기