DevLog 프로젝트: 코딩 에이전트 도구 활용 가이드 - k82022603/k82022603.github.io GitHub Wiki
DevLog 프로젝트: 코딩 에이전트 도구 활용 가이드 #
풀스택 개발 로그 시스템을 AI 코딩 에이전트로 구축하는 완벽 가이드
기술 스택:
- Backend: Spring Boot 3.2.1 + MyBatis + PostgreSQL
- Frontend: React 18 + Tailwind CSS + Recharts
- DevOps: Docker + Docker Compose + Nginx
주요 기능:
- 37개 REST API 엔드포인트
- 5개 주요 UI 페이지 (Dashboard, Logs, Projects, Statistics, Settings)
- 실시간 통계 차트 및 시각화
- 무한 스크롤, 필터링, 검색
- 마크다운 에디터
프로젝트 규모:
- 예상 개발 기간: 3-4주
- 백엔드 코드: ~5,000 lines
- 프론트엔드 코드: ~8,000 lines
- 데이터베이스 테이블: 4개 (DevLog, Project, TechTag, LogTags)
강점:
- ⚡ 최고의 속도: Tab 완성, Cmd+K 인라인 편집
- 🎯 IDE 통합: VS Code 포크로 완벽한 에디터 경험
- 🔄 Auto-run Mode: 테스트 자동 실행 및 수정
- 📊 모델 선택: GPT-5, Claude Sonnet 4.5, Gemini 2.5 Pro 전환 가능
약점:
- 컨텍스트 윈도우 제한 (실제 70K-120K)
- 복잡한 아키텍처 결정에 약함
- 장기 세션에서 컨텍스트 드리프트
DevLog에서의 역할:
- 반복적인 CRUD 구현
- UI 컴포넌트 빠른 프로토타이핑
- 작은 버그 즉시 수정
- CSS 스타일링 조정
최적 모드 설정:
# .cursorrules 예시
Mode: Agent Mode (복잡한 작업)
Cmd+K (빠른 수정)
Tab Completion (코딩 중)
Model Selection:
- GPT-5: 복잡한 로직, 새로운 기능
- Claude Sonnet 4.5: 코드 품질 중시
- Gemini 2.5 Pro: UI 디자인, 시각화
Auto-run: Enabled
Allow List: npm test, npm run build, mvn test
Deny List: git push, rm -rf, drop table
Checkpoint: Enabled (모든 Agent 변경사항 자동 스냅샷)강점:
- 📋 Plan Mode: 체계적인 계획 수립
- 🧠 opusplan: Opus로 계획, Sonnet으로 실행
- 📚 200K 실제 컨텍스트: 전체 코드베이스 이해
- 🤝 Subagent 시스템: Explore, Plan, Task 자동 위임
약점:
- 터미널 기반으로 시각적 피드백 부족
- UI 작업에는 비효율적
- 속도는 Cursor보다 느림
DevLog에서의 역할:
- 프로젝트 아키텍처 설계
- REST API 엔드포인트 계획
- 데이터베이스 스키마 설계
- 복잡한 통계 로직 구현
- 리팩토링 전략
최적 모드 설정:
# Claude Code 설정
Model: opusplan (기본값)
- Opus 4.5: 계획 단계
- Sonnet 4.5: 실행 단계
Permissions:
defaultMode: plan # 복잡한 작업은 항상 계획부터
autoApprove:
- read: true
- write: false # 파일 쓰기는 수동 승인
- bash: whitelist
Plan Mode Trigger:
- "let's plan..."
- Shift+Tab 두 번
- 자동 (복잡도 감지)
Commands:
/cost: 토큰 사용량 모니터링
/clear: 컨텍스트 초기화 (작업 전환 시)
/model: 모델 전환CLAUDE.md 예시 (DevLog용):
# DevLog Project Context
## Tech Stack
- Backend: Spring Boot 3.2.1, MyBatis, PostgreSQL 15
- Frontend: React 18, Tailwind CSS, Recharts
- Build: Maven, NPM
## Critical Rules
- NEVER use camelCase for PostgreSQL column names (use snake_case)
- ALWAYS include transaction management for multi-table operations
- Frontend API calls MUST use axios interceptors for error handling
- UI colors MUST maintain WCAG AA contrast ratio
## Architecture Principles
- Backend: Controller → Service → Mapper (MyBatis)
- Frontend: Pages → Components → Services → Utils
- API responses: Always JSON with { success, data, error }
## Common Commands
- Backend test: cd backend && ./mvnw test
- Frontend dev: cd frontend && npm start
- Full stack: docker-compose up -d
## Known Issues
- PostgreSQL returns lowercase column names (use aliases in MyBatis)
- React Select dropdown visibility issue (z-index: 50)
- Chart rendering requires explicit width/height강점:
- 🚀 Agent-First 설계: 멀티 에이전트 병렬 작업
- 🌐 Browser Subagents: UI 자동 테스트 및 검증
- 📱 Manager View: 여러 에이전트 동시 모니터링
- 📸 Artifacts: 스크린샷, 워크스루, 계획 자동 생성
- 🔄 Self-Validation: 에이전트가 자체 검증
약점:
- 2025년 11월 출시로 아직 실험적
- 초기 사용자 리포트에서 오류와 느린 생성 속도 언급
- 무료 프리뷰이지만 향후 가격 정책 불확실
DevLog에서의 역할:
- 전체 기능 E2E 개발 (계획 → 구현 → 테스트)
- UI 컴포넌트 자동 브라우저 테스트
- 여러 페이지 동시 개발 (병렬 에이전트)
- 복잡한 통계 페이지 구현 및 검증
최적 모드 설정:
# Antigravity 설정
Development Mode: Agent-assisted
# Agent-driven: 완전 자동 (위험)
# Review-driven: 모든 작업 승인 필요 (느림)
# Agent-assisted: 균형 (추천) ✓
Terminal Policy: Auto
# 표준 명령어 자동 실행
# 위험한 명령어만 확인 요청
Main Model: Gemini 3 Pro
# 코드 추론, 대규모 컨텍스트, 멀티스텝 계획에 최적
Secondary Models:
- Claude Sonnet 4.5: 코드 품질 중시 작업
- Gemini 3 Deep Think: 복잡한 버그 디버깅
Work Mode:
- Plan Mode: 복잡한 작업 (Dashboard 통계 등)
- Fast Mode: 간단한 수정 (CSS 조정 등)
Browser Testing: Enabled
# 모든 UI 변경 후 자동 브라우저 검증Manager View 활용 전략:
Workspace 1: Backend API
└─ Agent 1: DevLog CRUD APIs
└─ Agent 2: Statistics APIs
Workspace 2: Frontend Pages
└─ Agent 3: Dashboard + Charts
└─ Agent 4: Logs List + Form
Workspace 3: Integration
└─ Agent 5: E2E Testing
└─ Agent 6: Docker Setup
Artifacts 예시:
Antigravity는 작업 완료 시 다음 Artifacts를 자동 생성합니다:
- Task List: 계획된 작업 체크리스트
- Implementation Plan: 상세 구현 계획
- Screenshots: 완성된 UI 스크린샷
- Browser Recording: 사용자 플로우 동작 영상
- Test Results: 자동 테스트 결과
이를 통해 팀원이나 PM이 코드를 보지 않고도 진행 상황을 확인할 수 있습니다.
강점:
- 🔍 버그 탐지: 미묘한 버그와 보안 취약점 발견
- 🧐 Code Review: 체계적이고 신중한 분석
- ⏱️ Effort 파라미터: high, xhigh로 깊은 사고
- 📊 SWE-Bench Pro: 56.4% (최고 수준)
약점:
- 느린 속도 (깊게 생각하는 대가)
- 비용이 상대적으로 높음
- Raw 코딩보다는 분석에 특화
DevLog에서의 역할:
- 완성된 기능 최종 리뷰
- Critical 버그 디버깅
- 보안 취약점 검사
- 성능 최적화 제안
- 아키텍처 검토
최적 모드 설정:
# Codex CLI 설정
effort: "medium" # 기본값
# low: 빠른 답변
# medium: 표준 품질
# high: 복잡한 문제
# xhigh: critical 이슈만 (매우 느림)
focus_areas:
- security_vulnerabilities
- race_conditions
- memory_leaks
- error_handling
- edge_cases
review_scope:
- new_features: true
- refactoring: true
- bug_fixes: false # 간단한 버그는 생략리뷰 체크리스트 예시:
# Codex Review Checklist
## Security
- [ ] SQL Injection 방지 (PreparedStatement)
- [ ] XSS 방지 (입력 검증)
- [ ] CSRF 토큰
- [ ] 비밀번호 해싱 (bcrypt)
- [ ] API Rate Limiting
## Performance
- [ ] N+1 쿼리 문제
- [ ] 불필요한 데이터베이스 호출
- [ ] 메모리 누수 가능성
- [ ] 동시성 문제 (race condition)
## Code Quality
- [ ] 예외 처리 완전성
- [ ] 로깅 적절성
- [ ] 테스트 커버리지 80% 이상
- [ ] 코드 중복 (DRY 원칙)
## Architecture
- [ ] 레이어 분리 (Controller/Service/Mapper)
- [ ] 단일 책임 원칙
- [ ] 의존성 주입주 도구: Claude Code (Plan Mode) + Antigravity
# Claude Code 실행
claude --model opusplan
# 대화
User: DevLog 프로젝트 전체 아키텍처를 설계해줘.
- Spring Boot + React 풀스택
- 37개 REST API
- 5개 주요 페이지
- Docker 배포
먼저 계획을 세우고, 디렉토리 구조를 만들어줘.Claude의 Plan Mode 출력 예시:
# DevLog 프로젝트 아키텍처 계획
## Phase 1: 프로젝트 구조 생성
1. 루트 디렉토리 구조
2. Backend (Spring Boot) 스켈레톤
3. Frontend (React) 스켈레톤
4. Docker 설정
## Phase 2: 데이터베이스 설계
1. ERD 설계
2. schema.sql 작성
3. MyBatis 매퍼 설정
## Phase 3: 기본 설정
1. application.yml
2. CORS 설정
3. 환경 변수 관리
계속 진행할까요?승인 후 Claude가 자동으로 구조 생성.
Antigravity Manager View에서 3개 workspace 설정:
Workspace: Backend-Setup
Agent: Spring Boot 프로젝트 초기화
Tasks:
- pom.xml 설정
- application.yml 생성
- 패키지 구조 생성
Workspace: Frontend-Setup
Agent: React 프로젝트 초기화
Tasks:
- package.json 설정
- Tailwind 설정
- 라우터 구조 생성
Workspace: DevOps-Setup
Agent: Docker 설정
Tasks:
- Dockerfile (backend)
- Dockerfile (frontend)
- docker-compose.yml
동시 진행: 3개 에이전트가 병렬로 작업하여 시간 절약 (3시간 → 1시간)
주 도구: Claude Code (설계) → Cursor (구현) → Codex (리뷰)
claude --model opusplan
User: PostgreSQL 스키마를 설계해줘.
테이블: DevLog, Project, TechTag, LogTags (다대다 관계)
모든 컬럼은 snake_case로.Claude 출력:
- ERD 다이어그램 (Mermaid)
- schema.sql 파일
- 제약조건 및 인덱스
- 시드 데이터
User (Cursor): schema.sql을 보고 모든 MyBatis 매퍼를 생성해줘.
- DevLogMapper.xml
- ProjectMapper.xml
- TechTagMapper.xml
각 매퍼는 CRUD + 통계 쿼리 포함.
Cursor의 장점:
- 빠른 속도로 반복적인 XML 작성
- 패턴 인식으로 일관된 스타일
- 즉시 컴파일 에러 확인
주의사항:
# .cursorrules
Rule: PostgreSQL column names
- ALWAYS use snake_case in SQL
- ALWAYS use AS alias in SELECT
Example:
WRONG: SELECT createdAt FROM dev_logs
RIGHT: SELECT created_at AS "createdAt" FROM dev_logs전략:
- 단순 CRUD: Cursor로 빠르게
- 복잡한 통계 로직: Claude Code로 계획
# Claude Code
User: DevLogService의 getWeeklyStatistics() 메서드 로직을 계획해줘.
- 이번 주 일별 작업 시간 집계
- 활동 일수 계산
- 평균 작업 시간
# Claude Plan 출력
1. 이번 주 시작일/종료일 계산 (LocalDate)
2. Mapper로 일별 데이터 조회
3. Java Stream으로 집계
4. DTO 변환 및 반환
# 계획 승인 후 구현# Codex CLI
codex --effort xhigh
User: backend/src/main/java/com/vibecoding/devlog/service/
디렉토리의 모든 Service 클래스를 리뷰해줘.
중점 체크:
- 트랜잭션 관리
- 예외 처리
- SQL Injection 방지
- 동시성 문제Codex 리뷰 예시:
Critical Issues Found:
1. DevLogService.create() - Line 142
Issue: RuntimeException은 너무 일반적
Recommendation: Custom ResourceNotFoundException 사용
2. StatisticsService.getMonthlyStats() - Line 89
Issue: N+1 쿼리 문제 (루프 안에서 DB 호출)
Recommendation: JOIN 쿼리로 한 번에 조회
3. ProjectService.delete() - Line 156
Issue: 연관된 DevLog 삭제 로직 없음
Recommendation: @Transactional + 연관 레코드 처리
주 도구: Antigravity (UI 개발) + Cursor (스타일링) → Codex (UX 리뷰)
Manager View 설정:
Workspace 1: Dashboard
└─ Agent: Dashboard 통계 + 차트
Tasks:
- StatisticsCard 컴포넌트
- WeeklyChart (Recharts 바 차트)
- RecentLogs 리스트
- API 연동
Browser Test: Enabled
Workspace 2: Logs
└─ Agent: Logs 리스트 + 폼
Tasks:
- LogList 무한 스크롤
- LogForm 입력 폼
- 필터링 기능
Browser Test: Enabled
Workspace 3: Statistics
└─ Agent: Statistics 페이지
Tasks:
- 주간/월간 차트
- 프로젝트 분포 파이 차트
- 기술 스택 통계
Browser Test: Enabled
장점:
- 3개 페이지 동시 개발 (시간 3배 절약)
- 각 에이전트가 독립적으로 작업
- Browser Subagent가 자동으로 UI 테스트
- Artifacts로 진행 상황 시각화
Antigravity Agent 대화 예시:
User (Workspace 1): Dashboard를 구현해줘.
- 4개 통계 카드 (작업 시간, 로그 개수, 활성 프로젝트, 달성률)
- Recharts로 주간 바 차트
- 최근 5개 로그 표시
- Glassmorphism 디자인 스타일
Agent (Plan Mode 활성화):
Creating implementation plan...
Plan Artifact:
1. Layout Structure
- Grid layout for stat cards
- Chart container with responsive sizing
- Recent logs section
2. API Integration
- GET /api/statistics/dashboard
- Error handling with toast notifications
3. Chart Configuration
- Recharts BarChart with custom colors
- Tooltip with formatted data
- Responsive width/height
4. Styling
- Glassmorphism: backdrop-blur-md
- Dark theme colors
- Smooth animations
Ready to implement? (yes/no)
User: yes
Agent (Fast Mode로 전환 후 구현):
✓ Created DashboardStatCard.jsx
✓ Created WeeklyChart.jsx
✓ Created RecentLogsList.jsx
✓ Updated Dashboard.jsx
✓ Integrated API calls
Testing in browser...
[Browser Subagent 자동 실행]
Screenshot Artifact Generated:
- Desktop view (1920x1080) ✓
- Tablet view (768x1024) ✓
- Mobile view (375x667) ✓
All tests passed!
생성된 Artifacts:
- Plan Document: 상세 구현 계획 마크다운
- Code Files: 모든 컴포넌트 파일
- Screenshots: 3개 해상도 스크린샷
- Browser Recording: 실제 동작 영상 (MP4)
- Test Report: 자동 테스트 결과
Antigravity가 기본 구조를 만들면, Cursor로 빠른 스타일 조정:
User (Cursor, Cmd+K):
선택한 코드: <div className="stat-card">
Instruction: 이 카드에 호버 효과 추가
- 마우스 오버 시 살짝 떠오르는 효과
- 부드러운 트랜지션 (0.3s)
- 그림자 강화
Cursor: [즉시 코드 수정]
className="stat-card hover:scale-105 hover:shadow-2xl transition-all duration-300"
Cursor의 장점:
- 인라인 수정으로 즉각적인 피드백
- CSS 클래스 자동완성
- 실시간 프리뷰 (브라우저 새로고침)
복잡한 차트는 역할 분담:
Claude Code: 차트 로직 계획
User: Statistics 페이지의 월간 차트 로직을 계획해줘.
- 일별 작업 시간 라인 차트
- 프로젝트별 파이 차트
- 기술 스택 바 차트 (Top 10)
Claude (Plan):
1. API 데이터 구조 정의
2. Recharts 설정 (색상, 툴팁, 레전드)
3. Responsive 처리
4. 빈 데이터 핸들링Antigravity: 구현 + 자동 테스트
User (Antigravity): 위 계획대로 3개 차트를 구현하고 브라우저에서 테스트해줘.
Agent:
✓ MonthlyLineChart.jsx created
✓ ProjectPieChart.jsx created
✓ TechStackBarChart.jsx created
✓ Statistics.jsx integrated
Browser Testing:
✓ Charts render correctly
✓ Tooltips show on hover
✓ Responsive on mobile
✓ No console errors
[Screenshot Artifacts 자동 생성]
codex --effort high
User: frontend/src/pages/ 의 모든 페이지를 UX 관점에서 리뷰해줘.
체크 항목:
- 접근성 (ARIA 라벨)
- 키보드 네비게이션
- 로딩 상태 표시
- 에러 메시지 명확성
- 모바일 사용성
Codex Review:
1. LogForm.jsx - Line 45
Issue: 로딩 중에도 버튼 클릭 가능
Recommendation: disabled={isLoading} 추가
2. Dashboard.jsx - Line 89
Issue: 차트 로딩 시 빈 공간 (CLS 문제)
Recommendation: Skeleton loader 추가
3. All Forms
Issue: ARIA 라벨 누락
Recommendation: aria-label 또는 aria-labelledby 추가주 도구: Antigravity (E2E) + Claude Code (버그 수정) + Codex (통합 리뷰)
User (Antigravity): 다음 시나리오를 E2E로 테스트해줘.
시나리오:
1. 대시보드 접속
2. "새 로그 작성" 클릭
3. 폼 입력 (프로젝트 선택, 제목, 시간 등)
4. 저장
5. 로그 목록에 표시되는지 확인
6. 통계가 업데이트되는지 확인
Agent (Plan Mode):
E2E Test Plan:
1. Start dev servers (backend + frontend)
2. Navigate to http://localhost:3000
3. Click dashboard stat card
4. Fill form fields
5. Submit and verify API response
6. Check log appears in list
7. Verify dashboard stats updated
Executing...
[Browser Subagent 자동 실행]
Test Results:
✓ Dashboard loaded (2.1s)
✓ Form opened
✓ Fields filled
✗ Submit failed - API error 400
Error Screenshot captured.
Analyzing error...
Issue Found:
- Frontend sends camelCase: { startTime: "09:00" }
- Backend expects snake_case: { start_time: "09:00" }
Recommendation: Add API request transformer
Antigravity의 자동 디버깅 능력:
- 에러 스크린샷 캡처
- 네트워크 요청 분석
- 콘솔 로그 확인
- 원인 파악 및 해결 제안
claude
User: Antigravity가 발견한 버그를 수정해줘.
frontend/src/services/devLogApi.js에서 요청 변환 추가 필요.
Claude:
axios interceptor를 추가하여 camelCase → snake_case 변환하겠습니다.
[코드 생성]
// devLogApi.js
axios.interceptors.request.use((config) => {
if (config.data) {
config.data = toSnakeCase(config.data);
}
return config;
});
테스트해볼까요?codex --effort xhigh
User: 전체 시스템을 리뷰해줘.
특히 다음 항목 중점:
- 프론트엔드 ↔ 백엔드 데이터 일관성
- 에러 핸들링 완전성
- 성능 병목 지점
- 보안 취약점
Codex Deep Analysis (5분 소요):
Critical Issues:
1. DevLogController.java - Line 67
Race Condition: 동시에 같은 제목의 로그 생성 가능
Fix: Unique constraint on (project_id, title, log_date)
2. Statistics.jsx - Line 134
Performance: 차트 렌더링 시 전체 리렌더링
Fix: React.memo + useMemo 최적화
3. All API calls
Security: CORS는 설정했지만 CSRF 토큰 없음
Fix: Spring Security CSRF 필터 추가
Medium Priority:
[10개 항목...]
Low Priority:
[15개 항목...]주 도구: Claude Code (Docker 설정) + Cursor (문서 작성) + Antigravity (배포 테스트)
claude --model opusplan
User: 프로덕션 배포용 Docker 설정을 만들어줘.
- Multi-stage build (크기 최적화)
- PostgreSQL 컨테이너
- Nginx 리버스 프록시
- 헬스 체크 포함
Claude (Plan Mode):
Docker 설정 계획:
1. Backend Dockerfile
- Stage 1: Maven build
- Stage 2: Runtime (JRE only)
- Size: ~150MB (기본 600MB → 최적화)
2. Frontend Dockerfile
- Stage 1: NPM build
- Stage 2: Nginx serve
- Size: ~50MB
3. docker-compose.yml
- Service 3개: postgres, backend, frontend
- Networks, volumes 설정
- 헬스 체크 및 재시작 정책
계속할까요?User (Cursor): 다음 문서를 작성해줘.
1. API_DOCUMENTATION.md - 37개 API 상세 문서
2. DEPLOYMENT.md - 배포 가이드
3. TROUBLESHOOTING.md - 문제 해결 가이드
템플릿과 기존 코드 참조해서 작성.
Cursor (Agent Mode):
✓ API_DOCUMENTATION.md (3,500 lines)
- 모든 엔드포인트 설명
- 요청/응답 예시
- 에러 코드
✓ DEPLOYMENT.md (1,200 lines)
- Docker 설치부터 실행까지
- 환경 변수 설정
- 트러블슈팅
✓ TROUBLESHOOTING.md (800 lines)
- FAQ
- 일반적인 오류
- 해결 방법
User (Antigravity): docker-compose up으로 배포하고 전체 시스템을 테스트해줘.
Agent:
Deployment Plan:
1. Build Docker images
2. Start containers
3. Wait for health checks
4. Run E2E tests
5. Performance test (Apache Bench)
Executing...
✓ Images built (3min 42s)
✓ Containers started
✓ PostgreSQL ready (8s)
✓ Backend health check passed
✓ Frontend accessible
E2E Tests:
✓ User can create log
✓ Statistics update correctly
✓ Project management works
✓ Charts render
[10/10 tests passed]
Performance (ab -n 1000 -c 10):
- Avg response time: 45ms
- 99th percentile: 120ms
- Errors: 0
[Performance Report Artifact 생성]
claude --model opusplan
User: DevLog CRUD API를 구현하려고 해.
다음 엔드포인트가 필요해:
- GET /api/logs (필터링, 페이징)
- GET /api/logs/{id}
- POST /api/logs
- PUT /api/logs/{id}
- DELETE /api/logs/{id}
먼저 계획을 세워줘.Claude Plan 출력:
# DevLog CRUD API 구현 계획
## 1. Domain Model (DevLog.java)
- id (Long)
- projectId (Long)
- title (String, 100자)
- description (String, 500자)
- startTime (LocalTime)
- endTime (LocalTime)
- workMinutes (Integer, 계산 필드)
- achievements (String)
- challenges (String)
- learnings (String)
- codeSnippets (String, JSON)
- logDate (LocalDate)
- mood (Enum: TERRIBLE, BAD, NEUTRAL, GOOD, GREAT)
- createdAt, updatedAt (LocalDateTime)
## 2. DTO Classes
- DevLogRequest (create/update)
- DevLogResponse (API 응답)
- DevLogListResponse (페이징)
## 3. MyBatis Mapper
- selectAll(filter, pagination)
- selectById(id)
- insert(devLog)
- update(devLog)
- delete(id)
## 4. Service Layer
- Transaction 관리
- 비즈니스 로직 (workMinutes 계산)
- 유효성 검증
## 5. Controller Layer
- @RestController
- @Validated
- Exception handling
- CORS
구현할까요?Claude의 계획을 Cursor에 전달:
User (Cursor): 위 계획대로 DevLog CRUD를 구현해줘.
프로젝트 구조는 /backend/src/main/java/com/vibecoding/devlog/
Cursor (Agent Mode):
Creating files...
✓ domain/DevLog.java
✓ dto/DevLogRequest.java
✓ dto/DevLogResponse.java
✓ mapper/DevLogMapper.java
✓ mapper/DevLogMapper.xml
✓ service/DevLogService.java
✓ controller/DevLogController.java
Testing compilation...
✓ No compilation errors
Running tests...
✗ 2 tests failed
Analyzing failures...
Cursor가 실패한 테스트를 자동으로 분석하고 수정:
Test Failure: DevLogServiceTest.testCreate()
Issue: MockitoException - mapper.insert() not mocked
Fixing...
✓ Added @Mock annotation
✓ Added when(mapper.insert()).thenReturn(1)
Re-running tests...
✓ All tests passed (12/12)
codex --effort high
User: 방금 구현한 DevLog CRUD 코드를 리뷰해줘.
backend/src/main/java/com/vibecoding/devlog/
중점:
- 트랜잭션 경계
- 예외 처리
- 유효성 검증
- 보안 (SQL Injection)
Codex Review:
✓ Good:
- MyBatis PreparedStatement 사용 (SQL Injection 방지)
- @Transactional 적절히 사용
- @Validated로 요청 검증
⚠ Issues:
1. DevLogService.create() - Line 45
Problem: RuntimeException은 너무 일반적
Current:
if (result == 0) {
throw new RuntimeException("Failed to create log");
}
Better:
if (result == 0) {
throw new ResourceCreationException("DevLog creation failed");
}
2. DevLogController.delete() - Line 89
Problem: 삭제 전 존재 여부 확인 없음
Add:
DevLog existing = service.findById(id);
if (existing == null) {
throw new ResourceNotFoundException("DevLog not found: " + id);
}
service.delete(id);
3. DevLogMapper.xml - Line 67
Problem: 동적 쿼리에서 null 체크 누락
Current:
AND project_id = #{projectId}
Better:
<if test="projectId != null">
AND project_id = #{projectId}
</if>User (Cursor): Codex가 지적한 3가지 이슈를 수정해줘.
Cursor:
✓ Created ResourceCreationException.java
✓ Updated DevLogService.create()
✓ Updated DevLogController.delete()
✓ Updated DevLogMapper.xml
Re-running tests...
✓ All tests passed
claude
User: 주간 통계 API를 구현해야 해.
요구사항:
- 이번 주 일별 작업 시간 (월~일)
- 활동 일수
- 평균 작업 시간
- 총 로그 개수
- 가장 많이 사용한 기술 스택 Top 5
복잡한 로직이니까 먼저 계획 세워줘.
Claude (Analyze):
주간 통계는 여러 테이블 조인이 필요하고 집계 로직이 복잡하네요.
Plan Mode로 전환하겠습니다.
[Plan Mode 자동 활성화]
Plan:
1. 날짜 계산 로직
- 이번 주 월요일 (getWeekStart)
- 이번 주 일요일 (getWeekEnd)
2. SQL 쿼리 설계
- 일별 집계 (GROUP BY log_date)
- 기술 스택 집계 (JOIN log_tags, tech_tags)
- 단일 쿼리 vs 여러 쿼리 (성능 고려)
3. Java 집계 로직
- Stream API로 데이터 변환
- 빈 날짜 채우기 (0으로)
- DTO 매핑
4. 캐싱 전략
- 통계는 자주 조회되므로 캐싱 고려
- TTL: 10분
구현 방법 제안:
A. 단일 복잡 쿼리 (1 DB call, 복잡한 SQL)
B. 여러 간단 쿼리 (3 DB calls, 간단한 SQL)
어느 쪽이 좋을까요?User: B로 가자. 코드 가독성이 더 중요해.
Claude:
좋습니다. 다음과 같이 구현하겠습니다.
Mapper:
1. selectDailyWorkTime(startDate, endDate)
→ List<DailyWorkTime>
2. selectWeeklyTechStackStats(startDate, endDate)
→ List<TechStackStat>
3. selectWeeklyLogCount(startDate, endDate)
→ Integer
Service:
1. 날짜 범위 계산
2. 3개 Mapper 호출
3. Stream으로 집계
4. DTO 변환
[구현 시작...]User (Cursor): Claude가 설계한 3개 쿼리를 StatisticsMapper.xml에 구현해줘.
- selectDailyWorkTime
- selectWeeklyTechStackStats
- selectWeeklyLogCount
Cursor:
✓ Added to StatisticsMapper.xml
<!-- selectDailyWorkTime -->
<select id="selectDailyWorkTime" resultType="DailyWorkTime">
SELECT
log_date AS "logDate",
SUM(work_minutes) AS "totalMinutes"
FROM dev_logs
WHERE log_date BETWEEN #{startDate} AND #{endDate}
GROUP BY log_date
ORDER BY log_date
</select>
[나머지 쿼리도 유사하게 생성...]
Compiling...
✓ No errors
User (Antigravity): 주간 통계 API를 테스트해줘.
/api/statistics/weekly/current
시나리오:
1. 테스트 데이터 생성 (이번 주 로그 3개)
2. API 호출
3. 응답 검증 (일별 데이터, 통계 정확성)
Agent (Plan):
Test Plan:
1. Setup test data
2. Call API
3. Verify response structure
4. Verify calculations
5. Test edge cases (no data, partial week)
Executing...
Setup:
✓ Created 3 logs (Mon, Wed, Fri)
- Mon: 120 min
- Wed: 90 min
- Fri: 150 min
API Call:
GET http://localhost:8080/api/statistics/weekly/current
Response:
{
"dailyWorkTime": [
{ "date": "2026-01-01", "minutes": 120 },
{ "date": "2026-01-02", "minutes": 0 },
{ "date": "2026-01-03", "minutes": 90 },
...
],
"totalMinutes": 360,
"activeDays": 3,
"averageMinutes": 120,
"logCount": 3
}
Verification:
✓ All 7 days present
✓ Total matches (120+90+150=360)
✓ Average correct (360/3=120)
✗ Active days wrong (expected 3, got 7)
Issue Found: activeDays는 실제 활동한 날만 세어야 함
Recommendation: Filter days with minutes > 0
Fixing...
✓ Updated calculation logic
✓ Re-tested: All assertions passed
[Test Report Artifact 생성]
User (Antigravity): Dashboard 페이지를 구현해줘.
레이아웃:
┌─────────────────────────────────────┐
│ Stats Cards (4개, Grid 2x2) │
├─────────────────────────────────────┤
│ Weekly Chart (Recharts 바 차트) │
├─────────────────────────────────────┤
│ Recent Logs (최근 5개) │
└─────────────────────────────────────┘
디자인:
- Glassmorphism 효과
- 다크 테마
- 부드러운 애니메이션
Agent (Plan Mode):
Dashboard Implementation Plan:
1. Component Structure:
Dashboard.jsx
├─ DashboardHeader.jsx
├─ StatsGrid.jsx
│ └─ StatCard.jsx (4개)
├─ WeeklyChart.jsx (Recharts)
└─ RecentLogs.jsx
└─ LogCard.jsx (5개)
2. API Calls:
- GET /api/statistics/dashboard
- GET /api/logs/recent?limit=5
3. State Management:
- statsData (from API)
- recentLogs (from API)
- loading, error
4. Styling:
- Tailwind classes
- backdrop-filter: blur(10px)
- background: rgba(255,255,255,0.05)
5. Animations:
- Fade in on mount
- Hover effects on cards
- Chart animation (Recharts built-in)
Proceed with implementation?
User: Yes, 구현해줘.
Agent (Fast Mode로 자동 전환):
Creating components...
✓ Dashboard.jsx
✓ DashboardHeader.jsx
✓ StatsGrid.jsx
✓ StatCard.jsx
✓ WeeklyChart.jsx
✓ RecentLogs.jsx
✓ LogCard.jsx
Integrating API calls...
✓ dashboardService.js
✓ Error handling with toast notifications
✓ Loading skeleton components
Applying styles...
✓ Glassmorphism effects
✓ Dark theme colors
✓ Responsive grid (mobile: 1 col, tablet: 2 cols, desktop: 4 cols)
Testing in browser...
[Browser Subagent 실행]
✓ Page renders
✓ API calls successful
✓ Charts display correctly
✓ Cards animate on hover
✓ Mobile responsive
Screenshot Artifacts:
- Desktop (1920x1080) ✓
- Tablet (768x1024) ✓
- Mobile (375x667) ✓
[All artifacts saved to .antigravity/artifacts/]
생성된 파일 예시:
// Dashboard.jsx
import React, { useState, useEffect } from 'react';
import DashboardHeader from '../components/DashboardHeader';
import StatsGrid from '../components/StatsGrid';
import WeeklyChart from '../components/WeeklyChart';
import RecentLogs from '../components/RecentLogs';
import { getDashboardStats } from '../services/dashboardService';
import { getRecentLogs } from '../services/logService';
const Dashboard = () => {
const [stats, setStats] = useState(null);
const [logs, setLogs] = useState([]);
const [loading, setLoading] = useState(true);
useEffect(() => {
loadDashboardData();
}, []);
const loadDashboardData = async () => {
try {
const [statsRes, logsRes] = await Promise.all([
getDashboardStats(),
getRecentLogs(5)
]);
setStats(statsRes.data);
setLogs(logsRes.data);
} catch (error) {
toast.error('Failed to load dashboard data');
} finally {
setLoading(false);
}
};
if (loading) return <DashboardSkeleton />;
return (
<div className="dashboard">
<DashboardHeader />
<StatsGrid stats={stats} />
<WeeklyChart data={stats.weeklyData} />
<RecentLogs logs={logs} />
</div>
);
};Antigravity가 기본 구조를 만들었지만, 색상이나 간격을 조정하고 싶다면:
User (Cursor, StatCard.jsx 열고 Cmd+K):
Instruction: 이 카드의 배경을 더 어둡게 하고,
테두리에 미묘한 gradient 추가해줘.
Cursor: [즉시 수정]
Before:
className="stat-card bg-white/5"
After:
className="stat-card bg-slate-900/40 border border-gradient-to-r from-purple-500/20 to-blue-500/20"
[실시간 프리뷰 업데이트]
User (Antigravity): WeeklyChart 컴포넌트가 제대로 렌더링되는지 테스트해줘.
다음 시나리오:
1. 데이터가 있을 때
2. 데이터가 없을 때 (빈 배열)
3. 일부 날짜만 데이터가 있을 때
Agent:
Test Scenario 1: Normal Data
[Browser opens]
✓ Chart renders with 7 bars
✓ Tooltip shows on hover
✓ Animation plays smoothly
[Screenshot captured]
Test Scenario 2: Empty Data
Mock data: []
✓ "No data available" message shown
✓ No errors in console
[Screenshot captured]
Test Scenario 3: Partial Data
Mock data: [Mon: 120, Wed: 90, Fri: 150]
✓ 3 bars shown with correct heights
✓ Empty days show 0 height bars
✓ X-axis shows all 7 days
[Screenshot captured]
All scenarios passed!
claude
User: 복잡한 로그 작성 폼을 구현해야 해.
필드:
- Project (Select)
- Title (Input)
- Description (Textarea)
- Start Time (Time Picker)
- End Time (Time Picker)
- Work Minutes (자동 계산, 읽기 전용)
- Achievements (Textarea)
- Challenges (Textarea)
- Learnings (Textarea)
- Code Snippets (Code Editor)
- Mood (Radio Buttons, 이모지 5개)
- Tech Tags (Multi-select)
기능:
- 자동 저장 (30초마다 Draft)
- 유효성 검증
- 작업 시간 자동 계산
계획 세워줘.
Claude (Plan):
LogForm 구현 계획:
1. State 관리
- formData (모든 필드)
- errors (유효성 에러)
- projects (드롭다운 옵션)
- techTags (드롭다운 옵션)
- isDraft (저장 상태)
2. 유효성 검증 로직
- Title: 필수, 100자 이하
- Start/End Time: End > Start
- Work Minutes: 자동 계산 (End - Start)
- Description: 500자 이하
3. 자동 저장
- useEffect + setTimeout
- localStorage에 Draft 저장
- 30초마다 실행
- 페이지 이탈 시 Draft 복원
4. 작업 시간 계산
- startTime, endTime 변경 시 자동 트리거
- HH:mm 형식 파싱
- 분 단위 차이 계산
5. API 호출
- Create: POST /api/logs
- Update: PUT /api/logs/{id}
- Success → 로그 목록으로 이동
구현할까요?User (Antigravity): 위 계획대로 LogForm.jsx를 생성해줘.
Agent (Plan Mode):
Creating comprehensive form component...
✓ LogForm.jsx (main component)
✓ FormField.jsx (reusable field wrapper)
✓ TimeRangePicker.jsx (custom time picker)
✓ TechTagSelector.jsx (multi-select)
✓ MoodSelector.jsx (emoji radio buttons)
Implementing features:
✓ Auto-save to localStorage
✓ Time calculation logic
✓ Validation rules
✓ API integration
Testing form...
[Browser Subagent]
✓ All fields render correctly
✓ Auto-save works (console log every 30s)
✓ Time calculation accurate
✓ Validation messages display
[Form Screenshot Artifact]
Antigravity가 만든 기본 Time Picker가 UX가 좋지 않다면:
User (Cursor): TimeRangePicker.jsx를 개선해줘.
현재 문제:
- 텍스트 입력만 가능
- 포맷 에러 발생
개선:
- HTML5 time input 사용
- 즉시 유효성 검증
- 명확한 에러 메시지
Cursor:
✓ Replaced with <input type="time">
✓ Added real-time validation
✓ Added visual feedback (green check / red X)
Testing...
✓ Works on all browsers
✓ Mobile friendly (native time picker)
codex --effort medium
User: LogForm.jsx의 유효성 검증 UX를 리뷰해줘.
Codex Review:
Good:
✓ Real-time validation
✓ Error messages clear
✓ Submit disabled when invalid
Issues:
1. Line 78 - Validation timing
Problem: 에러가 입력 중에 즉시 표시 (annoying)
Better: onBlur에서 검증, submit 시 전체 검증
Current:
onChange={(e) => {
setFormData({...formData, title: e.target.value});
validateTitle(e.target.value); // ← 너무 빠름
}}
Better:
onChange={(e) => setFormData({...formData, title: e.target.value})}
onBlur={(e) => validateTitle(e.target.value)}
2. Line 145 - Auto-save notification
Problem: 사용자가 저장 상태를 모름
Add: "Draft saved" toast or icon
3. Line 203 - Tech Tag selector
Problem: 선택된 태그 시각적으로 구분 안 됨
Add: 선택된 태그에 체크마크 + 배경색Claude Code: 데이터 구조 및 차트 타입 결정
claude
User: Statistics 페이지에 3개 차트를 추가해야 해.
1. 주간 작업 시간 (바 차트)
2. 프로젝트별 분포 (파이 차트)
3. 기술 스택 Top 10 (가로 바 차트)
API 응답 구조와 Recharts 설정을 계획해줘.
Claude:
Chart Planning:
1. Weekly Bar Chart
Data: [{ day: "Mon", minutes: 120 }, ...]
Chart: <BarChart>
Settings:
- XAxis: day name
- YAxis: minutes (0-500)
- Bar color: gradient (purple to blue)
- Tooltip: custom format (2h 30m)
2. Project Pie Chart
Data: [{ name: "DevLog", value: 45, color: "#8B5CF6" }, ...]
Chart: <PieChart>
Settings:
- Custom colors per project
- Legend with percentages
- Tooltip with log count
3. Tech Stack Bar Chart
Data: [{ name: "React", count: 25 }, ...]
Chart: <BarChart layout="vertical">
Settings:
- YAxis: tech name
- XAxis: usage count
- Top 10 only
- Category color coding
구현할까요?Antigravity: 차트 컴포넌트 생성 + 브라우저 테스트
User (Antigravity): 위 설계대로 3개 차트를 구현하고,
실제 API 데이터로 테스트해줘.
Agent (Plan Mode):
Implementation Plan:
1. Create chart components
2. Integrate with Statistics.jsx
3. Add loading/error states
4. Test with live API data
5. Verify responsiveness
Executing...
Creating components:
✓ WeeklyBarChart.jsx
✓ ProjectPieChart.jsx
✓ TechStackBarChart.jsx
✓ Statistics.jsx updated
API Integration:
✓ GET /api/statistics/weekly/current
✓ GET /api/statistics/project-distribution
✓ GET /api/statistics/tech-stack
Testing in browser:
[Browser Subagent starts]
✓ API calls successful
✓ Charts render with data
✓ Tooltips interactive
✓ Colors match design
✓ Responsive on mobile
Screenshots:
- Desktop: All 3 charts visible ✓
- Tablet: Charts stack vertically ✓
- Mobile: Full-width charts ✓
Performance Test:
- Initial render: 1.2s
- Re-render on filter: 0.3s
- No memory leaks detected
[Chart Demo Video Artifact: 30s recording]
User (Cursor, WeeklyBarChart.jsx 열고 Cmd+K):
Instruction: 바 차트에 gradient fill 추가하고,
애니메이션을 더 부드럽게 해줘.
Cursor:
Before:
<Bar dataKey="minutes" fill="#8B5CF6" />
After:
<Bar dataKey="minutes" fill="url(#colorGradient)">
<defs>
<linearGradient id="colorGradient" x1="0" y1="0" x2="0" y2="1">
<stop offset="0%" stopColor="#8B5CF6" stopOpacity={0.8}/>
<stop offset="100%" stopColor="#3B82F6" stopOpacity={0.3}/>
</linearGradient>
</defs>
</Bar>
Animation:
animationDuration={1500}
animationEasing="ease-in-out"
[실시간 프리뷰 업데이트]
User (Antigravity): 파이 차트를 클릭하면 해당 프로젝트의
상세 통계를 보여주는 모달을 추가해줘.
Agent (Plan):
Adding interactive modal:
1. Pie chart onClick handler
2. Modal component with project details
3. API call for project stats
4. Smooth modal animation
Implementing...
✓ ProjectDetailModal.jsx created
✓ onClick added to <Pie>
✓ API integrated
✓ Tailwind modal animations
Testing:
[Browser Subagent]
User Action: Click "DevLog" pie slice
✓ Modal opens smoothly
✓ Project stats loaded (0.5s)
✓ Charts inside modal render
✓ Close button works
✓ ESC key closes modal
✓ Click outside closes modal
[Interaction Recording: modal-demo.mp4]
codex --effort high
User: Statistics.jsx의 차트 렌더링 성능을 분석해줘.
3개 차트가 동시에 렌더링되면 느릴 것 같아.
Codex Analysis:
Performance Issues Found:
1. Statistics.jsx - Line 45
Problem: 모든 차트가 동시에 리렌더링
Current:
const [statsData, setStatsData] = useState(null);
// 데이터 변경 시 3개 차트 모두 리렌더링
Solution:
const weeklyData = useMemo(() => processWeeklyData(statsData), [statsData]);
const projectData = useMemo(() => processProjectData(statsData), [statsData]);
const techData = useMemo(() => processTechData(statsData), [statsData]);
+ React.memo로 차트 컴포넌트 감싸기
2. WeeklyBarChart.jsx - Line 23
Problem: Tooltip 렌더링 시 전체 차트 리렌더링
Solution:
const CustomTooltip = React.memo(({ active, payload }) => {
// tooltip content
});
3. All Charts
Problem: 차트 크기 변경 시 불필요한 리렌더링
Solution:
const ResponsiveContainer = ({ children }) => (
<div style={{ width: '100%', height: 300 }}>
{children}
</div>
);
Expected Improvement: 60% faster re-rendersAntigravity의 Browser Subagent는 E2E 테스트에 최적화되어 있습니다.
User (Antigravity): 다음 사용자 시나리오를 완전히 자동으로 테스트해줘.
시나리오: 새로운 개발자가 첫 로그 작성
1. 대시보드 접속 (아직 로그 없음)
2. "새 로그 작성" 버튼 클릭
3. 프로젝트 선택 (드롭다운)
4. 모든 필드 입력
5. 기술 태그 3개 추가
6. 저장
7. 로그 목록에서 방금 만든 로그 확인
8. 상세 페이지로 이동
9. 편집 버튼 클릭
10. 제목 수정 후 저장
11. 대시보드로 돌아와서 통계 업데이트 확인
Agent (Plan Mode):
E2E Test Plan: First Log Creation Flow
Setup:
1. Reset database (clean state)
2. Create test project "My First Project"
3. Start dev servers
Test Execution Plan:
1. Navigate to http://localhost:3000
2. Verify empty state message
3. Click "New Log" button
4. Fill form fields programmatically
5. Submit form
6. Wait for redirect
7. Verify log appears in list
8. Click log card → detail page
9. Click edit → modify title
10. Save and verify changes
11. Return to dashboard
12. Verify stats updated
Proceed?
User: Yes
Agent (Executing):
Setup Phase:
✓ Database reset
✓ Test project created (id: 1)
✓ Backend running on :8080
✓ Frontend running on :3000
Starting browser...
[Chrome Headless launched]
Step 1: Navigate to dashboard
✓ Page loaded (1.8s)
✓ Empty state: "No logs yet" visible
[Screenshot: empty-dashboard.png]
Step 2: Click "New Log"
✓ Button found and clicked
✓ Redirected to /logs/new
[Screenshot: log-form-empty.png]
Step 3: Fill form
✓ Project selected: "My First Project"
✓ Title: "Setup development environment"
✓ Description: "Configured IDE and installed dependencies"
✓ Start Time: "09:00"
✓ End Time: "11:30"
✓ Work Minutes: Auto-calculated → 150
✓ Achievements: "Dev environment ready"
✓ Mood: "GOOD" 😊
✓ Tech Tags: ["React", "Node.js", "Docker"]
[Screenshot: log-form-filled.png]
Step 4: Submit
✓ Submit button clicked
✓ API call: POST /api/logs
✓ Response: 201 Created
✓ Redirected to /logs
Step 5: Verify in list
✓ Log appears in list
✓ Title matches: "Setup development environment"
✓ Work time shows: "2h 30m"
[Screenshot: log-list-with-new.png]
Step 6: Open detail
✓ Log card clicked
✓ Detail page loaded
✓ All fields displayed correctly
[Screenshot: log-detail.png]
Step 7: Edit log
✓ Edit button clicked
✓ Form pre-filled with existing data
✓ Title changed to: "Setup development environment - Complete"
✓ Save clicked
✓ API call: PUT /api/logs/1
✓ Response: 200 OK
[Screenshot: log-edited.png]
Step 8: Check dashboard stats
✓ Navigated to /
✓ Stats updated:
- This week: 2h 30m ✓
- Logs: 1 ✓
- Active projects: 1 ✓
✓ Chart shows Mon bar: 150 min ✓
✓ Recent logs shows new log ✓
[Screenshot: dashboard-updated.png]
All steps passed! (Total time: 18s)
Generated Artifacts:
1. Test Report (Markdown)
2. 8 Screenshots
3. Full browser recording (18s MP4)
4. Network log (HAR file)
5. Console log
Test Passed: ✓
Antigravity의 자동 테스트 능력:
- 실제 사용자처럼 클릭, 입력, 네비게이션
- 각 단계 스크린샷 자동 캡처
- API 응답 자동 검증
- 실패 시 원인 자동 분석
- 전체 동작 영상 녹화
User (Antigravity): 로그 검색 및 필터링을 테스트해줘.
테스트 데이터:
- 프로젝트 2개 (DevLog, Portfolio)
- 각 프로젝트에 로그 5개씩 (총 10개)
- 날짜 범위: 지난 2주
시나리오:
1. 프로젝트 필터 (DevLog만)
2. 날짜 범위 필터 (이번 주만)
3. 키워드 검색 ("React")
4. 필터 초기화
5. 무한 스크롤 테스트 (20개 이상 로그)
Agent:
Setting up test data:
✓ Created 2 projects
✓ Created 10 logs distributed over 2 weeks
✓ 5 logs contain "React" keyword
Testing filters:
Test 1: Project Filter
✓ Selected "DevLog" from dropdown
✓ List updates to show 5 logs
✓ All logs belong to DevLog project
✓ Other projects hidden
[Screenshot: filter-by-project.png]
Test 2: Date Range Filter
✓ Set start date: 2026-01-01
✓ Set end date: 2026-01-07
✓ List updates to show 3 logs (this week)
✓ Dates verified correct
[Screenshot: filter-by-date.png]
Test 3: Keyword Search
✓ Typed "React" in search box
✓ Debounce wait (500ms)
✓ API call: /api/logs?keyword=React
✓ 5 logs shown
✓ All contain "React" in title or description
[Screenshot: search-react.png]
Test 4: Reset Filters
✓ "Clear Filters" button clicked
✓ All filters reset
✓ Full list restored (10 logs)
Test 5: Infinite Scroll
✓ Created 15 more logs (total 25)
✓ Scrolled to bottom
✓ IntersectionObserver triggered
✓ Next page loaded (logs 11-20)
✓ Scrolled again
✓ Final page loaded (logs 21-25)
✓ "No more logs" message shown
[Screenshot: infinite-scroll.png]
All filter tests passed!
Claude Code: 통합 테스트 계획
claude
User: 프론트엔드와 백엔드 간 데이터 일관성을 검증하는
통합 테스트를 설계해줘.
체크 포인트:
- 날짜 형식 (ISO vs LocalDate)
- 컬럼명 (camelCase vs snake_case)
- Enum 값 (GOOD vs good)
- 숫자 타입 (Integer vs Number)
Claude (Plan):
Integration Test Plan:
1. 데이터 변환 검증
- Frontend → Backend (Request)
- Backend → Frontend (Response)
2. 테스트 케이스
Case 1: DevLog 생성
Frontend sends: { startTime: "09:00", endTime: "11:30" }
Backend expects: { start_time: "09:00", end_time: "11:30" }
Case 2: DevLog 조회
Backend returns: { created_at: "2026-01-15T10:30:00" }
Frontend expects: { createdAt: "2026-01-15T10:30:00" }
Case 3: Enum 값
Frontend: mood: "GOOD"
Backend: mood: GOOD (Enum)
3. 구현 방법
- Axios interceptors (request/response)
- 변환 함수: camelToSnake, snakeToCamel
- Jest 단위 테스트
구현할까요?Cursor: 변환 로직 구현
User (Cursor): 위 계획대로 axios interceptor를 구현해줘.
frontend/src/utils/apiTransform.js
Cursor:
✓ Created apiTransform.js
// camelCase ↔ snake_case 변환
export const camelToSnake = (obj) => { ... };
export const snakeToCamel = (obj) => { ... };
// Axios 설정
axios.interceptors.request.use((config) => {
if (config.data) {
config.data = camelToSnake(config.data);
}
return config;
});
axios.interceptors.response.use((response) => {
if (response.data) {
response.data = snakeToCamel(response.data);
}
return response;
});
✓ Created apiTransform.test.js
✓ 15 test cases
Running tests...
✓ All 15 tests passed
Codex: 통합 검증
codex --effort high
User: 프론트엔드와 백엔드의 API 계약을 검증해줘.
모든 엔드포인트의 요청/응답 형식이 일치하는지.
Codex Deep Analysis:
Analyzing API contracts...
Backend Controllers:
- Scanned 4 controllers
- 37 endpoints found
Frontend Services:
- Scanned 4 service files
- 37 API calls found
Verification Results:
✓ Matched: 35/37 endpoints
Mismatches Found:
1. POST /api/logs
Backend expects: { log_date: "2026-01-15" }
Frontend sends: { logDate: "2026-01-15" }
Status: ⚠️ FIXED by axios interceptor
2. GET /api/statistics/project/{projectId}
Backend returns: { tech_stack_stats: [...] }
Frontend expects: { techStackStats: [...] }
Status: ⚠️ FIXED by axios interceptor
✗ Critical Issue:
3. DELETE /api/projects/{id}
Backend: Deletes project but leaves orphaned logs
Frontend: Expects cascade delete
Recommendation:
Backend fix needed:
@Transactional
public void deleteProject(Long id) {
devLogMapper.deleteByProjectId(id); // Add this
projectMapper.delete(id);
}
Overall: 97% compatibility ✓
Action needed: Fix cascade deleteclaude --model opusplan
User: Docker 이미지 크기를 최적화하고 싶어.
현재:
- Backend: 650MB (Spring Boot JAR)
- Frontend: 280MB (Node modules 포함)
목표:
- Backend: < 200MB
- Frontend: < 50MB
Multi-stage build로 최적화해줘.
Claude (Plan Mode):
Docker Optimization Plan:
Backend Dockerfile (Multi-stage):
Stage 1: Maven Build
- Base: maven:3.8-openjdk-17
- Build JAR
- Size: ~1GB (build dependencies)
Stage 2: Runtime
- Base: eclipse-temurin:17-jre-alpine
- Copy JAR only
- Size: ~150MB ✓
Frontend Dockerfile (Multi-stage):
Stage 1: NPM Build
- Base: node:18-alpine
- npm install & build
- Size: ~500MB
Stage 2: Nginx Serve
- Base: nginx:alpine
- Copy build/ only
- Size: ~25MB ✓
Additional Optimizations:
- .dockerignore 활용
- Layer caching 최적화
- Alpine Linux 사용
구현할까요?User: Yes, 구현해줘.
Claude:
Backend Dockerfile:
# Stage 1: Build
FROM maven:3.8-openjdk-17 AS builder
WORKDIR /app
COPY pom.xml .
RUN mvn dependency:go-offline # Layer cache
COPY src ./src
RUN mvn clean package -DskipTests
# Stage 2: Runtime
FROM eclipse-temurin:17-jre-alpine
WORKDIR /app
COPY --from=builder /app/target/*.jar app.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "app.jar"]
Frontend Dockerfile:
# Stage 1: Build
FROM node:18-alpine AS builder
WORKDIR /app
COPY package*.json ./
RUN npm ci # Faster than install
COPY . .
RUN npm run build
# Stage 2: Serve
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
COPY nginx.conf /etc/nginx/nginx.conf
EXPOSE 80
.dockerignore:
node_modules
target
.git
.env
*.log
Building images...
✓ Backend: 148MB (78% reduction)
✓ Frontend: 24MB (91% reduction)User (Antigravity): 전체 스택을 docker-compose로 통합하고,
실제로 배포 테스트까지 해줘.
서비스:
- PostgreSQL
- Backend (Spring Boot)
- Frontend (React + Nginx)
추가 요구사항:
- 헬스 체크
- 자동 재시작
- 볼륨 마운트 (데이터 영속성)
- 네트워크 격리
Agent (Plan Mode):
Docker Compose Configuration Plan:
Services:
1. postgres
- Image: postgres:15-alpine
- Volume: ./data/postgres
- Health check: pg_isready
2. backend
- Build: ./backend
- Depends on: postgres
- Env: Database connection
- Health check: /health endpoint
3. frontend
- Build: ./frontend
- Depends on: backend
- Ports: 80:80
- Env: API_BASE_URL
Networks:
- devlog-network (bridge)
Volumes:
- postgres-data (named volume)
Implementing...
✓ docker-compose.yml created
✓ .env.example created
✓ Health checks configured
✓ Restart policies set
Testing deployment:
$ docker-compose up -d
Creating network "devlog-network" ... done
Creating volume "postgres-data" ... done
Creating devlog-postgres ... done
Waiting for postgres health check... (5s)
Creating devlog-backend ... done
Waiting for backend health check... (12s)
Creating devlog-frontend ... done
All services healthy!
E2E Test on deployed stack:
[Browser connects to http://localhost]
✓ Frontend loads (nginx)
✓ API calls successful (backend)
✓ Database queries work (postgres)
✓ Full flow: Create log → View → Edit → Delete
Performance Test:
- Response time: 45ms avg
- Concurrent users: 50
- Success rate: 100%
Deployment successful!
[Deployment Report Artifact]
Claude Code: 운영 기능 설계
claude
User: 프로덕션 운영을 위한 모니터링 기능을 추가해줘.
요구사항:
- 헬스 체크 엔드포인트 (DB 연결 포함)
- 구조화된 로깅 (JSON 형식)
- 에러 추적 (스택 트레이스)
- 성능 메트릭 (응답 시간)
Claude (Plan):
Production Monitoring Plan:
1. Health Check Endpoint
GET /api/health
Response:
{
"status": "UP",
"components": {
"database": { "status": "UP", "latency": "5ms" },
"application": { "status": "UP", "uptime": "2d 3h" }
}
}
2. Structured Logging
- Logback JSON encoder
- Log levels: INFO, WARN, ERROR
- Request ID tracing
3. Error Tracking
- Custom exception handler
- Stack trace in ERROR logs
- User-friendly error messages
4. Performance Metrics
- Spring Boot Actuator
- /actuator/metrics
- Response time histogram
구현할까요?Codex: 보안 리뷰
codex --effort xhigh
User: 프로덕션 배포 전 보안 점검 해줘.
Codex Security Audit:
Critical Issues:
1. application.yml
Problem: Database password in plain text
Current:
spring:
datasource:
password: devlog123
Fix:
spring:
datasource:
password: ${DB_PASSWORD}
+ Use environment variables
2. CORS Configuration
Problem: Allow all origins
Current:
@CrossOrigin(origins = "*")
Fix:
@CrossOrigin(origins = "${ALLOWED_ORIGINS}")
# .env: ALLOWED_ORIGINS=https://devlog.example.com
3. No Rate Limiting
Problem: API abuse possible
Add:
@Bean
public RateLimiter rateLimiter() {
return RateLimiter.of("api", RateLimiterConfig.custom()
.limitForPeriod(100)
.limitRefreshPeriod(Duration.ofMinutes(1))
.build());
}
4. SQL Injection (False Positive)
Status: ✓ Safe (MyBatis PreparedStatement)
5. XSS Vulnerability
Problem: React renders user input
Status: ✓ Safe (React auto-escapes)
6. Missing HTTPS
Recommendation: Configure SSL in nginx.conf
Security Score: 7/10
Action: Fix items 1-3 before production상황: 프로덕션에서 통계가 0으로 표시되는 버그 발견
User (Antigravity): 프로덕션에서 대시보드 통계가 모두 0으로 나와.
로컬에서 재현하고 원인 찾아줘.
Agent:
Reproducing issue locally:
✓ Started local dev stack
✓ Opened dashboard
✓ Stats loading...
Result:
- This Week: 0h 0m (Expected: 2h 30m)
- Logs: 0 (Expected: 3)
- Active Projects: 0 (Expected: 1)
Issue Reproduced!
Analyzing...
Network Tab:
GET /api/statistics/dashboard
Response: 200 OK
Body: {
"weeklyMinutes": 150,
"logCount": 3,
"activeProjects": 1
}
Data is correct from API!
Problem is in frontend.
Checking Dashboard.jsx...
Line 45 - Found Issue:
const stats = response.data;
setStatsData(stats.weeklyMinutes); // ← Only setting one field!
Should be:
setStatsData(stats); // Set entire object
Root Cause: Frontend state bug
User (Cursor): Antigravity가 찾은 버그 수정해줘.
Dashboard.jsx Line 45
Cursor:
✓ Fixed state update
✓ Compiled
✓ Hot reload
Testing...
✓ Stats now show correctly:
- This Week: 2h 30m ✓
- Logs: 3 ✓
- Active Projects: 1 ✓
Bug fixed! (Total time: 2 minutes)
User (Antigravity): 수정 사항을 빌드하고 배포해줘.
Agent:
Building frontend...
✓ npm run build (45s)
✓ Docker image built
Deploying to production...
✓ Pushed to registry
✓ Pulled on production server
✓ Containers restarted
Verifying fix:
[Browser connects to production URL]
✓ Dashboard stats display correctly
✓ All charts render
✓ No console errors
Deployment successful!
[Deployment Report with before/after screenshots]
총 소요 시간: 재현 (2분) + 수정 (2분) + 배포 (5분) = 9분
요구사항: 주간 활동 리포트를 이메일로 발송하는 기능
claude --model opusplan
User: 주간 활동 리포트 기능을 추가해줘.
요구사항:
- 매주 월요일 오전 9시 자동 발송
- 지난 주 통계 요약
- 프로젝트별 진행 상황
- 기술 스택 사용 빈도
- PDF 첨부 또는 HTML 이메일
전체 계획 세워줘.
Claude (Plan Mode):
Weekly Report Feature Plan:
Phase 1: 데이터 수집 (Backend)
1. New Service: WeeklyReportService
- getLastWeekStats()
- generateReportData()
2. Report Data Structure:
{
period: "2026-01-01 ~ 2026-01-07",
totalMinutes: 1200,
logCount: 15,
projects: [
{ name: "DevLog", minutes: 800, progress: +15% },
{ name: "Portfolio", minutes: 400, progress: +5% }
],
techStack: [
{ name: "React", usageCount: 25 },
{ name: "Spring Boot", usageCount: 18 }
]
}
Phase 2: 리포트 생성 (Backend)
1. Template Engine: Thymeleaf
2. HTML 템플릿 디자인
3. PDF 변환: Flying Saucer 라이브러리
Phase 3: 이메일 발송 (Backend)
1. Spring Mail 설정
2. SMTP 설정 (Gmail/SendGrid)
3. 첨부 파일 처리
Phase 4: 스케줄링 (Backend)
1. @Scheduled annotation
2. Cron expression: 0 0 9 * * MON
3. 비동기 처리 (@Async)
Phase 5: 사용자 설정 (Frontend + Backend)
1. Settings 페이지에 이메일 설정 추가
2. 리포트 수신 on/off 토글
3. 이메일 주소 관리
예상 개발 시간: 1일
복잡도: 중간
구현할까요?User (Antigravity): 위 계획을 3개 에이전트로 나눠서 병렬 개발해줘.
Agent (Manager View 설정):
Workspace 1: Data Collection
└─ Agent 1: WeeklyReportService
Tasks:
- getLastWeekStats() implementation
- Data aggregation logic
- DTO classes
Status: In Progress
Workspace 2: Report Generation
└─ Agent 2: Report Template + PDF
Tasks:
- Thymeleaf template design
- PDF generation with Flying Saucer
- Test with sample data
Status: In Progress
Workspace 3: Email + Scheduling
└─ Agent 3: Email Service + Scheduler
Tasks:
- Spring Mail configuration
- Scheduler implementation
- Email sending logic
Status: In Progress
[3개 에이전트 동시 작업]
Agent 1 (Workspace 1):
✓ WeeklyReportService.java created
✓ getLastWeekStats() implemented
✓ WeeklyReportDTO.java created
✓ Unit tests written (8/8 passed)
Time: 15 minutes
Agent 2 (Workspace 2):
✓ weekly-report.html template designed
✓ Flying Saucer integration
✓ PDF generation tested
✓ Sample PDF generated [Artifact: sample-report.pdf]
Time: 20 minutes
Agent 3 (Workspace 3):
✓ EmailService.java created
✓ @Scheduled method added
✓ Cron tested (manual trigger)
✓ Email sent successfully
Time: 18 minutes
All tasks completed!
Total time: 20 minutes (병렬 처리)
순차 처리 예상 시간: 53 minutes
시간 절약: 62%
User (Cursor): Settings 페이지에 주간 리포트 설정 섹션 추가해줘.
컴포넌트:
- Enable/Disable 토글
- 이메일 주소 입력
- "테스트 메일 발송" 버튼
- 마지막 발송 시간 표시
Cursor (Agent Mode):
✓ Created WeeklyReportSettings.jsx
✓ Added to Settings.jsx
✓ API integration:
- GET /api/settings/weekly-report
- PUT /api/settings/weekly-report
- POST /api/weekly-report/test
Testing...
✓ Toggle works
✓ Email saves correctly
✓ Test email sent
✓ UI responsive
[Screenshot: settings-weekly-report.png]
User (Antigravity): 전체 주간 리포트 기능을 E2E로 테스트해줘.
Agent:
E2E Test: Weekly Report Feature
Scenario 1: Enable Weekly Report
✓ Navigate to Settings
✓ Enable weekly report toggle
✓ Enter email: [email protected]
✓ Click "Save"
✓ Success toast appears
Scenario 2: Send Test Email
✓ Click "Send Test Email"
✓ Loading spinner appears
✓ Wait for API response (3s)
✓ Success message: "Test email sent!"
Scenario 3: Verify Email Received
[Checking test email inbox]
✓ Email received (5s delay)
✓ Subject: "Your Weekly Development Report"
✓ HTML formatted correctly
✓ PDF attached (287KB)
✓ All data accurate
Scenario 4: Scheduler Test
✓ Triggered manual run
✓ Email sent to all enabled users
✓ Logs recorded
All scenarios passed!
[Email Screenshot + PDF Artifact]
총 개발 시간: 설계 (15분) + 병렬 구현 (20분) + UI (15분) + 테스트 (10분) = 1시간
도구: Cursor ($20) 만
전략:
- Cursor Rules 극대화 (상세한 .cursorrules 작성)
- CLAUDE.md 체계적 관리
- Agent Mode 적극 활용
- Auto-run으로 테스트 자동화
DevLog 개발 예상:
- 개발 기간: 4-5주
- 생산성: 2.5x (수동 대비)
도구: Cursor ($20) + Claude Code ($20) + Antigravity (무료)
역할 분담:
- Cursor: UI 컴포넌트, 반복 작업, 빠른 수정
- Claude Code: 아키텍처, 복잡한 로직, 리팩토링
- Antigravity: E2E 테스트, 병렬 개발, 브라우저 검증
DevLog 개발 예상:
- 개발 기간: 2-3주
- 생산성: 4x
- ROI: $60 투자 → $3,000 절약 (개발 시간)
월별 사용 패턴:
주 1-2:
- Claude Code (40%): 전체 설계, 데이터베이스 스키마
- Antigravity (30%): 기본 구조 병렬 생성
- Cursor (30%): 세부 구현
주 3-4:
- Cursor (50%): 기능 구현
- Antigravity (30%): E2E 테스트, UI 테스트
- Claude Code (20%): 복잡한 통계 로직
주 5+:
- Cursor (60%): 버그 수정, 폴리싱
- Antigravity (30%): 최종 통합 테스트
- Claude Code (10%): 문서 작성
도구: Cursor ($20) + Claude Code ($100) + Codex ($20) + Antigravity (무료)
역할 분담:
- Cursor: 빠른 실행, UI 조정
- Claude Code Max: 무제한 코딩, 복잡한 아키텍처
- Codex: 최종 품질 보증, 보안 감사
- Antigravity: 병렬 개발, 자동 테스트
DevLog 개발 예상:
- 개발 기간: 1-2주
- 생산성: 6x
- 품질: 프로덕션 레벨
워크플로우 최적화:
Phase 1: 설계 및 구조
Claude Code (Plan Mode) → 전체 아키텍처
↓
Antigravity (3 Agents) → 백엔드/프론트엔드/DevOps 병렬 생성
Phase 2: 기능 구현
Claude Code (Agent) → 복잡한 비즈니스 로직
↓
Cursor (Agent) → 반복 작업, UI 컴포넌트
↓
Antigravity (Browser) → 실시간 UI 테스트
Phase 3: 품질 보증
Codex (xhigh effort) → 전체 코드 리뷰
↓
Cursor → 리뷰 지적사항 빠른 수정
↓
Antigravity (E2E) → 최종 통합 테스트
Phase 4: 배포
Claude Code → Docker 최적화
↓
Antigravity → 배포 테스트
↓
Codex → 보안 감사
# 작업 전환 시 컨텍스트 리셋
/clear
# 비용 모니터링
/cost
# 출력 결과:
This session: 45,231 tokens ($0.14)
This month: 1,234,567 tokens ($3.70)
Remaining: Unlimited (Claude Max)
# 효율적 모델 사용
/model
1. Sonnet 4.5 (default, 권장)
2. Opus 4.5 (복잡한 작업만)
3. opusplan (자동 최적화)
4. Haiku 4 (간단한 작업)
# opusplan으로 자동 최적화
claude --model opusplan
# Opus로 계획 → Sonnet으로 실행 (비용 60% 절감)# .cursorrules
# 불필요한 컨텍스트 제외
excludeFromContext:
- node_modules/**
- target/**
- .git/**
- *.log
- build/**
# 자동 저장 비활성화 (토큰 절약)
autoSave: false
# 체크포인트 보관 기간 제한
checkpointRetention: 7 days# Agent 설정
Default Mode: Agent-assisted
# Agent-driven은 비용 많이 소모
Browser Testing: Selective
# 모든 변경마다 테스트 대신 중요 시점만
Artifact Generation: Essential only
# 스크린샷/영상은 필요시만A: Cursor부터 시작하세요.
이유:
- 가장 친숙한 인터페이스 (VS Code)
- 즉각적인 피드백 (Tab 완성, 인라인 편집)
- 학습 곡선 낮음
학습 순서:
- 1주차: Cursor Tab 완성 + Cmd+K
- 2주차: Cursor Agent Mode + Auto-run
- 3주차: Claude Code (터미널 익숙해지면)
- 4주차: Antigravity (멀티 에이전트 개념)
A: 다음 상황에서 Antigravity가 최고입니다.
Antigravity 최적 사용 케이스:
- ✓ 여러 페이지 동시 개발 (Manager View)
- ✓ UI 자동 테스트 필요 (Browser Subagents)
- ✓ E2E 시나리오 검증
- ✓ 복잡한 워크플로우 자동화
- ✓ 비개발자(PM, 디자이너)와 협업 (Artifacts)
다른 도구가 나은 경우:
- ✗ 간단한 버그 수정 → Cursor가 더 빠름
- ✗ 복잡한 알고리즘 → Claude Code가 더 깊이 생각
- ✗ 코드 리뷰 → Codex가 더 신중
A: 복잡도 기준으로 판단하세요.
Plan Mode 필수:
- 새로운 기능 (> 200 lines)
- 여러 파일 수정
- 아키텍처 변경
- 데이터베이스 마이그레이션
- 복잡한 리팩토링
Plan Mode 생략 가능:
- 버그 수정 (< 50 lines)
- CSS 스타일 조정
- 문자열 변경
- 간단한 설정 수정
자동 판단:
# CLAUDE.md에 추가
## Plan Mode Triggers
Always use Plan Mode when:
- Creating new features
- Modifying 3+ files
- Changing database schema
- User says "let's plan..."
Skip Plan Mode when:
- User says "quick fix"
- Bug fix < 50 lines
- Only CSS changesA: 작업 유형에 따라 다릅니다.
| 작업 유형 | 최적 도구 | 이유 |
|---|---|---|
| 새 페이지 생성 | Antigravity | 레이아웃+API+테스트 한 번에 |
| 컴포넌트 작성 | Cursor | 빠른 속도, 실시간 피드백 |
| 차트/그래프 | Antigravity | 브라우저에서 즉시 확인 |
| CSS 조정 | Cursor | Cmd+K로 즉시 수정 |
| 복잡한 State | Claude Code | 로직 설계 후 구현 |
| UI 테스트 | Antigravity | Browser Subagent 자동화 |
A: 가능하지만 제한적입니다.
Antigravity가 백엔드에서 유용한 경우:
- ✓ REST API 스캐폴딩 (CRUD 자동 생성)
- ✓ API 테스트 (Postman처럼 자동 호출)
- ✓ Docker/배포 설정
Claude Code가 더 나은 경우:
- ✓ 복잡한 비즈니스 로직
- ✓ 데이터베이스 쿼리 최적화
- ✓ MyBatis XML 매퍼
- ✓ 아키텍처 설계
이유: Antigravity의 Browser Subagent는 프론트엔드 특화. 백엔드는 터미널 작업이 많아서 Claude Code가 더 효율적.
A: 네, 권장합니다!
공유 CLAUDE.md 전략:
# DevLog Project Context
# 모든 AI 도구가 읽음 (Cursor, Claude Code, Antigravity)
## Tech Stack
Backend: Spring Boot 3.2.1, MyBatis, PostgreSQL 15
Frontend: React 18, Tailwind CSS, Recharts
## Critical Rules (모든 도구 공통)
- PostgreSQL column names: snake_case
- API responses: camelCase (frontend expects)
- NEVER force push to main
- ALWAYS write tests for new features
## Tool-Specific Notes
### For Cursor
- Use Auto-run for tests
- Checkpoint before major changes
### For Claude Code
- Default to Plan Mode for features
- Use opusplan for cost optimization
### For Antigravity
- Browser test all UI changes
- Generate Artifacts for PM review팁: Git에 커밋하면 팀 전체가 동일한 컨텍스트 공유
A: 네, 언제든 가능합니다.
예시 시나리오:
초기 설계: Claude Code
↓
빠른 구현: Cursor로 전환
↓
UI 테스트: Antigravity 추가
↓
최종 리뷰: Codex로 품질 검증
주의사항:
- CLAUDE.md는 계속 업데이트
- 각 도구가 최근 변경사항 인식하도록
/clear또는 새 세션
A: Artifacts는 비개발자 커뮤니케이션에 최적입니다.
Artifact 활용 사례:
-
PM에게 진행 보고
- Screenshot Artifacts: 완성된 UI
- Plan Document: 다음 단계 계획
- Test Report: 품질 보증 증거
-
디자이너와 협업
- Before/After Screenshots: UI 변경 비교
- Browser Recording: 실제 동작 시연
-
팀 회의
- Test Report: 통과한 기능 목록
- Performance Metrics: 속도 개선 증거
공유 방법:
# Antigravity artifacts 자동 저장 위치
.antigravity/artifacts/
├── 2026-01-15-dashboard-implementation/
│ ├── plan.md
│ ├── screenshots/
│ │ ├── desktop.png
│ │ ├── tablet.png
│ │ └── mobile.png
│ ├── demo-video.mp4
│ └── test-report.md
# Slack/이메일에 첨부 또는 Git에 커밋DevLog 프로젝트를 통해 각 코딩 에이전트 도구의 최적 활용법을 살펴보았습니다.
-
도구의 강점 활용:
- Cursor = 속도
- Claude Code = 깊이
- Antigravity = 자동화
- Codex = 품질
-
작업에 맞는 도구 선택:
- 복잡도가 낮으면 Cursor
- 복잡도가 높으면 Claude Code Plan Mode
- 테스트가 필요하면 Antigravity
- 검증이 필요하면 Codex
-
컨텍스트 공유:
- CLAUDE.md를 모든 도구가 읽도록
- Git 커밋으로 팀 전체 동기화
-
비용 최적화:
- 예산에 맞게 도구 조합
- 토큰 사용량 모니터링
- 효율적인 모델 선택
초보자 (첫 AI 코딩):
Cursor ($20) → 3개월 경험 → Claude Code 추가 ($20)
중급자 (AI 코딩 경험 있음):
Cursor + Claude Code + Antigravity (무료)
= $40/월, 4배 생산성
전문가 (프로덕션 품질):
Cursor + Claude Code Max + Codex + Antigravity
= $140/월, 6배 생산성 + 프로덕션 품질
AI 코딩 에이전트는 도구일 뿐입니다. 진짜 가치는 명확한 컨텍스트와 전략적 사용에서 나옵니다.
- CLAUDE.md에 투자하세요
- 각 도구의 모드를 이해하세요
- 실험하고 자신만의 워크플로우를 찾으세요
DevLog 프로젝트로 행운을 빕니다! 🚀
문서 작성일: 2026-01-03
대상 프로젝트: DevLog (Spring Boot + React 풀스택)
검증 방법: 실제 개발 시뮬레이션 + 공식 문서 + 커뮤니티 베스트 프랙티스