diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 70d402aa..b47ddf9e 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -36,7 +36,7 @@ jobs: run: pnpm add --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 3d463953..43f8f283 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -51,7 +51,7 @@ jobs: run: pnpm add --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/.husky/pre-push b/.husky/pre-push index 658c160d..eb1f2f3f 100755 --- a/.husky/pre-push +++ b/.husky/pre-push @@ -1,6 +1,3 @@ -echo "๐Ÿ” Running lint check before push..." -pnpm run lint - echo "๐Ÿ” Running type check before push..." pnpm run typecheck 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