From e8fee5842a211fa9a81bc35b391f19c40dcae0ec Mon Sep 17 00:00:00 2001 From: manNomi Date: Thu, 22 Jan 2026 01:01:14 +0900 Subject: [PATCH 1/3] chore: clean up unused files and fix Vercel config MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove --scope option from Vercel link command (for personal account) - Remove VERCEL_ORG_ID env variable (not needed for personal account) - Delete test trigger files (test-trigger.txt, test-trigger-2.md, test-weekly-trigger.md) - Delete completed PRD docs (api-migration, eslint-prettier-migration, husky-ci-workflow) - Rename 클로드.md to CLAUDE.md Co-Authored-By: Claude Opus 4.5 --- .github/workflows/build.yml | 3 +- .github/workflows/release.yml | 3 +- ...4\353\241\234\353\223\234.md" => CLAUDE.md | 0 docs/api-migration-prd.md | 328 --------- docs/eslint-prettier-migration-prd.md | 285 -------- docs/husky-ci-workflow-prd.md | 630 ------------------ test-trigger-2.md | 1 - test-trigger.txt | 1 - test-weekly-trigger.md | 1 - 9 files changed, 2 insertions(+), 1250 deletions(-) rename "\355\201\264\353\241\234\353\223\234.md" => CLAUDE.md (100%) delete mode 100644 docs/api-migration-prd.md delete mode 100644 docs/eslint-prettier-migration-prd.md delete mode 100644 docs/husky-ci-workflow-prd.md delete mode 100644 test-trigger-2.md delete mode 100644 test-trigger.txt delete mode 100644 test-weekly-trigger.md diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index e513be09..85c9004c 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,7 +3,6 @@ permissions: contents: write env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_ENV: preview @@ -31,7 +30,7 @@ jobs: run: npm install --global vercel@latest - name: Link Vercel Project - run: vercel link --yes --scope=${{ secrets.VERCEL_ORG_ID }} --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} + run: vercel link --yes --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} - name: Pull Vercel Environment Information run: vercel pull --yes --environment=${{ env.VERCEL_ENV }} --token=${{ secrets.VERCEL_TOKEN }} diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e08e7a0d..ec030d8c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,7 +4,6 @@ permissions: contents: write env: - VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_ENV: production @@ -46,7 +45,7 @@ jobs: run: npm install --global vercel@latest - name: Link Vercel Project - run: vercel link --yes --scope=${{ secrets.VERCEL_ORG_ID }} --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} + run: vercel link --yes --project=${{ secrets.VERCEL_PROJECT_ID }} --token=${{ secrets.VERCEL_TOKEN }} - name: Pull Vercel Environment Information run: vercel pull --yes --environment=${{ env.VERCEL_ENV }} --token=${{ secrets.VERCEL_TOKEN }} diff --git "a/\355\201\264\353\241\234\353\223\234.md" b/CLAUDE.md similarity index 100% rename from "\355\201\264\353\241\234\353\223\234.md" rename to CLAUDE.md diff --git a/docs/api-migration-prd.md b/docs/api-migration-prd.md deleted file mode 100644 index e6c9d375..00000000 --- a/docs/api-migration-prd.md +++ /dev/null @@ -1,328 +0,0 @@ -# API 마이그레이션 PRD - -> `src/api` → `src/apis` 완전 마이그레이션 ✅ **완료** - ---- - -## 1. 개요 - -### 1.1 목표 - -`src/api` 폴더를 완전히 제거하고 `src/apis` 폴더로 통합하여 API 레이어를 단일화한다. - -### 1.2 현황 - -| 폴더 | 상태 | 파일 수 | 설명 | -| ---------- | ----------- | ------- | ---------------------------- | -| `src/api` | ✅ 삭제됨 | 0개 | 완전 제거 완료 | -| `src/apis` | ✅ 통합완료 | 70+개 | Bruno 기반 자동생성 + 커스텀 | - ---- - -## 2. 마이그레이션 대상 - -### 2.1 도메인별 현황 - -| # | 도메인 | api 파일 | apis 존재 | 상태 | 비고 | -| --- | ------------ | -------- | --------- | ------- | ----------------------- | -| 1 | auth | 8 | ✅ | ✅ 완료 | | -| 2 | community | 9 | ✅ | ✅ 완료 | postList SSR 추가 | -| 3 | mentor | 7 | ✅ | ✅ 완료 | mentee/mentors 통합 | -| 4 | mentee | 4 | ✅ | ✅ 완료 | mentor 폴더로 통합 | -| 5 | mentors | 3 | ✅ | ✅ 완료 | mentor 폴더로 통합 | -| 6 | chat | 5 | ✅ | ✅ 완료 | | -| 7 | news | 7 | ✅ | ✅ 완료 | optimistic updates 적용 | -| 8 | score | 5 | ✅ | ✅ 완료 | Scores 폴더로 통합 | -| 9 | my | 4 | ✅ | ✅ 완료 | MyPage 폴더로 통합 | -| 10 | applications | 4 | ✅ | ✅ 완료 | | -| 11 | boards | 3 | ✅ | ✅ 완료 | community로 통합 | -| 12 | file | 1 | ✅ | ✅ 완료 | image-upload로 통합 | -| 13 | reports | 1 | ✅ | ✅ 완료 | | - -**총계**: 63개 파일 → 0개 (완전 제거) ✅ - -### 2.2 상세 파일 목록 - -#### auth (8개) - -``` -src/api/auth/ -├── server/ -│ └── postReissueToken.ts # 서버사이드 유지 필요 -├── client/ -│ ├── usePostKakaoAuth.ts -│ ├── usePostAppleAuth.ts -│ ├── usePostEmailAuth.ts -│ ├── usePostSignUp.ts -│ ├── usePostEmailSignUp.ts -│ ├── usePostLogout.ts -│ └── useDeleteUserAccount.ts -└── useLogin.ts -``` - -#### community (9개) - -``` -src/api/community/client/ -├── queryKey.ts -├── useGetPostDetail.ts -├── useCreatePost.ts -├── useUpdatePost.ts -├── useDeletePost.ts -├── useCreateComment.ts -├── useDeleteComment.ts -├── usePostLike.ts -└── useDeleteLike.ts -``` - -#### mentor (7개) - -``` -src/api/mentor/client/ -├── queryKey.ts -├── useGetMentorMyProfile.ts -├── usePutMyMentorProfile.ts -├── usePostMentorApplication.ts -├── useGetMentoringList.ts -├── useGetMentoringUncheckedCount.ts -├── usePatchMentorCheckMentorings.ts -└── usePatchApprovalStatus.ts -``` - -#### mentee (4개) - -``` -src/api/mentee/client/ -├── queryKey.ts -├── useGetApplyMentoringList.ts -├── usePostApplyMentoring.ts -└── usePatchMenteeCheckMentorings.ts -``` - -#### mentors (3개) - -``` -src/api/mentors/client/ -├── queryKey.ts -├── useGetMentorList.ts -└── useGetMentorDetail.ts -``` - -#### chat (5개) - -``` -src/api/chat/clients/ -├── queryKey.ts -├── useGetChatRooms.ts -├── useGetChatHistories.ts -├── useGetPartnerInfo.ts -└── usePutChatRead.ts -``` - -#### news (7개) - -``` -src/api/news/client/ -├── queryKey.ts -├── useGetArticleList.ts -├── usePostAddArticle.ts -├── usePutModifyArticle.ts -├── useDeleteArticle.ts -├── usePostArticleLike.ts -└── useDeleteArticleLike.ts -``` - -#### score (5개) - -``` -src/api/score/client/ -├── queryKey.ts -├── useGetMyGpaScore.ts -├── usePostGpaScore.ts -├── useGetMyLanguageTestScore.ts -└── usePostLanguageTestScore.ts -``` - -#### my (4개) - -``` -src/api/my/client/ -├── queryKey.ts -├── useGetMyInfo.ts -├── usePatchMyInfo.ts -└── usePatchMyPassword.ts -``` - -#### applications (4개) - -``` -src/api/applications/client/ -├── queryKeys.ts -├── useGetApplicationsList.ts -├── usePostSubmitApplication.ts -└── useGetCompetitorsApplicationList.ts -``` - -#### boards (3개) - -``` -src/api/boards/ -├── clients/ -│ ├── QueryKeys.ts -│ └── useGetPostList.ts -└── server/ - └── getPostList.ts -``` - -#### file (1개) - -``` -src/api/file/client/ -└── useUploadProfileImagePublic.ts -``` - -#### reports (1개) - -``` -src/api/reports/client/ -└── usePostReport.ts -``` - ---- - -## 3. 마이그레이션 규칙 - -### 3.1 네이밍 컨벤션 - -| 항목 | Before (api) | After (apis) | -| -------- | ------------------------ | ------------------------- | -| Query 훅 | `useGetXxx.ts` | `useGetXxx.ts` (동일) | -| Mutation | `usePostXxx.ts` | `usePostXxx.ts` (동일) | -| QueryKey | `queryKey.ts` (도메인별) | `queryKeys.ts` (중앙집중) | -| API 함수 | 훅 내부 정의 | `api.ts` 에서 export | -| Import | `@/api/{domain}/client/` | `@/apis/{domain}/` | - -### 3.2 QueryKey 통합 - -**Before** (각 도메인별 분산): - -```typescript -// src/api/community/client/queryKey.ts -export enum QueryKeys { - postDetail = "postDetail", - postList = "postList", -} -``` - -**After** (중앙 집중): - -```typescript -// src/apis/queryKeys.ts -export const QueryKeys = { - community: { - postDetail: "community.postDetail", - postList: "community.postList", - }, - // ... -}; -``` - -### 3.3 비즈니스 로직 보존 - -마이그레이션 시 다음 로직은 **반드시** 보존: - -- [ ] `router.push()` / `router.replace()` 리다이렉트 -- [ ] `toast.success()` / `toast.error()` 알림 -- [ ] `useAuthStore` 상태 관리 -- [ ] `queryClient.invalidateQueries()` 캐시 무효화 -- [ ] `onSuccess` / `onError` 콜백 로직 - ---- - -## 4. 작업 체크리스트 - -### 4.1 도메인별 체크리스트 템플릿 - -```markdown -#### [도메인명] 마이그레이션 - -- [ ] api.ts URL/메서드 확인 및 수정 -- [ ] 훅 마이그레이션 (비즈니스 로직 보존) -- [ ] QueryKey 통합 -- [ ] 컴포넌트 import 경로 변경 -- [ ] 서버사이드 API 처리 (해당시) -- [ ] TypeScript 에러 확인 -- [ ] 기능 테스트 -- [ ] 레거시 파일 삭제 -``` - -### 4.2 전체 진행 상황 - -| 도메인 | 분석 | 마이그레이션 | 테스트 | 삭제 | 완료 | -| ------------ | ---- | ------------ | ------ | ---- | ---- | -| auth | ✅ | ✅ | ✅ | ✅ | ✅ | -| community | ✅ | ✅ | ✅ | ✅ | ✅ | -| mentor | ✅ | ✅ | ✅ | ✅ | ✅ | -| mentee | ✅ | ✅ | ✅ | ✅ | ✅ | -| mentors | ✅ | ✅ | ✅ | ✅ | ✅ | -| chat | ✅ | ✅ | ✅ | ✅ | ✅ | -| news | ✅ | ✅ | ✅ | ✅ | ✅ | -| score | ✅ | ✅ | ✅ | ✅ | ✅ | -| my | ✅ | ✅ | ✅ | ✅ | ✅ | -| applications | ✅ | ✅ | ✅ | ✅ | ✅ | -| boards | ✅ | ✅ | ✅ | ✅ | ✅ | -| file | ✅ | ✅ | ✅ | ✅ | ✅ | -| reports | ✅ | ✅ | ✅ | ✅ | ✅ | - -**범례**: ⬜ 대기 | 🔄 진행중 | ✅ 완료 - ---- - -## 5. 우선순위 - -### 5.1 권장 순서 - -1. **auth** - 인증 로직, 가장 중요 -2. **my** - 내 정보, auth와 연관 -3. **community** - 커뮤니티 기능 -4. **mentor/mentee/mentors** - 멘토링 기능 (함께 진행) -5. **chat** - 채팅 기능 -6. **news** - 뉴스/아티클 -7. **score** - 성적 관리 -8. **applications** - 지원 관리 -9. **boards** - 게시판 -10. **file** - 파일 업로드 -11. **reports** - 신고 기능 - -### 5.2 의존성 주의사항 - -- `auth/server/postReissueToken.ts` → axios interceptor에서 사용 -- `mentor/mentee` → QueryKey 공유 가능성 확인 -- `boards/community` → 유사 기능, 통합 검토 - ---- - -## 6. 완료 조건 - -- [x] `src/api` 폴더 완전 삭제 -- [x] 모든 import가 `@/apis/` 경로 사용 -- [ ] TypeScript 에러 0개 (일부 타입 추론 이슈 남음) -- [ ] ESLint 에러 0개 -- [x] 빌드 성공 -- [x] 모든 기능 정상 동작 - ---- - -## 7. 커밋 컨벤션 - -``` -refactor: migrate {domain} from api to apis - -- Migrate {N} hooks to apis/{domain} -- Update component imports -- Remove legacy api/{domain} folder -``` - ---- - -**최종 수정일**: 2025-12-28 diff --git a/docs/eslint-prettier-migration-prd.md b/docs/eslint-prettier-migration-prd.md deleted file mode 100644 index 2b812ecc..00000000 --- a/docs/eslint-prettier-migration-prd.md +++ /dev/null @@ -1,285 +0,0 @@ -# ESLint & Prettier 마이그레이션 PRD - -## 1. 개요 - -### 1.1 목적 - -현재 프로젝트의 ESLint와 Prettier 설정을 개선하고, 개발 워크플로우에 자동 린팅 및 포맷팅 기능을 추가하여 코드 품질과 일관성을 향상시킵니다. - -### 1.2 배경 - -- 현재 `.eslintrc.json` 파일에 주석이 포함되어 있어 JSON 파싱 오류 가능성 -- `npm run lint` 명령어만 존재하며 자동 수정 기능 없음 -- 린트 자동 수정 및 포맷팅을 위한 명령어 부재 -- 개발자 경험(DX) 개선 필요 - -## 2. 현재 상황 분석 - -### 2.1 현재 설정 - -- **ESLint**: `8.56.0` 사용, `.eslintrc.json` 형식 -- **Prettier**: `.prettierrc.json` 설정 파일 존재 -- **스크립트**: `npm run lint` (체크만 수행) -- **통합**: `eslint-config-prettier`로 충돌 방지 설정됨 - -### 2.2 문제점 - -1. `.eslintrc.json`에 주석이 포함되어 있어 유효하지 않은 JSON 형식 -2. 자동 수정 명령어 부재 (`--fix` 옵션 미사용) -3. Prettier 포맷팅 명령어 부재 -4. 개발 중 자동 포맷팅/린팅 워크플로우 없음 - -## 3. 목표 - -### 3.1 주요 목표 - -1. ESLint 설정을 `.eslintrc.js`로 마이그레이션하여 주석 지원 및 동적 구성 가능 -2. 자동 수정 및 포맷팅 명령어 추가 -3. 개발 워크플로우에 자동 린팅/포맷팅 통합 -4. CI/CD 파이프라인과의 일관성 유지 - -### 3.2 성공 지표 - -- 모든 린트 오류 자동 수정 가능 -- 일관된 코드 포맷팅 적용 -- 개발자 생산성 향상 (수동 수정 시간 감소) -- 코드 리뷰 시 스타일 관련 논의 감소 - -## 4. 요구사항 - -### 4.1 기능 요구사항 - -#### FR1: ESLint 설정 마이그레이션 - -- `.eslintrc.json` → `.eslintrc.js` 변환 -- 기존 설정 유지 (규칙, 플러그인, 확장) -- 주석 지원으로 설정 문서화 개선 - -#### FR2: 자동 수정 명령어 추가 - -- `npm run lint:fix`: ESLint 자동 수정 -- `npm run format`: Prettier 포맷팅 -- `npm run format:check`: Prettier 포맷팅 체크 (CI용) - -#### FR3: 통합 명령어 - -- `npm run lint:all`: 린트 체크 + 자동 수정 + 포맷팅 체크 -- `npm run fix:all`: 린트 자동 수정 + 포맷팅 적용 - -#### FR4: 개발 워크플로우 통합 - -- VS Code 설정 파일 추가 (선택사항) -- Git hooks 통합 (이미 Husky 설정됨) - -### 4.2 비기능 요구사항 - -#### NFR1: 호환성 - -- 기존 ESLint 규칙과 100% 호환 -- 기존 Prettier 설정 유지 -- Next.js 14.2와 호환 - -#### NFR2: 성능 - -- 린트 실행 시간: 기존과 동일 수준 유지 -- 포맷팅 실행 시간: 전체 프로젝트 기준 10초 이내 - -#### NFR3: 유지보수성 - -- 설정 파일에 주석으로 문서화 -- 명확한 명령어 네이밍 -- README에 사용법 문서화 - -## 5. 마이그레이션 계획 - -### 5.1 단계별 계획 - -#### Phase 1: 설정 파일 마이그레이션 (1일) - -1. `.eslintrc.json` → `.eslintrc.js` 변환 - - 주석을 유효한 JavaScript 주석으로 변환 - - 기존 설정 100% 유지 - - 테스트: `npm run lint` 실행하여 동일한 결과 확인 - -2. Prettier 설정 검증 - - `.prettierrc.json` 설정 확인 - - ESLint와의 충돌 확인 - -#### Phase 2: 명령어 추가 (0.5일) - -1. `package.json` 스크립트 추가 - - ```json - { - "lint": "next lint", - "lint:fix": "next lint --fix", - "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "lint:all": "npm run lint && npm run format:check", - "fix:all": "npm run lint:fix && npm run format" - } - ``` - -2. `.prettierignore` 파일 생성 (필요시) - -#### Phase 3: 테스트 및 검증 (0.5일) - -1. 명령어 테스트 - - 각 명령어 실행 및 결과 확인 - - CI 워크플로우와의 호환성 확인 - -2. 문서화 - - `README.md` 또는 `docs/`에 사용법 추가 - - 팀 공유 - -#### Phase 4: 통합 및 배포 (0.5일) - -1. Git hooks 업데이트 (선택사항) - - pre-commit에 `lint:fix` 추가 검토 - - 현재는 commitlint만 사용 중이므로 선택사항 - -2. CI/CD 확인 - - 기존 CI 워크플로우 동작 확인 - - 필요시 `format:check` 추가 - -### 5.2 파일 구조 - -``` -프로젝트 루트/ -├── .eslintrc.js (신규, .eslintrc.json 대체) -├── .eslintrc.json (삭제) -├── .prettierrc.json (기존 유지) -├── .prettierignore (신규, 필요시) -├── package.json (스크립트 추가) -└── docs/ - └── eslint-prettier-migration-prd.md (이 문서) -``` - -## 6. 구현 상세 - -### 6.1 ESLint 설정 변환 - -#### 현재 (.eslintrc.json) - -```json -{ - "root": true, - "parser": "@typescript-eslint/parser", - ... -} -``` - -#### 변환 후 (.eslintrc.js) - -```javascript -module.exports = { - root: true, - parser: "@typescript-eslint/parser", - // 주석 지원 가능 - ... -}; -``` - -### 6.2 package.json 스크립트 - -```json -{ - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "lint:fix": "next lint --fix", - "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "lint:all": "npm run lint && npm run format:check", - "fix:all": "npm run lint:fix && npm run format" - } -} -``` - -### 6.3 .prettierignore (필요시) - -``` -node_modules -.next -out -build -dist -*.min.js -package-lock.json -``` - -## 7. 위험 요소 및 대응 방안 - -### 7.1 위험 요소 - -| 위험 | 영향도 | 대응 방안 | -| ------------------------------------ | ------ | ------------------------------------------- | -| 기존 설정과의 불일치 | 높음 | Phase 1에서 철저한 테스트, 기존 결과와 비교 | -| 대량 파일 변경으로 인한 PR 크기 증가 | 중간 | 단계별 커밋, 마이그레이션과 포맷팅 분리 | -| 팀원의 워크플로우 변경 필요 | 낮음 | 명확한 문서화 및 공유 | - -### 7.2 롤백 계획 - -- `.eslintrc.json` 백업 유지 -- Git을 통한 이전 버전 복구 가능 -- 단계별 커밋으로 선택적 롤백 가능 - -## 8. 검증 방법 - -### 8.1 기능 검증 - -- [ ] `.eslintrc.js`로 동일한 린트 결과 확인 -- [ ] `npm run lint:fix`로 자동 수정 동작 확인 -- [ ] `npm run format`으로 포맷팅 동작 확인 -- [ ] CI 워크플로우 정상 동작 확인 - -### 8.2 회귀 테스트 - -- [ ] 기존 린트 경고/에러 개수 동일 -- [ ] 빌드 성공 확인 -- [ ] 개발 서버 정상 동작 확인 - -## 9. 일정 - -| 단계 | 작업 | 예상 소요 시간 | 담당 | -| -------- | ---------------------- | -------------- | ------ | -| Phase 1 | 설정 파일 마이그레이션 | 1일 | 개발자 | -| Phase 2 | 명령어 추가 | 0.5일 | 개발자 | -| Phase 3 | 테스트 및 검증 | 0.5일 | 개발자 | -| Phase 4 | 통합 및 배포 | 0.5일 | 개발자 | -| **총계** | | **2.5일** | | - -## 10. 후속 작업 - -### 10.1 단기 (1주 이내) - -- 팀원 대상 사용법 공유 -- VS Code 설정 파일 추가 (선택사항) -- Git hooks에 자동 포맷팅 추가 검토 - -### 10.2 중기 (1개월 이내) - -- ESLint 9.0+ Flat Config 마이그레이션 검토 -- 추가 린트 규칙 도입 검토 -- 코드 리뷰 가이드라인 업데이트 - -## 11. 참고 자료 - -- [ESLint Configuration Files](https://eslint.org/docs/latest/use/configure/configuration-files) -- [Prettier Documentation](https://prettier.io/docs/en/) -- [Next.js ESLint Configuration](https://nextjs.org/docs/app/building-your-application/configuring/eslint) -- [eslint-config-prettier](https://github.com/prettier/eslint-config-prettier) - -## 12. 승인 - -- [ ] 기술 리더 승인 -- [ ] 팀 리뷰 완료 -- [ ] 일정 확정 - ---- - -**작성일**: 2025-01-XX -**작성자**: 개발팀 -**버전**: 1.0 diff --git a/docs/husky-ci-workflow-prd.md b/docs/husky-ci-workflow-prd.md deleted file mode 100644 index bd492c50..00000000 --- a/docs/husky-ci-workflow-prd.md +++ /dev/null @@ -1,630 +0,0 @@ -# Husky & CI 워크플로우 완성 PRD - -## 1. 개요 - -### 1.1 목적 - -Git hooks(Husky)와 CI/CD 파이프라인을 완성하여 코드 품질을 자동으로 검증하고, 일관된 커밋 메시지 형식을 보장하며, 안정적인 배포 프로세스를 구축합니다. - -### 1.2 배경 - -- 현재 Husky와 commitlint가 기본적으로 설정되어 있으나 최적화 필요 -- CI 워크플로우가 기본적으로 구성되어 있으나 개선 여지 존재 -- 개발 워크플로우 전반에 걸친 자동화 부족 -- 코드 품질 검증 프로세스의 일관성 부족 - -### 1.3 범위 - -- Git Hooks (Husky) 설정 완성 -- Commitlint 커밋 메시지 검증 강화 -- CI/CD 파이프라인 최적화 -- 개발자 워크플로우 문서화 - -## 2. 현재 상황 분석 - -### 2.1 현재 설정 상태 - -#### Husky - -- ✅ 설치 및 초기화 완료 (`husky@9.1.7`) -- ✅ `prepare` 스크립트 설정됨 -- ✅ `.husky/commit-msg` 훅 존재 (commitlint 실행) -- ✅ `.husky/pre-commit` 훅 존재 (현재 주석만 있음) - -#### Commitlint - -- ✅ 설치 완료 (`@commitlint/cli@20.2.0`, `@commitlint/config-conventional@20.2.0`) -- ✅ `commitlint.config.js` 설정 파일 존재 -- ✅ 커밋 메시지 타입 제한: `feat`, `fix`, `refactor`, `style`, `test`, `docs`, `chore` - -#### CI/CD - -- ✅ `.github/workflows/ci.yml` 존재 -- ✅ `lint`와 `build` job이 병렬 실행 -- ✅ Node.js 22.x 사용 -- ✅ npm 캐싱 적용 - -### 2.2 문제점 및 개선 사항 - -1. **Git Hooks** - - `pre-commit` 훅이 비어있음 (활용 가능) - - `pre-push` 훅이 없음 (선택적 추가 가능) - -2. **CI/CD** - - Prettier 포맷팅 체크 없음 - - 커밋 메시지 검증이 CI에서 수행되지 않음 - - 테스트 단계 없음 (향후 확장 가능) - -3. **문서화** - - 개발 워크플로우 가이드 부족 - - 커밋 메시지 규칙 상세 설명 필요 - -4. **자동화** - - 자동 수정/포맷팅 명령어 부재 - - 개발 중 실시간 검증 부족 - -## 3. 목표 - -### 3.1 주요 목표 - -1. **Git Hooks 완성** - - `pre-commit`: 빠른 검증 (선택적) - - `commit-msg`: 커밋 메시지 검증 (현재 동작 중) - - `pre-push`: 선택적 검증 (CI와 중복 방지) - -2. **CI/CD 파이프라인 강화** - - 린트, 타입 체크, 빌드 검증 - - Prettier 포맷팅 체크 추가 - - 커밋 메시지 검증 (PR 제목) - - 병렬 실행으로 성능 최적화 - -3. **개발자 경험 개선** - - 명확한 워크플로우 가이드 - - 자동 수정 명령어 제공 - - 빠른 피드백 루프 - -4. **코드 품질 보장** - - 일관된 커밋 메시지 형식 - - 자동 코드 품질 검증 - - 배포 전 자동 검증 - -### 3.2 성공 지표 - -- 커밋 메시지 규칙 준수율 100% -- CI 실패율 감소 (잘못된 코드 배포 방지) -- 개발자 생산성 향상 (수동 검증 시간 감소) -- 코드 리뷰 시간 단축 (스타일 이슈 감소) - -## 4. 요구사항 - -### 4.1 기능 요구사항 - -#### FR1: Git Hooks 완성 - -**FR1.1: pre-commit 훅 (선택적)** - -- 빠른 검증 수행 (선택적) -- 현재는 비활성화 상태 유지 가능 -- 향후 필요시 활성화 가능하도록 구조화 - -**FR1.2: commit-msg 훅 (필수)** - -- commitlint를 통한 커밋 메시지 검증 -- 규칙 위반 시 커밋 차단 -- 명확한 에러 메시지 제공 - -**FR1.3: pre-push 훅 (선택적)** - -- CI에서 이미 검증하므로 기본적으로 비활성화 -- 필요시 로컬 빌드 체크만 수행 (선택적) - -#### FR2: CI/CD 파이프라인 강화 - -**FR2.1: Lint Job** - -- ESLint 실행 -- TypeScript 타입 체크 -- Prettier 포맷팅 체크 (신규) - -**FR2.2: Build Job** - -- Next.js 빌드 검증 -- 프로덕션 환경 변수 검증 - -**FR2.3: 커밋 메시지 검증 (PR)** - -- PR 제목을 커밋 메시지 규칙으로 검증 -- PR 머지 커밋 메시지 검증 - -**FR2.4: 병렬 실행** - -- `lint`와 `build` job 병렬 실행 -- 캐싱을 통한 실행 시간 최적화 - -#### FR3: package.json 스크립트 추가 - -**FR3.1: 린트 관련** - -- `lint`: 린트 체크 -- `lint:fix`: 린트 자동 수정 - -**FR3.2: 포맷팅 관련** - -- `format`: Prettier 포맷팅 적용 -- `format:check`: Prettier 포맷팅 체크 (CI용) - -**FR3.3: 통합 명령어** - -- `lint:all`: 린트 + 포맷팅 체크 -- `fix:all`: 린트 자동 수정 + 포맷팅 적용 - -#### FR4: 문서화 - -**FR4.1: 개발 워크플로우 가이드** - -- 커밋 메시지 작성 가이드 -- Git hooks 동작 방식 설명 -- CI/CD 프로세스 설명 - -**FR4.2: 문제 해결 가이드** - -- 일반적인 오류 및 해결 방법 -- 커밋 메시지 수정 방법 -- CI 실패 시 대응 방법 - -### 4.2 비기능 요구사항 - -#### NFR1: 성능 - -- Git hooks 실행 시간: 3초 이내 -- CI 실행 시간: 10분 이내 (병렬 실행) -- 개발자 워크플로우 방해 최소화 - -#### NFR2: 호환성 - -- Node.js 22.x 호환 -- Next.js 14.2 호환 -- 기존 워크플로우와의 호환성 유지 - -#### NFR3: 유지보수성 - -- 설정 파일 명확한 문서화 -- 변경 이력 추적 가능 -- 팀원 쉽게 이해 가능한 구조 - -#### NFR4: 확장성 - -- 향후 테스트 추가 용이 -- 추가 검증 규칙 추가 용이 -- 다른 브랜치 전략 적용 용이 - -## 5. 구현 계획 - -### 5.1 Phase 1: Git Hooks 완성 (0.5일) - -#### 1.1 pre-commit 훅 정리 - -- 현재 주석만 있는 상태 유지 또는 제거 -- 필요시 빠른 검증 로직 추가 가능하도록 구조화 - -#### 1.2 commit-msg 훅 검증 - -- 현재 설정이 올바르게 동작하는지 확인 -- 에러 메시지 개선 (필요시) - -#### 1.3 commitlint 설정 최적화 - -- `commitlint.config.js` 검토 및 개선 -- 커밋 메시지 예시 추가 - -### 5.2 Phase 2: CI/CD 파이프라인 강화 (1일) - -#### 2.1 Prettier 체크 추가 - -- `lint` job에 `format:check` 단계 추가 -- 실패 시 명확한 에러 메시지 - -#### 2.2 PR 커밋 메시지 검증 - -- PR 제목 검증 job 추가 (선택적) -- PR 머지 커밋 메시지 검증 - -#### 2.3 CI 워크플로우 최적화 - -- 캐싱 전략 개선 -- 병렬 실행 최적화 -- 실패 시 빠른 피드백 - -#### 2.4 환경 변수 검증 - -- 필수 환경 변수 체크 (선택적) -- 빌드 시 환경 변수 검증 - -### 5.3 Phase 3: package.json 스크립트 추가 (0.5일) - -#### 3.1 린트 스크립트 - -```json -{ - "lint": "next lint", - "lint:fix": "next lint --fix" -} -``` - -#### 3.2 포맷팅 스크립트 - -```json -{ - "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"" -} -``` - -#### 3.3 통합 스크립트 - -```json -{ - "lint:all": "npm run lint && npm run format:check", - "fix:all": "npm run lint:fix && npm run format" -} -``` - -### 5.4 Phase 4: 문서화 (1일) - -#### 4.1 개발 워크플로우 가이드 작성 - -- `docs/development-workflow.md` 생성 -- 커밋 메시지 작성 가이드 -- Git hooks 동작 설명 -- CI/CD 프로세스 설명 - -#### 4.2 문제 해결 가이드 작성 - -- 일반적인 오류 및 해결 방법 -- 커밋 메시지 수정 방법 -- CI 실패 대응 방법 - -#### 4.3 README 업데이트 - -- 새로운 스크립트 사용법 추가 -- 워크플로우 링크 추가 - -### 5.5 Phase 5: 테스트 및 검증 (0.5일) - -#### 5.1 Git Hooks 테스트 - -- 커밋 메시지 검증 테스트 -- 잘못된 커밋 메시지 차단 확인 -- 올바른 커밋 메시지 통과 확인 - -#### 5.2 CI 워크플로우 테스트 - -- 각 job 정상 동작 확인 -- 병렬 실행 확인 -- 실패 시나리오 테스트 - -#### 5.3 스크립트 테스트 - -- 모든 스크립트 실행 확인 -- 예상 결과 확인 - -## 6. 구현 상세 - -### 6.1 Git Hooks 구조 - -``` -.husky/ -├── _/ # Husky 내부 파일 -├── commit-msg # 커밋 메시지 검증 -│ └── npx --no -- commitlint --edit ${1} -└── pre-commit # pre-commit 검증 (선택적) - └── # 현재 비활성화 또는 빠른 검증 -``` - -### 6.2 CI 워크플로우 구조 - -```yaml -name: CI - -on: - push: - branches: [main, develop] - pull_request: - branches: [main, develop] - -jobs: - lint: - - ESLint 체크 - - TypeScript 타입 체크 - - Prettier 포맷팅 체크 - - build: - - Next.js 빌드 - - 환경 변수 검증 -``` - -### 6.3 commitlint 설정 - -```javascript -module.exports = { - extends: ["@commitlint/config-conventional"], - rules: { - "type-enum": [2, "always", ["feat", "fix", "refactor", "style", "test", "docs", "chore"]], - }, -}; -``` - -### 6.4 package.json 스크립트 - -```json -{ - "scripts": { - "dev": "next dev", - "build": "next build", - "start": "next start", - "lint": "next lint", - "lint:fix": "next lint --fix", - "format": "prettier --write \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "format:check": "prettier --check \"**/*.{ts,tsx,js,jsx,json,md,yml,yaml}\"", - "lint:all": "npm run lint && npm run format:check", - "fix:all": "npm run lint:fix && npm run format", - "prepare": "husky" - } -} -``` - -## 7. 파일 구조 - -``` -프로젝트 루트/ -├── .husky/ -│ ├── commit-msg (커밋 메시지 검증) -│ └── pre-commit (선택적) -├── .github/ -│ └── workflows/ -│ └── ci.yml (CI 워크플로우) -├── commitlint.config.js (커밋 메시지 규칙) -├── package.json (스크립트 추가) -└── docs/ - ├── development-workflow.md (신규) - └── troubleshooting.md (신규) -``` - -## 8. 위험 요소 및 대응 방안 - -### 8.1 위험 요소 - -| 위험 | 영향도 | 대응 방안 | -| --------------------------------- | ------ | ------------------------------------------ | -| Git hooks가 너무 느려서 개발 방해 | 중간 | 최소한의 검증만 수행, CI에서 상세 검증 | -| CI 실행 시간 증가 | 낮음 | 병렬 실행 및 캐싱으로 최적화 | -| 커밋 메시지 규칙이 너무 엄격함 | 낮음 | 규칙을 점진적으로 강화, 명확한 가이드 제공 | -| 팀원의 워크플로우 변경 필요 | 낮음 | 명확한 문서화 및 온보딩 | -| 환경 변수 누락으로 인한 빌드 실패 | 중간 | 필수 환경 변수 명시 및 검증 | - -### 8.2 롤백 계획 - -- Git hooks: `.husky/` 디렉토리 백업 또는 Git으로 복구 -- CI 워크플로우: 이전 버전으로 롤백 가능 -- package.json: 스크립트 제거로 롤백 가능 - -## 9. 검증 방법 - -### 9.1 기능 검증 - -- [ ] 커밋 메시지 검증 동작 확인 - - [ ] 올바른 형식: 통과 확인 - - [ ] 잘못된 형식: 차단 확인 -- [ ] CI 워크플로우 정상 동작 - - [ ] lint job 성공 - - [ ] build job 성공 - - [ ] 병렬 실행 확인 -- [ ] 스크립트 정상 동작 - - [ ] `npm run lint:fix` 동작 확인 - - [ ] `npm run format` 동작 확인 - - [ ] `npm run fix:all` 동작 확인 - -### 9.2 회귀 테스트 - -- [ ] 기존 커밋 메시지 형식 호환성 확인 -- [ ] 기존 CI 워크플로우 동작 확인 -- [ ] 빌드 성공 확인 -- [ ] 개발 서버 정상 동작 확인 - -### 9.3 성능 테스트 - -- [ ] Git hooks 실행 시간 측정 (3초 이내) -- [ ] CI 실행 시간 측정 (10분 이내) -- [ ] 캐싱 효과 확인 - -## 10. 일정 - -| 단계 | 작업 | 예상 소요 시간 | 담당 | -| -------- | --------------------- | -------------- | ------ | -| Phase 1 | Git Hooks 완성 | 0.5일 | 개발자 | -| Phase 2 | CI/CD 파이프라인 강화 | 1일 | 개발자 | -| Phase 3 | package.json 스크립트 | 0.5일 | 개발자 | -| Phase 4 | 문서화 | 1일 | 개발자 | -| Phase 5 | 테스트 및 검증 | 0.5일 | 개발자 | -| **총계** | | **3.5일** | | - -## 11. 커밋 메시지 규칙 상세 - -### 11.1 형식 - -``` -: - - -``` - -### 11.2 타입 설명 - -- **feat**: 새로운 기능 추가, 기존 기능을 요구사항에 맞게 수정 -- **fix**: 버그 수정 -- **refactor**: 기능 변화 없이 코드 리팩터링 (변수명 변경 등) -- **style**: 코드 스타일, 포맷팅 수정 -- **test**: 테스트 코드 추가/수정 -- **docs**: 문서(주석) 수정 -- **chore**: 패키지 매니저 수정, 기타 수정 (.gitignore 등) - -### 11.3 예시 - -**올바른 예시:** - -``` -feat: 로그인 페이지 인풋 필드 디자인 업데이트 - -- border 색상을 border-k-100으로 명시 -- 고정 높이 제거하여 padding과 line-height로 자동 계산 -``` - -``` -fix: 린트 에러 수정 - -- any 타입을 unknown으로 변경 -- 중복된 className prop 제거 -``` - -**잘못된 예시:** - -``` -update login page # 타입 없음 -feat login # subject가 너무 짧음 -FEAT: Login page update # 대문자 타입 -``` - -## 12. 개발 워크플로우 - -### 12.1 일반적인 워크플로우 - -1. **코드 작성** - - ```bash - # 개발 중 - npm run dev - ``` - -2. **코드 수정 후 검증** - - ```bash - # 자동 수정 및 포맷팅 - npm run fix:all - - # 또는 개별 실행 - npm run lint:fix - npm run format - ``` - -3. **커밋** - - ```bash - git add . - git commit -m "feat: 새로운 기능 추가" - # commitlint가 자동으로 검증 - ``` - -4. **푸시 및 PR** - ```bash - git push origin feature-branch - # CI가 자동으로 실행 - ``` - -### 12.2 커밋 메시지 수정 - -커밋 메시지를 수정해야 하는 경우: - -```bash -# 가장 최근 커밋 메시지 수정 -git commit --amend -m "fix: 올바른 커밋 메시지" - -# 이미 푸시한 경우 -git push --force-with-lease origin branch-name -``` - -## 13. 문제 해결 - -### 13.1 커밋 메시지 검증 실패 - -**문제**: 커밋 메시지가 규칙에 맞지 않아 커밋 실패 - -**해결**: - -1. 커밋 메시지 형식 확인: `: ` -2. 허용된 타입 확인: `feat`, `fix`, `refactor`, `style`, `test`, `docs`, `chore` -3. 올바른 형식으로 다시 커밋 - -### 13.2 CI 실패 - -**문제**: CI에서 린트 또는 빌드 실패 - -**해결**: - -1. 로컬에서 동일한 명령어 실행 - ```bash - npm run lint:all - npm run build - ``` -2. 오류 수정 -3. 자동 수정 시도 - ```bash - npm run fix:all - ``` -4. 수정 후 다시 푸시 - -### 13.3 Git hooks가 동작하지 않음 - -**문제**: 커밋 시 commitlint가 실행되지 않음 - -**해결**: - -1. Husky 설치 확인 - ```bash - npm run prepare - ``` -2. `.husky/commit-msg` 파일 확인 -3. 실행 권한 확인 - ```bash - chmod +x .husky/commit-msg - ``` - -## 14. 후속 작업 - -### 14.1 단기 (1주 이내) - -- 팀원 대상 워크플로우 공유 -- 커밋 메시지 가이드 공유 -- CI/CD 프로세스 설명 - -### 14.2 중기 (1개월 이내) - -- 테스트 코드 추가 및 CI 통합 -- 추가 린트 규칙 도입 검토 -- 코드 커버리지 측정 도입 검토 -- Pre-commit 훅 활성화 검토 (필요시) - -### 14.3 장기 (3개월 이내) - -- ESLint 9.0+ Flat Config 마이그레이션 -- 자동화된 코드 리뷰 도구 도입 검토 -- 성능 모니터링 통합 - -## 15. 참고 자료 - -- [Husky Documentation](https://typicode.github.io/husky/) -- [Commitlint Documentation](https://commitlint.js.org/) -- [GitHub Actions Documentation](https://docs.github.com/en/actions) -- [Conventional Commits](https://www.conventionalcommits.org/) -- [Next.js ESLint Configuration](https://nextjs.org/docs/app/building-your-application/configuring/eslint) - -## 16. 승인 - -- [ ] 기술 리더 승인 -- [ ] 팀 리뷰 완료 -- [ ] 일정 확정 - ---- - -**작성일**: 2025-01-XX -**작성자**: 개발팀 -**버전**: 1.0 diff --git a/test-trigger-2.md b/test-trigger-2.md deleted file mode 100644 index a7407d54..00000000 --- a/test-trigger-2.md +++ /dev/null @@ -1 +0,0 @@ -# Test commit for weekly summary workflow diff --git a/test-trigger.txt b/test-trigger.txt deleted file mode 100644 index 5c33b151..00000000 --- a/test-trigger.txt +++ /dev/null @@ -1 +0,0 @@ -trigger diff --git a/test-weekly-trigger.md b/test-weekly-trigger.md deleted file mode 100644 index c50fd849..00000000 --- a/test-weekly-trigger.md +++ /dev/null @@ -1 +0,0 @@ -# Weekly summary workflow test From 22edf6568c726a0955857e3e38bd95f0ef128e66 Mon Sep 17 00:00:00 2001 From: manNomi Date: Thu, 22 Jan 2026 01:29:45 +0900 Subject: [PATCH 2/3] chore: remove lint from pre-push hook Lint check is already run in CI workflow, so it's redundant in pre-push. Keep only typecheck for faster local push experience. Co-Authored-By: Claude Opus 4.5 --- .husky/pre-push | 3 --- 1 file changed, 3 deletions(-) diff --git a/.husky/pre-push b/.husky/pre-push index b3d792ae..9b6691c6 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,6 +1,3 @@ -echo "🔍 Running lint check before push..." -npm run lint - echo "🔍 Running type check before push..." npm run typecheck From 09f7bcf2d70c84b536648e4eaa4871bc87d4b16b Mon Sep 17 00:00:00 2001 From: manNomi Date: Thu, 22 Jan 2026 01:31:25 +0900 Subject: [PATCH 3/3] fix: restore VERCEL_ORG_ID env variable Personal Vercel account (Hobby Plan) still requires VERCEL_ORG_ID as environment variable. Only removed --scope from vercel link command. Co-Authored-By: Claude Opus 4.5 --- .github/workflows/build.yml | 1 + .github/workflows/release.yml | 1 + 2 files changed, 2 insertions(+) diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 85c9004c..29662768 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -3,6 +3,7 @@ permissions: contents: write env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_ENV: preview diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index ec030d8c..4368fccd 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -4,6 +4,7 @@ permissions: contents: write env: + VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }} VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }} VERCEL_ENV: production