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>
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
# 젤리의 적자탈출 프로젝트 개선 계획
|
||||
|
||||
## 목차
|
||||
|
||||
1. [프로젝트 현황 분석](#프로젝트-현황-분석)
|
||||
2. [주요 개선사항](#주요-개선사항)
|
||||
3. [기술 스택 개선 계획](#기술-스택-개선-계획)
|
||||
@@ -12,12 +13,14 @@
|
||||
## 프로젝트 현황 분석
|
||||
|
||||
### 프로젝트 개요
|
||||
|
||||
- **프로젝트명**: 젤리의 적자탈출 (Zellyy Finance)
|
||||
- **목적**: 개인 재무/예산 관리 모바일 앱
|
||||
- **플랫폼**: 웹 + iOS/Android (Capacitor)
|
||||
- **현재 상태**: Supabase → Appwrite 마이그레이션 완료
|
||||
|
||||
### 현재 기술 스택
|
||||
|
||||
```
|
||||
Frontend: React 18 + TypeScript + Vite
|
||||
UI: Tailwind CSS + shadcn/ui (뉴모픽 디자인)
|
||||
@@ -31,6 +34,7 @@ UI: Tailwind CSS + shadcn/ui (뉴모픽 디자인)
|
||||
### 🔴 긴급 개선 필요 (보안/안정성)
|
||||
|
||||
#### 1. TypeScript 설정 강화
|
||||
|
||||
```json
|
||||
// tsconfig.json 수정 필요
|
||||
{
|
||||
@@ -45,27 +49,32 @@ UI: Tailwind CSS + shadcn/ui (뉴모픽 디자인)
|
||||
```
|
||||
|
||||
#### 2. 테스트 코드 추가
|
||||
|
||||
- 현재 테스트 코드 전무
|
||||
- Vitest + React Testing Library 도입 필요
|
||||
- 핵심 비즈니스 로직부터 단위 테스트 작성
|
||||
|
||||
#### 3. 보안 취약점 해결
|
||||
|
||||
- API 키 클라이언트 노출 문제
|
||||
- 환경 변수 관리 개선 필요
|
||||
|
||||
### 🟡 중요 개선사항 (성능/품질)
|
||||
|
||||
#### 4. React 성능 최적화
|
||||
|
||||
- React.memo, useMemo, useCallback 활용 부족
|
||||
- 불필요한 리렌더링 방지 필요
|
||||
- 세션 체크 주기 최적화 (현재 5초 → 30초)
|
||||
|
||||
#### 5. 코드 품질 개선
|
||||
|
||||
- console.log 81개 제거
|
||||
- 빌드 오류 수정
|
||||
- ESLint 규칙 강화
|
||||
|
||||
#### 6. 번들 크기 최적화
|
||||
|
||||
- 74개 dependencies 정리
|
||||
- 사용하지 않는 패키지 제거
|
||||
- 코드 스플리팅 적용
|
||||
@@ -73,6 +82,7 @@ UI: Tailwind CSS + shadcn/ui (뉴모픽 디자인)
|
||||
### 🟢 사용성 개선사항
|
||||
|
||||
#### 7. UX 개선
|
||||
|
||||
- 스켈레톤 UI 활용도 증대
|
||||
- 접근성 개선 (ARIA 라벨, 키보드 네비게이션)
|
||||
- 에러 메시지 사용자 친화적으로 개선
|
||||
@@ -82,25 +92,29 @@ UI: Tailwind CSS + shadcn/ui (뉴모픽 디자인)
|
||||
### 상태 관리: Context API → Zustand
|
||||
|
||||
**현재 (Context API)**
|
||||
|
||||
```typescript
|
||||
const BudgetContext = createContext();
|
||||
// 복잡한 보일러플레이트 코드
|
||||
```
|
||||
|
||||
**개선 후 (Zustand)**
|
||||
|
||||
```typescript
|
||||
const useBudgetStore = create<BudgetState>((set) => ({
|
||||
budgets: [],
|
||||
transactions: [],
|
||||
addTransaction: (transaction) => set((state) => ({
|
||||
transactions: [...state.transactions, transaction]
|
||||
}))
|
||||
addTransaction: (transaction) =>
|
||||
set((state) => ({
|
||||
transactions: [...state.transactions, transaction],
|
||||
})),
|
||||
}));
|
||||
```
|
||||
|
||||
### 데이터 페칭: 수동 → TanStack Query
|
||||
|
||||
**현재**
|
||||
|
||||
```typescript
|
||||
useEffect(() => {
|
||||
fetchTransactions().then(setTransactions);
|
||||
@@ -108,19 +122,22 @@ useEffect(() => {
|
||||
```
|
||||
|
||||
**개선 후**
|
||||
|
||||
```typescript
|
||||
const { data, isLoading, error } = useQuery({
|
||||
queryKey: ['transactions'],
|
||||
queryKey: ["transactions"],
|
||||
queryFn: fetchTransactions,
|
||||
staleTime: 5 * 60 * 1000,
|
||||
});
|
||||
```
|
||||
|
||||
### 차트 라이브러리: Recharts → Chart.js
|
||||
|
||||
- 번들 크기 감소 (300KB → 100KB)
|
||||
- 모바일 성능 향상
|
||||
|
||||
### 추가 도입 필요 도구
|
||||
|
||||
```json
|
||||
{
|
||||
"devDependencies": {
|
||||
@@ -136,6 +153,7 @@ const { data, isLoading, error } = useQuery({
|
||||
## 인증 시스템 개선
|
||||
|
||||
### 현재: Appwrite Auth
|
||||
|
||||
- 모든 인증 로직 직접 구현
|
||||
- 소셜 로그인 구현 복잡
|
||||
- 고급 기능 구현 어려움
|
||||
@@ -143,6 +161,7 @@ const { data, isLoading, error } = useQuery({
|
||||
### 권장: Clerk + Supabase 조합
|
||||
|
||||
#### Clerk (인증 전문)
|
||||
|
||||
```typescript
|
||||
import { useUser, SignIn } from '@clerk/clerk-react';
|
||||
|
||||
@@ -154,18 +173,20 @@ function App() {
|
||||
```
|
||||
|
||||
**장점:**
|
||||
|
||||
- 카카오/네이버 로그인 즉시 사용 가능
|
||||
- 2FA, 생체인증 내장
|
||||
- 10,000명까지 무료
|
||||
- 뛰어난 UX/UI 컴포넌트
|
||||
|
||||
#### Supabase (데이터베이스)
|
||||
|
||||
```typescript
|
||||
// Clerk JWT를 Supabase에 전달
|
||||
const supabase = createClient(url, key, {
|
||||
global: {
|
||||
headers: async () => {
|
||||
const token = await getToken({ template: 'supabase' });
|
||||
const token = await getToken({ template: "supabase" });
|
||||
return { Authorization: `Bearer ${token}` };
|
||||
},
|
||||
},
|
||||
@@ -173,6 +194,7 @@ const supabase = createClient(url, key, {
|
||||
```
|
||||
|
||||
### 마이그레이션 계획
|
||||
|
||||
1. Supabase 프로젝트 생성 및 스키마 설정
|
||||
2. Clerk 통합 및 JWT 템플릿 구성
|
||||
3. 데이터 마이그레이션 (Appwrite → Supabase)
|
||||
@@ -183,6 +205,7 @@ const supabase = createClient(url, key, {
|
||||
### GitHub Actions 워크플로우
|
||||
|
||||
#### 1. 지속적 통합 (CI)
|
||||
|
||||
```yaml
|
||||
# .github/workflows/ci.yml
|
||||
name: CI
|
||||
@@ -200,8 +223,8 @@ jobs:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-node@v3
|
||||
with:
|
||||
node-version: '18'
|
||||
cache: 'npm'
|
||||
node-version: "18"
|
||||
cache: "npm"
|
||||
- run: npm ci
|
||||
- run: npm run lint
|
||||
- run: npx tsc --noEmit
|
||||
@@ -210,6 +233,7 @@ jobs:
|
||||
```
|
||||
|
||||
#### 2. 자동 배포 (CD)
|
||||
|
||||
```yaml
|
||||
# .github/workflows/deploy.yml
|
||||
name: Deploy
|
||||
@@ -226,10 +250,11 @@ jobs:
|
||||
- uses: amondnet/vercel-action@v25
|
||||
with:
|
||||
vercel-token: ${{ secrets.VERCEL_TOKEN }}
|
||||
vercel-args: '--prod'
|
||||
vercel-args: "--prod"
|
||||
```
|
||||
|
||||
### 브랜치 전략
|
||||
|
||||
```
|
||||
main → 프로덕션 (자동 배포)
|
||||
develop → 스테이징 (자동 배포)
|
||||
@@ -237,6 +262,7 @@ feature/* → 기능 개발 (PR 체크만)
|
||||
```
|
||||
|
||||
### 추가 통합
|
||||
|
||||
- SonarCloud: 코드 품질 분석
|
||||
- Codecov: 테스트 커버리지 추적
|
||||
- Sentry: 에러 모니터링
|
||||
@@ -246,6 +272,7 @@ feature/* → 기능 개발 (PR 체크만)
|
||||
### 권장: Task Master AI + Linear 하이브리드
|
||||
|
||||
#### Task Master AI (이미 설정됨)
|
||||
|
||||
```bash
|
||||
# AI 기반 태스크 생성
|
||||
task-master parse-prd .taskmaster/docs/prd.txt --research
|
||||
@@ -258,11 +285,13 @@ task-master set-status --id=1.2 --status=done
|
||||
```
|
||||
|
||||
#### Linear (선택적 - 시각적 관리)
|
||||
|
||||
- 개발자 친화적 UI
|
||||
- GitHub 자동 통합
|
||||
- 무료 티어 충분
|
||||
|
||||
### 워크플로우
|
||||
|
||||
1. Task Master로 PRD 파싱 → 태스크 자동 생성
|
||||
2. Linear로 시각적 관리 (필요시)
|
||||
3. GitHub PR과 자동 연결
|
||||
@@ -271,6 +300,7 @@ task-master set-status --id=1.2 --status=done
|
||||
## 실행 로드맵
|
||||
|
||||
### Phase 1: 즉시 시작 (1주일)
|
||||
|
||||
- [ ] TypeScript strict 모드 점진적 활성화
|
||||
- [ ] console.log 제거 및 빌드 오류 수정
|
||||
- [ ] ESLint + Prettier 설정
|
||||
@@ -278,6 +308,7 @@ task-master set-status --id=1.2 --status=done
|
||||
- [ ] 환경 변수 보안 강화
|
||||
|
||||
### Phase 2: 핵심 개선 (2-3주)
|
||||
|
||||
- [ ] Zustand로 상태 관리 마이그레이션
|
||||
- [ ] TanStack Query 도입
|
||||
- [ ] 핵심 비즈니스 로직 테스트 작성
|
||||
@@ -285,6 +316,7 @@ task-master set-status --id=1.2 --status=done
|
||||
- [ ] Vercel 자동 배포 설정
|
||||
|
||||
### Phase 3: 고급 기능 (1개월)
|
||||
|
||||
- [ ] Clerk 인증 시스템 도입
|
||||
- [ ] Supabase 데이터베이스 마이그레이션
|
||||
- [ ] Chart.js로 차트 라이브러리 교체
|
||||
@@ -292,6 +324,7 @@ task-master set-status --id=1.2 --status=done
|
||||
- [ ] 접근성 개선
|
||||
|
||||
### Phase 4: 최적화 (2개월)
|
||||
|
||||
- [ ] 번들 크기 최적화
|
||||
- [ ] 모바일 빌드 자동화
|
||||
- [ ] 에러 모니터링 (Sentry) 구축
|
||||
@@ -300,16 +333,19 @@ task-master set-status --id=1.2 --status=done
|
||||
## 예상 효과
|
||||
|
||||
### 개발 효율성
|
||||
|
||||
- 코드 품질 향상으로 버그 감소
|
||||
- CI/CD로 배포 시간 90% 단축
|
||||
- 타입 안전성으로 런타임 오류 방지
|
||||
|
||||
### 사용자 경험
|
||||
|
||||
- 성능 개선으로 앱 속도 2배 향상
|
||||
- 카카오/네이버 로그인으로 가입률 증가
|
||||
- 안정성 향상으로 사용자 만족도 개선
|
||||
|
||||
### 유지보수성
|
||||
|
||||
- 테스트 코드로 리팩토링 안전성 확보
|
||||
- 모니터링으로 문제 조기 발견
|
||||
- 문서화로 향후 개발 용이
|
||||
@@ -324,4 +360,4 @@ task-master set-status --id=1.2 --status=done
|
||||
|
||||
---
|
||||
|
||||
*이 문서는 젤리의 적자탈출 프로젝트의 기술적 개선을 위한 종합적인 계획서입니다. 각 단계는 프로젝트 상황에 맞게 조정 가능합니다.*
|
||||
_이 문서는 젤리의 적자탈출 프로젝트의 기술적 개선을 위한 종합적인 계획서입니다. 각 단계는 프로젝트 상황에 맞게 조정 가능합니다._
|
||||
|
||||
Reference in New Issue
Block a user