Files
zellyy-finance/.taskmaster_backup/tasks/tasks.json
hansoo 9851627ff1 feat: Add CI/CD pipeline and code quality improvements
- Add GitHub Actions workflow for automated CI/CD
- Configure Node.js 18.x and 20.x matrix testing
- Add TypeScript type checking step
- Add ESLint code quality checks with enhanced rules
- Add Prettier formatting verification
- Add production build validation
- Upload build artifacts for deployment
- Set up automated testing on push/PR
- Replace console.log with environment-aware logger
- Add pre-commit hooks for code quality
- Exclude archive folder from linting

🤖 Generated with [Claude Code](https://claude.ai/code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-07-12 15:27:54 +09:00

328 lines
23 KiB
JSON

{
"tasks": [
{
"id": 1,
"title": "TypeScript 설정 강화 및 타입 안전성 확보",
"description": "TypeScript strict 모드가 성공적으로 활성화되었으며, 코드베이스의 타입 안전성이 대폭 강화되었습니다. 새로운 타입 시스템 구조가 구축되고 타입 품질이 크게 향상되었습니다.",
"status": "done",
"dependencies": [],
"priority": "high",
"details": "1. ✅ 완료됨: tsconfig.json에서 strict: true, noImplicitAny: true, strictNullChecks: true, noUnusedLocals: true, noUnusedParameters: true, noFallthroughCasesInSwitch: true 활성화 2. ✅ 완료됨: 타입 에러 0개 달성 (npx tsc --noEmit 통과) 3. ✅ 완료됨: 새로운 타입 시스템 구조 생성 (src/types/common.ts, utils.ts, guards.ts, index.ts) 4. ✅ 완료됨: any 타입 완전 제거 및 중복 타입 정의 제거 5. ✅ 완료됨: 20+ 타입 가드 함수 및 API 응답 타입 표준화 6. 남은 작업: 타입 시스템 최적화 및 지속적 개선",
"testStrategy": "✅ TypeScript 컴파일러 오류 0개 달성 완료, ✅ tsc --noEmit 명령어 타입 검사 통과 완료, ✅ 런타임 타입 안전성 확보 완료, 추가로 새로운 타입 시스템의 안정성 모니터링 및 성능 최적화 검증",
"subtasks": [
{
"id": 1,
"title": "TypeScript strict 모드 설정 완료 검증",
"description": "모든 strict 옵션이 올바르게 활성화되었는지 확인하고 컴파일 오류가 없는지 검증",
"status": "done",
"dependencies": [],
"details": "",
"testStrategy": ""
},
{
"id": 2,
"title": "새로운 타입 시스템 구조 안정성 검증",
"description": "구축된 타입 시스템이 모든 컴포넌트에서 올바르게 작동하는지 검증하고 타입 충돌 확인",
"status": "done",
"dependencies": [],
"details": "",
"testStrategy": ""
},
{
"id": 3,
"title": "타입 가드 함수 성능 최적화",
"description": "구현된 20+ 타입 가드 함수들의 성능을 검토하고 필요시 최적화",
"status": "done",
"dependencies": [],
"details": "",
"testStrategy": ""
},
{
"id": 4,
"title": "타입 시스템 문서화",
"description": "새로운 타입 구조와 타입 가드 함수들의 사용법 문서화 및 가이드라인 작성",
"status": "done",
"dependencies": [],
"details": "",
"testStrategy": ""
},
{
"id": 5,
"title": "추가 유틸리티 타입 개발",
"description": "프로젝트 특성에 맞는 커스텀 유틸리티 타입 개발 및 기존 타입 시스템 확장",
"status": "done",
"dependencies": [],
"details": "<info added on 2025-07-12T02:09:38.688Z>\nReact Hook 및 비즈니스 로직 특화 타입 개발 완료:\n\nReact Hook 상태 관리 타입 4개 구현:\n- HookState<T>: 일반적인 Hook 상태 관리\n- MutationState<TData, TVariables>: 데이터 변경 작업용\n- PaginationState<T>: 페이지네이션 상태 관리\n- InfiniteScrollState<T>: 무한 스크롤 상태 관리\n\n비즈니스 로직 특화 타입 5개 구현:\n- BudgetCalculation: 예산 계산 결과 타입\n- CategoryExpense: 카테고리별 지출 분석 타입\n- MonthlyTrend: 월별 트렌드 데이터 타입\n- BudgetAlert: 예산 알림 설정 타입\n- TransactionFilters: 거래 내역 검색 필터 타입\n\n고급 제네릭 유틸리티 타입 4개 구현:\n- ConditionalType<T, U, Y, N>: 조건부 타입 결정\n- FunctionOverload<T>: 함수 오버로드 지원\n- DeepKeyof<T>: 객체의 재귀적 키 경로 추출\n- UnionToIntersection<U>: 유니온 타입을 교집합으로 변환\n\n모든 새로운 타입에 대응하는 타입 가드 함수들도 함께 구현하여 런타임 타입 안전성 확보. 전체 타입들이 index.ts에서 export되어 애플리케이션 전체에서 활용 가능한 상태로 완성.\n</info added on 2025-07-12T02:09:38.688Z>",
"testStrategy": ""
},
{
"id": 6,
"title": "타입 안전성 모니터링 시스템 구축",
"description": "지속적인 타입 안전성 유지를 위한 모니터링 및 검증 프로세스 구축",
"status": "done",
"dependencies": [],
"details": "<info added on 2025-07-12T02:16:48.261Z>\n타입 안전성 모니터링 시스템 구축이 성공적으로 완료되었습니다.\n\nPre-commit 훅 설정: husky와 lint-staged를 설치하여 .husky/pre-commit에서 커밋 전 자동으로 타입 검사와 ESLint가 실행되도록 구성했습니다.\n\nPackage.json 스크립트 확장: type-check:watch로 실시간 타입 검사 모니터링, lint:fix로 자동 ESLint 오류 수정, check-all로 전체 검사가 가능하며, lint-staged 설정으로 변경된 파일만 선별적으로 검사합니다.\n\nVS Code 설정 최적화: TypeScript 언어 서버 설정, 자동 import 정리 및 타입 체킹, 저장 시 자동 ESLint 수정, 한국어 로케일 설정을 통해 개발 환경을 개선했습니다.\n\nGitHub Actions 워크플로우: .github/workflows/type-check.yml을 생성하여 Node.js 18.x, 20.x 매트릭스 테스트를 진행하고, PR에서 타입 검사 실패 시 자동 댓글을 달며, 빌드 아티팩트를 업로드하는 CI/CD 파이프라인을 구축했습니다.\n\n이제 개발자가 코드를 커밋하거나 PR을 생성할 때마다 자동으로 타입 안전성이 검증되어 코드 품질이 지속적으로 유지됩니다.\n</info added on 2025-07-12T02:16:48.261Z>",
"testStrategy": ""
}
]
},
{
"id": 2,
"title": "코드 품질 개선 및 린팅 설정",
"description": "console.log 제거, 빌드 오류 수정, ESLint/Prettier 설정을 통해 코드 품질을 개선합니다.",
"details": "1. 프로젝트 전체에서 console.log 81개 제거 (production에서는 삭제, development에서는 logger 라이브러리 사용) 2. SupabaseToAppwriteMigration import 오류 수정 3. ESLint 규칙 강화 (@typescript-eslint/recommended, react-hooks/recommended 추가) 4. Prettier 설정 추가 (.prettierrc, .prettierignore 파일 생성) 5. pre-commit hook 설정으로 자동 포맷팅",
"testStrategy": "ESLint 오류 0개, Prettier 포맷팅 자동 적용 확인, 빌드 성공 확인, 불필요한 console.log가 production 빌드에 포함되지 않는지 검증",
"priority": "high",
"dependencies": [
1
],
"status": "done",
"subtasks": []
},
{
"id": 3,
"title": "환경 변수 보안 강화 및 관리 개선",
"description": "API 키의 클라이언트 노출 문제를 해결하고 환경 변수 관리를 개선합니다.",
"details": "1. 클라이언트에 노출되지 말아야 할 API 키들을 서버 사이드로 이동 2. .env.example 파일 생성으로 필요한 환경 변수 문서화 3. VITE_로 시작하는 환경 변수만 클라이언트에 노출되도록 정리 4. 민감한 API 키는 서버리스 함수나 백엔드에서만 사용 5. 환경별 설정 파일 분리 (.env.local, .env.production)",
"testStrategy": "빌드된 클라이언트 코드에서 민감한 API 키가 노출되지 않는지 확인, 환경 변수가 올바르게 로드되는지 각 환경에서 테스트",
"priority": "high",
"dependencies": [],
"status": "done",
"subtasks": []
},
{
"id": 4,
"title": "CI/CD 파이프라인 구축",
"description": "GitHub Actions를 사용하여 자동 빌드, 테스트, ESLint 검사를 수행하는 워크플로우를 설정합니다.",
"details": "1. .github/workflows/ci.yml 파일 생성 2. Node.js 환경 설정 및 의존성 설치 3. TypeScript 빌드 및 타입 검사 4. ESLint 및 Prettier 검사 자동화 5. 테스트 실행 (나중에 추가될 테스트들) 6. 빌드 아티팩트 생성 및 저장 7. PR에서 자동 검사 실행",
"testStrategy": "GitHub Actions 워크플로우가 성공적으로 실행되는지 확인, PR 생성 시 자동 검사가 동작하는지 검증, 빌드 실패 시 적절한 에러 메시지 출력 확인",
"priority": "medium",
"dependencies": [
2
],
"status": "done",
"subtasks": []
},
{
"id": 5,
"title": "상태 관리를 Context API에서 Zustand로 마이그레이션",
"description": "기존 Context API 기반 상태 관리를 Zustand로 전환하여 보일러플레이트 코드를 줄이고 성능을 향상시킵니다.",
"details": "1. Zustand 설치 및 기본 설정 2. 기존 Context 구조 분석 및 Zustand store 설계 3. 인증 상태 관리 store 생성 (auth store) 4. 앱 전체 상태 관리 store 생성 (app store) 5. 기존 useContext 호출을 zustand store 사용으로 변경 6. TypeScript 타입 정의 추가 7. DevTools 연동 설정",
"testStrategy": "상태 변경이 예상대로 동작하는지 확인, 컴포넌트 리렌더링 횟수 감소 확인, 개발자 도구에서 상태 추적 가능 확인",
"priority": "medium",
"dependencies": [
1
],
"status": "done",
"subtasks": []
},
{
"id": 6,
"title": "TanStack Query를 사용한 데이터 페칭 개선",
"description": "TanStack Query를 도입하여 자동 캐싱, 동기화, 오프라인 지원을 구현합니다.",
"details": "1. @tanstack/react-query 설치 및 QueryClient 설정 2. API 호출 함수들을 React Query hooks로 전환 3. 자동 캐싱 전략 설정 (staleTime, cacheTime) 4. 낙관적 업데이트 구현 (optimistic updates) 5. 오프라인 상태에서의 데이터 처리 6. 백그라운드 refetch 설정 7. 에러 처리 및 재시도 로직 구현",
"testStrategy": "데이터 캐싱이 올바르게 동작하는지 확인, 오프라인 상태에서 캐시된 데이터 접근 가능 확인, 낙관적 업데이트 시나리오 테스트",
"priority": "medium",
"dependencies": [
5
],
"status": "done",
"subtasks": []
},
{
"id": 7,
"title": "테스트 환경 설정 및 핵심 로직 테스트 작성",
"description": "Vitest와 React Testing Library를 설정하고 핵심 비즈니스 로직과 주요 사용자 플로우에 대한 테스트를 작성합니다.",
"details": "1. Vitest 및 React Testing Library 설치 및 설정 2. 테스트 환경 설정 파일 생성 (vitest.config.ts) 3. 핵심 비즈니스 로직 단위 테스트 작성 4. 주요 컴포넌트 렌더링 테스트 5. 사용자 인터랙션 테스트 (로그인, 데이터 입력 등) 6. API 모킹 설정 7. 테스트 커버리지 80% 목표 달성",
"testStrategy": "모든 테스트가 통과하는지 확인, 테스트 커버리지 리포트 생성, CI/CD 파이프라인에서 테스트 자동 실행 확인",
"priority": "medium",
"dependencies": [
4
],
"status": "done",
"subtasks": []
},
{
"id": 8,
"title": "React 성능 최적화 구현",
"description": "React.memo, useMemo, useCallback을 적용하고 불필요한 리렌더링을 방지하여 앱 성능을 향상시킵니다.",
"details": "1. React DevTools Profiler를 사용한 성능 분석 2. 자주 리렌더링되는 컴포넌트에 React.memo 적용 3. 계산 비용이 높은 로직에 useMemo 적용 4. 콜백 함수에 useCallback 적용 5. 세션 체크 주기를 5초에서 30초로 조정 6. 컴포넌트 레이지 로딩 구현 (React.lazy, Suspense) 7. 이미지 최적화 및 지연 로딩",
"testStrategy": "React DevTools에서 리렌더링 횟수 감소 확인, 앱 로딩 속도 2배 향상 측정, 메모리 사용량 최적화 확인",
"priority": "medium",
"dependencies": [
6
],
"status": "done",
"subtasks": []
},
{
"id": 9,
"title": "Vercel 자동 배포 설정",
"description": "Vercel을 사용하여 자동 배포 환경을 구축하고 환경별 배포와 PR 미리보기를 설정합니다.",
"details": "1. Vercel 프로젝트 연결 및 GitHub 통합 2. 환경별 배포 설정 (프로덕션, 스테이징) 3. 환경 변수 Vercel 대시보드에서 설정 4. PR 생성 시 미리보기 배포 자동 생성 5. 빌드 최적화 설정 6. 도메인 연결 및 SSL 인증서 설정 7. 배포 후 알림 설정",
"testStrategy": "자동 배포가 성공적으로 이루어지는지 확인, PR 미리보기 배포 동작 확인, 환경별로 올바른 환경 변수가 적용되는지 검증",
"priority": "low",
"dependencies": [
4
],
"status": "done",
"subtasks": []
},
{
"id": 10,
"title": "모니터링 시스템 구축 및 번들 최적화",
"description": "Sentry를 사용한 에러 모니터링을 설정하고 웹팩 번들 분석을 통해 번들 크기를 최적화합니다.",
"details": "1. Sentry 설치 및 설정 (에러 모니터링, 성능 추적) 2. Webpack Bundle Analyzer를 사용한 번들 분석 3. 불필요한 의존성 제거 (74개 dependencies 정리) 4. 코드 스플리팅 적용으로 초기 로딩 최적화 5. Tree shaking 최적화 6. 사용자 행동 분석을 위한 기본 이벤트 트래킹 7. 성능 지표 대시보드 구성",
"testStrategy": "Sentry에서 에러가 올바르게 수집되는지 확인, 번들 크기 30% 감소 달성 확인, 앱 로딩 속도 개선 측정",
"priority": "low",
"dependencies": [
8,
9
],
"status": "done",
"subtasks": []
}
],
"metadata": {
"version": "1.0.0",
"created": "2025-01-11",
"lastModified": "2025-01-11",
"project": "젤리의 적자탈출 개선 프로젝트"
},
"master": {
"tasks": [
{
"id": 1,
"title": "TypeScript 설정 강화 및 타입 안전성 확보",
"description": "tsconfig.json의 strict 모드를 점진적으로 활성화하고 기존 any 타입 사용을 제거하여 타입 안전성을 확보합니다.",
"details": "1. tsconfig.json에서 strict: true, noImplicitAny: true, strictNullChecks: true 활성화 2. 기존 코드에서 any 타입 사용 부분 찾아서 적절한 타입으로 변경 3. 타입 에러 발생 시 단계적으로 수정 4. 컴포넌트 props와 state에 대한 인터페이스 정의 5. API 응답 데이터에 대한 타입 정의 추가",
"testStrategy": "TypeScript 컴파일러 오류 0개 달성, tsc --noEmit 명령어로 타입 검사 통과 확인, IDE에서 타입 추론이 정확히 작동하는지 검증",
"priority": "high",
"dependencies": [],
"status": "done",
"subtasks": []
},
{
"id": 2,
"title": "코드 품질 개선 및 린팅 설정",
"description": "console.log 제거, 빌드 오류 수정, ESLint/Prettier 설정을 통해 코드 품질을 개선합니다.",
"details": "1. 프로젝트 전체에서 console.log 81개 제거 (production에서는 삭제, development에서는 logger 라이브러리 사용) 2. SupabaseToAppwriteMigration import 오류 수정 3. ESLint 규칙 강화 (@typescript-eslint/recommended, react-hooks/recommended 추가) 4. Prettier 설정 추가 (.prettierrc, .prettierignore 파일 생성) 5. pre-commit hook 설정으로 자동 포맷팅",
"testStrategy": "ESLint 오류 0개, Prettier 포맷팅 자동 적용 확인, 빌드 성공 확인, 불필요한 console.log가 production 빌드에 포함되지 않는지 검증",
"priority": "high",
"dependencies": [
1
],
"status": "pending",
"subtasks": []
},
{
"id": 3,
"title": "환경 변수 보안 강화 및 관리 개선",
"description": "API 키의 클라이언트 노출 문제를 해결하고 환경 변수 관리를 개선합니다.",
"details": "1. 클라이언트에 노출되지 말아야 할 API 키들을 서버 사이드로 이동 2. .env.example 파일 생성으로 필요한 환경 변수 문서화 3. VITE_로 시작하는 환경 변수만 클라이언트에 노출되도록 정리 4. 민감한 API 키는 서버리스 함수나 백엔드에서만 사용 5. 환경별 설정 파일 분리 (.env.local, .env.production)",
"testStrategy": "빌드된 클라이언트 코드에서 민감한 API 키가 노출되지 않는지 확인, 환경 변수가 올바르게 로드되는지 각 환경에서 테스트",
"priority": "high",
"dependencies": [],
"status": "pending",
"subtasks": []
},
{
"id": 4,
"title": "CI/CD 파이프라인 구축",
"description": "GitHub Actions를 사용하여 자동 빌드, 테스트, ESLint 검사를 수행하는 워크플로우를 설정합니다.",
"details": "1. .github/workflows/ci.yml 파일 생성 2. Node.js 환경 설정 및 의존성 설치 3. TypeScript 빌드 및 타입 검사 4. ESLint 및 Prettier 검사 자동화 5. 테스트 실행 (나중에 추가될 테스트들) 6. 빌드 아티팩트 생성 및 저장 7. PR에서 자동 검사 실행",
"testStrategy": "GitHub Actions 워크플로우가 성공적으로 실행되는지 확인, PR 생성 시 자동 검사가 동작하는지 검증, 빌드 실패 시 적절한 에러 메시지 출력 확인",
"priority": "medium",
"dependencies": [
2
],
"status": "pending",
"subtasks": []
},
{
"id": 5,
"title": "상태 관리를 Context API에서 Zustand로 마이그레이션",
"description": "기존 Context API 기반 상태 관리를 Zustand로 전환하여 보일러플레이트 코드를 줄이고 성능을 향상시킵니다.",
"details": "1. Zustand 설치 및 기본 설정 2. 기존 Context 구조 분석 및 Zustand store 설계 3. 인증 상태 관리 store 생성 (auth store) 4. 앱 전체 상태 관리 store 생성 (app store) 5. 기존 useContext 호출을 zustand store 사용으로 변경 6. TypeScript 타입 정의 추가 7. DevTools 연동 설정",
"testStrategy": "상태 변경이 예상대로 동작하는지 확인, 컴포넌트 리렌더링 횟수 감소 확인, 개발자 도구에서 상태 추적 가능 확인",
"priority": "medium",
"dependencies": [
1
],
"status": "pending",
"subtasks": []
},
{
"id": 6,
"title": "TanStack Query를 사용한 데이터 페칭 개선",
"description": "TanStack Query를 도입하여 자동 캐싱, 동기화, 오프라인 지원을 구현합니다.",
"details": "1. @tanstack/react-query 설치 및 QueryClient 설정 2. API 호출 함수들을 React Query hooks로 전환 3. 자동 캐싱 전략 설정 (staleTime, cacheTime) 4. 낙관적 업데이트 구현 (optimistic updates) 5. 오프라인 상태에서의 데이터 처리 6. 백그라운드 refetch 설정 7. 에러 처리 및 재시도 로직 구현",
"testStrategy": "데이터 캐싱이 올바르게 동작하는지 확인, 오프라인 상태에서 캐시된 데이터 접근 가능 확인, 낙관적 업데이트 시나리오 테스트",
"priority": "medium",
"dependencies": [
5
],
"status": "pending",
"subtasks": []
},
{
"id": 7,
"title": "테스트 환경 설정 및 핵심 로직 테스트 작성",
"description": "Vitest와 React Testing Library를 설정하고 핵심 비즈니스 로직과 주요 사용자 플로우에 대한 테스트를 작성합니다.",
"details": "1. Vitest 및 React Testing Library 설치 및 설정 2. 테스트 환경 설정 파일 생성 (vitest.config.ts) 3. 핵심 비즈니스 로직 단위 테스트 작성 4. 주요 컴포넌트 렌더링 테스트 5. 사용자 인터랙션 테스트 (로그인, 데이터 입력 등) 6. API 모킹 설정 7. 테스트 커버리지 80% 목표 달성",
"testStrategy": "모든 테스트가 통과하는지 확인, 테스트 커버리지 리포트 생성, CI/CD 파이프라인에서 테스트 자동 실행 확인",
"priority": "medium",
"dependencies": [
4
],
"status": "pending",
"subtasks": []
},
{
"id": 8,
"title": "React 성능 최적화 구현",
"description": "React.memo, useMemo, useCallback을 적용하고 불필요한 리렌더링을 방지하여 앱 성능을 향상시킵니다.",
"details": "1. React DevTools Profiler를 사용한 성능 분석 2. 자주 리렌더링되는 컴포넌트에 React.memo 적용 3. 계산 비용이 높은 로직에 useMemo 적용 4. 콜백 함수에 useCallback 적용 5. 세션 체크 주기를 5초에서 30초로 조정 6. 컴포넌트 레이지 로딩 구현 (React.lazy, Suspense) 7. 이미지 최적화 및 지연 로딩",
"testStrategy": "React DevTools에서 리렌더링 횟수 감소 확인, 앱 로딩 속도 2배 향상 측정, 메모리 사용량 최적화 확인",
"priority": "medium",
"dependencies": [
6
],
"status": "pending",
"subtasks": []
},
{
"id": 9,
"title": "Vercel 자동 배포 설정",
"description": "Vercel을 사용하여 자동 배포 환경을 구축하고 환경별 배포와 PR 미리보기를 설정합니다.",
"details": "1. Vercel 프로젝트 연결 및 GitHub 통합 2. 환경별 배포 설정 (프로덕션, 스테이징) 3. 환경 변수 Vercel 대시보드에서 설정 4. PR 생성 시 미리보기 배포 자동 생성 5. 빌드 최적화 설정 6. 도메인 연결 및 SSL 인증서 설정 7. 배포 후 알림 설정",
"testStrategy": "자동 배포가 성공적으로 이루어지는지 확인, PR 미리보기 배포 동작 확인, 환경별로 올바른 환경 변수가 적용되는지 검증",
"priority": "low",
"dependencies": [
4
],
"status": "pending",
"subtasks": []
},
{
"id": 10,
"title": "모니터링 시스템 구축 및 번들 최적화",
"description": "Sentry를 사용한 에러 모니터링을 설정하고 웹팩 번들 분석을 통해 번들 크기를 최적화합니다.",
"details": "1. Sentry 설치 및 설정 (에러 모니터링, 성능 추적) 2. Webpack Bundle Analyzer를 사용한 번들 분석 3. 불필요한 의존성 제거 (74개 dependencies 정리) 4. 코드 스플리팅 적용으로 초기 로딩 최적화 5. Tree shaking 최적화 6. 사용자 행동 분석을 위한 기본 이벤트 트래킹 7. 성능 지표 대시보드 구성",
"testStrategy": "Sentry에서 에러가 올바르게 수집되는지 확인, 번들 크기 30% 감소 달성 확인, 앱 로딩 속도 개선 측정",
"priority": "low",
"dependencies": [
8,
9
],
"status": "pending",
"subtasks": []
}
],
"metadata": {
"created": "2025-07-11T21:00:35.577Z",
"updated": "2025-07-12T02:22:34.383Z",
"description": "Tasks for master context"
}
}
}