Frontend Wiki - 100-hours-a-week/KTB4-4th-wiki GitHub Wiki
| ๊ธฐ๊ฐ | ์ฃผ์ ์์ |
|---|---|
| MM/DD ~ | ์์ ๋ด์ฉ |
๋ค์ด๋ฐ ๊ท์น
| ํญ๋ชฉ | ์ผ์ด์ค ๊ท์น |
|---|---|
| ์ปดํฌ๋ํธ๋ช | PascalCase |
| ์ปดํฌ๋ํธ ํ์ผ๋ช | PascalCase |
| Hook | camelCase, use ์ ๋์ฌ ์ฌ์ฉ |
| Hook ํ์ผ๋ช | camelCase |
| ๋ณ์๋ช | camelCase |
| Boolean ๋ณ์ | camelCase, is / has / can ์ ๋์ฌ ์ฌ์ฉ |
| ํจ์๋ช | camelCase, ๋์ฌ + ๋ช ์ฌ ํํ |
| ์ด๋ฒคํธ ํธ๋ค๋ฌ | camelCase, ๋ด๋ถ handle~ / Props on~
|
| ์ ์ญ ์์ | UPPER_SNAKE_CASE |
| Type / Interface | PascalCase |
| ํด๋๋ช | kebab-case, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณต์ํ ์ฌ์ฉ |
| ์ผ๋ฐ ํ์ผ๋ช | camelCase |
| ์๋ฒ ์๋ต ๋ฐ์ดํฐ | API ๋ช ์ธ ๊ธฐ์ค ์ฌ์ฉ |
๋ค์ด๋ฐ ์์
| ํญ๋ชฉ | ์์ |
|---|---|
| Component |
LoginButton, UserProfileCard
|
| Component File | LoginButton.tsx |
| Hook |
useUserProfile, useOutsideClick
|
| Hook File | useUserProfile.ts |
| Variable |
loginButton, users, posts
|
| Boolean |
isLoading, hasError, canSubmit
|
| Function |
getUserName, updatePosts
|
| Event Handler |
handleClick, onClick
|
| Constant | MAX_RETRY_COUNT |
| Type / Interface |
LoginButtonProps, UserResponse
|
| Directory |
components, image-files
|
| File |
formatDate.ts, logo.png
|
Prettier
| ์ต์ | ๊ฐ | ์ค๋ช |
|---|---|---|
| trailingComma | ||
| tabWidth | ||
| semi | ||
| singleQuote | ||
| bracketSpacing | ||
| jsxBracketSameLine | ||
| printWidth |
ESLint
| ํญ๋ชฉ | ์ค์ ๋ด์ฉ |
|---|---|
| ๊ธฐ๋ณธ ์ค์ | |
| TypeScript ์ค์ | |
| ๊ธ๋ก๋ฒ ํ๊ฒฝ | |
| ๋ฌด์ ํด๋ | |
| ํ๋ฌ๊ทธ์ธ | |
| ์ปค์คํ ๋ฃฐ |
๊ธฐ๋ณธ ๋ธ๋์น
| ๋ธ๋์น | ์ค๋ช |
|---|---|
| main | ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ ์งํ๋ ๊ธฐ๋ณธ ๋ธ๋์น |
| dev | ๋ณ๋๋ก ์ฌ์ฉํ์ง ์์ผ๋ฉฐ ๋ชจ๋ ์์
๋ธ๋์น๋ main์ ๊ธฐ์ค์ผ๋ก ์์ฑ |
-
main๋ธ๋์น๋ ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ๋ฅผ ์ ์ง -
main๋ธ๋์น ์ง์ Push ๊ธ์ง - ๋ชจ๋ ์์ ์ GitHub Issue๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์์ ๋ธ๋์น ์์ฑ
- ์์
์๋ฃ ํ
main๋ธ๋์น๋ก Pull Request ์์ฑ - Pull Request Review ๋ฐ Status Check ํต๊ณผ ํ Merge
- Merge๊ฐ ์๋ฃ๋ ์์ ๋ธ๋์น๋ ์ฆ์ ์ญ์
Branch Protection Rules
- Require a pull request before merging
- Require 1์ธ ์ด์ Approve
- Backend ๊ฐ๋ฐ์ 1์ธ ์ด์ ํ์ธ
- Require status checks to pass
- lint
- build
- ์ง์ Push ๊ธ์ง
- Force Push ๊ธ์ง
์์ ๋ธ๋์น ๋ค์ด๋ฐ ๊ท์น
ํ์:
{message}/{issue-number}-{์์
๋ช
}
| ๋ธ๋์น ํ์ | ๋ค์ด๋ฐ ํจํด |
|---|---|
| ๊ธฐ๋ฅ ์ถ๊ฐ | feature/{issue-number}-{์์
๋ช
} |
| ๋ฒ๊ทธ ์์ | fix/{issue-number}-{์์
๋ช
} |
| ๋ฆฌํฉํ ๋ง | refactor/{issue-number}-{์์
๋ช
} |
| ๋ฌธ์ ์์ | docs/{issue-number}-{์์
๋ช
} |
| ํ ์คํธ | test/{issue-number}-{์์
๋ช
} |
| CI/CD | ci-cd/{issue-number}-{์์
๋ช
} |
์์:
feature/3-login-pagefix/12-login-errorrefactor/21-user-querydocs/25-update-wikitest/31-login-formci-cd/40-deploy-workflow
๋ธ๋์น ๋ค์ด๋ฐ ๊ท์น
- ์์
๋ช
์
kebab-case์ฌ์ฉ - ๊ด๋ จ GitHub Issue ๋ฒํธ ํ์ ํฌํจ
- GitHub Issue ์์ฑ ํ ์์ ๋ธ๋์น ์์ฑ
ํ์:
{message}: {๊ธฐ๋ฅ}
์์:
feat: ๋ก๊ทธ์ธ ๊ตฌํ
| ์ปค๋ฐ ์ ํ | ์ค๋ช |
|---|---|
| feat | ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๋๋ ๊ธฐ์กด ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ |
| fix | ๊ธฐ๋ฅ์ ๋ํ ๋ฒ๊ทธ ์์ |
| docs | ๋ฌธ์ ๋ฐ ์ฃผ์ ์์ |
| style | ์ฝ๋ ์คํ์ผ ๋ฐ ํฌ๋งทํ
์์ . UI ์คํ์ผ๋ง ๋ณ๊ฒฝ์ feat ์ฌ์ฉ |
| refact | ๊ธฐ๋ฅ ๋ณํ๊ฐ ์๋ ์ฝ๋ ๋ฆฌํฉํฐ๋ง |
| test | ํ ์คํธ ์ฝ๋ ์ถ๊ฐ ๋ฐ ์์ |
| chore | ํจํค์ง ๋งค๋์ ์์ ๋ฐ ๊ธฐํ ์ค์ ๋ณ๊ฒฝ (.gitignore ๋ฑ) |
| ci/cd | ๋น๋, ๋ฐฐํฌ ๋ฐ Workflow ์ค์ ์์ |
| design | UI ๊ด๋ จ ์์
์ ๊ธฐ๋ณธ์ ์ผ๋ก feat๋ฅผ ์ฌ์ฉ |
| comment | ์ฃผ์ ๊ด๋ จ ์์
์ ๊ธฐ๋ณธ์ ์ผ๋ก docs๋ฅผ ์ฌ์ฉ |
| rename | ํ์ผยทํด๋ ์ด๋ฆ ๋ณ๊ฒฝ์ ์์ ๋ชฉ์ ์ ๋ง๋ Message ์ฌ์ฉ |
| remove | ์ฝ๋ยทํ์ผ ์ ๊ฑฐ๋ ์์ ๋ชฉ์ ์ ๋ง๋ Message ์ฌ์ฉ |
| BREAKING CHANGE | ๊ธฐ์กด ๊ธฐ๋ฅ๊ณผ ํธํ๋์ง ์๋ ๋ณ๊ฒฝ ๋ฐ์ ์ ๋ช ์ |
| HOTFIX | ๋ฐฐํฌ ํ๊ฒฝ์์ ๊ธด๊ธ ์์ ์ด ํ์ํ ๊ฒฝ์ฐ ์ฌ์ฉ |
Emoji Convention
| Emoji | Message | Description |
|---|---|---|
| โจ | feat | ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ, ๊ธฐ์กด ๊ธฐ๋ฅ์ ์๊ตฌ์ฌํญ์ ๋ง๊ฒ ์์ |
| ๐ | fix | ๊ธฐ๋ฅ์ ๋ํ ๋ฒ๊ทธ ์์ |
| ๐ | docs | ๋ฌธ์ ๋ฐ ์ฃผ์ ์์ |
| ๐จ | style | ์ฝ๋ ์คํ์ผ ๋ฐ ํฌ๋งทํ ์์ |
| โป๏ธ | refact | ๊ธฐ๋ฅ ๋ณํ๊ฐ ์๋ ์ฝ๋ ๋ฆฌํฉํฐ๋ง |
| โ | test | ํ ์คํธ ์ฝ๋ ์ถ๊ฐ ๋ฐ ์์ |
| ๐ | chore | ํจํค์ง ๋งค๋์ ์์ ๋ฐ ๊ธฐํ ์ค์ ๋ณ๊ฒฝ |
| ๐ | ci/cd | ๋น๋, ๋ฐฐํฌ ๋ฐ Workflow ์ค์ ์์ |
Issue Title
ํ์:
[{Message}] {์์
๋ช
}
์์:
[Feat] ๋ก๊ทธ์ธ ํ์ด์ง ๊ตฌํ
Issue ์์ฑ ๊ท์น
-
.github/ISSUE_TEMPLATE/์ Issue Template ๊ด๋ฆฌfeature.mdbug.md
- Issue ์ ๋ชฉ์ ์ ํด์ง Convention์ ๋ฐ๋ฆ
-
Assigneesํ์ ์ค์ -
Labelsํ์ ์ค์ -
Projectsํ์ ์ค์ - ์์ ๋จ์๊ฐ ํฐ ๊ฒฝ์ฐ ํ์ ์ฒดํฌ๋ฆฌ์คํธ๋ก ๋ถ๋ฆฌ
Issue Template
### ์์
๋ด์ฉ
- ๊ตฌํํ ๊ธฐ๋ฅ
### ์ฒดํฌ๋ฆฌ์คํธ
- [ ] ์ธ๋ถ ์์
1
- [ ] ์ธ๋ถ ์์
2
### ์ฐธ๊ณ ์๋ฃ
- ๋์์ธ, ๋ฌธ์ ๋งํฌ
์์:
Feature(#3): ๋ก๊ทธ์ธ ํ์ด์ง ๊ตฌํ
PR Title
ํ์:
{Message}(#{issue-number}): {์์
๋ช
}
| ํ๊ทธ | ์๋ฏธ | ์ค๋ช |
|---|---|---|
| refactor | ์ฝ๋ ๊ตฌ์กฐ ๊ฐ์ | ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์ด ์ฝ๋ ๊ตฌ์กฐ ๋ฐ ๊ฐ๋ ์ฑ ๊ฐ์ |
| perf | ์ฑ๋ฅ ๊ฐ์ | ๋ ๋๋ง, ๋คํธ์ํฌ ๋ฑ ์ฑ๋ฅ ๊ด๋ จ ๊ฐ์ |
| remove | ์ฝ๋/ํ์ผ ์ ๊ฑฐ | ๋ถํ์ํ ์ฝ๋ ๋๋ ํ์ผ ์ ๊ฑฐ |
| fix | ๋ฒ๊ทธ ์์ | ๊ธฐ์กด ๊ธฐ๋ฅ์ ์ค๋ฅ ์์ |
| hotfix | ๊ธด๊ธ ์์ | ๋ฐฐํฌ ํ ๊ธด๊ธํ๊ฒ ์์ ํด์ผ ํ๋ ๋ฌธ์ |
| feature | ๊ธฐ๋ฅ ์ถ๊ฐ | ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ ๋๋ UI ๊ธฐ๋ฅ ๊ตฌํ |
| feature | UI/์คํ์ผ ์์ | ์๋น์ค UI ๋ฐ ์คํ์ผ ๊ตฌํยท๋ณ๊ฒฝ |
| revert | ๋ณ๊ฒฝ ์ฌํญ ๋๋๋ฆฌ๊ธฐ | ์ด์ ๋ณ๊ฒฝ ์ฌํญ์ ์๋ ์ํ๋ก ๋ณต์ |
| merge | ๋ธ๋์น ๋ณํฉ | ๋ธ๋์น ๊ฐ ๋ณ๊ฒฝ์ฌํญ ๋ณํฉ |
| docs | ์ฃผ์ ์ถ๊ฐ/์์ | ๋ฌธ์ ๋๋ ์ฃผ์ ๊ด๋ จ ์์ |
| db | DB ๊ด๋ จ ๋ณ๊ฒฝ | ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ด๋ จ๋ ๋ณ๊ฒฝ ์ฌํญ |
PR ์์ฑ ๊ท์น
- ๊ด๋ จ Issue ๋ฒํธ ๋ฐ๋์ ์ฐ๊ฒฐ
- PR ๋ณธ๋ฌธ์
Closes #{issue-number}์์ฑ - Merge ์ ์ฐ๊ฒฐ๋ Issue ์๋ Close
-
Reviewers์ค์ -
Assignees์ค์ -
Projects์ฐ๊ฒฐ -
Labels์ค์ - PR ์ ๋ชฉ์ Message์ Label ํต์ผ
- PR Merge๋
Squash and Merge์ฌ์ฉ - Merge ์๋ฃ ํ ์์ ๋ธ๋์น ์ญ์
Label ์์
Message Label:
featurefixrefactordocstestci/cd
๊ธฐ๋ฅ ์์ญ Label:
calendar๐๏ธgift๐
Pull Request Template
.github/PULL_REQUEST_TEMPLATE.md
### ๊ตฌํ ๋ฐฐ๊ฒฝ
- Closes #3
- ์์
๋๊ธฐ
### ์์
์ฌํญ
- ๊ตฌํ ์ฌํญ
- ์ธ๋ถ ๊ตฌํ ์ฌํญ
### ์ถ๊ฐ ๋
ผ์
- ๊ตฌํ ์ค ๋ฐ์ํ ์ด์
- ์ถ๊ฐ๋ก ํ๊ณ ์ถ์ ๋ง
| ๋ผ์ด๋ธ๋ฌ๋ฆฌ | ์ญํ / ์ค๋ช |
|---|---|
| Next.js | React ๊ธฐ๋ฐ ํ๋ ์์ํฌ. App Router์ SSR์ ๊ธฐ๋ฐ์ผ๋ก ํ์ด์ง ๋ ๋๋ง ๋ฐ ๋ผ์ฐํ ๊ตฌ์ฑ |
| React | ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ฌ์ฉ์ ์ธํฐํ์ด์ค ๊ตฌํ |
| TypeScript | ์ ์ ํ์ ๊ฒ์ฌ๋ฅผ ํตํ ์ปดํฌ๋ํธ, API ๋ฐ ์ํ ํ์ ๊ด๋ฆฌ |
| Tailwind CSS | Utility Class ๊ธฐ๋ฐ ์คํ์ผ๋ง ๋ฐ ๋ฐ์ํ ๋ ์ด์์ ๊ตฌ์ฑ |
| Radix Primitives | ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ Headless UI Primitive ์ ๊ณต |
| TanStack Query | REST API ์๋ฒ ์ํ ์บ์ฑ ๋ฐ ๋๊ธฐํ |
| Zustand | ํ ๋ง์ ์ ์ญ UI ์ํ ๊ด๋ฆฌ |
| React Hook Form | ํผ ์ ๋ ฅ๊ฐ, Validation, Error ๋ฐ Submit ์ํ ๊ด๋ฆฌ |
| Zod | ์ ๋ ฅ๊ฐ ๋ฐ API ์๋ต ๋ฐ์ดํฐ Schema ๊ฒ์ฆ |
| openapi-fetch | OpenAPI ๊ธฐ๋ฐ ํ์ ์์ ํ REST API ์์ฒญ |
@stomp/stompjs |
STOMP over WebSocket ๊ธฐ๋ฐ ์ค์๊ฐ ์ต๋ช ์ฑํ |
| React DayPicker | ๋ฌ๋ ฅ UI ๋ฐ ๋ ์ง ์ ํ |
| Firebase Cloud Messaging | Web Push ์๋ฆผ ์์ ๋ฐ Registration Token ๊ด๋ฆฌ |
| Workbox | PWA Service Worker ๊ตฌ์ฑ ๋ฐ ๊ด๋ฆฌ |
| Lucide React | ๊ณตํต UI ์์ด์ฝ |
| date-fns | ๋ ์ง ๊ณ์ฐ ๋ฐ ๋ณํ |
| MSW | API Mocking |
| Sentry | ํ๋ก ํธ์๋ ๋ฐํ์ ์ค๋ฅ ๋ฐ ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง |
๋ฐฐํฌ ํ๊ฒฝ
| ํญ๋ชฉ | ๊ธฐ์ |
|---|---|
| Framework | Next.js |
| Runtime | Node.js |
| Hosting | AWS Amplify Hosting |
| Repository | GitHub |
| CI/CD | GitHub Actions |
| Package Manager | npm |
๋ฐฐํฌ ์์น
-
main๋ธ๋์น๋ ํญ์ ๋ฐฐํฌ ๊ฐ๋ฅํ ์ํ ์ ์ง -
main์ง์ Push ๊ธ์ง - ๋ชจ๋ ์ฝ๋ ๋ณ๊ฒฝ์ Pull Request๋ฅผ ํตํด ๋ฐ์
- Merge ์ ํ์ Status Check ํต๊ณผ
- lint
- build
- Review ์น์ธ ํ
Squash and Merge์ฌ์ฉ
CI/CD ํ๋ฆ
Issue ์์ฑ
โ ์์
๋ธ๋์น ์์ฑ
โ ๊ฐ๋ฐ ๋ฐ Commit
โ Pull Request ์์ฑ
โ Lint ๊ฒ์ฌ
โ Build ๊ฒ์ฌ
โ Code Review
โ Approve
โ Squash and Merge
โ main ๋ฐ์
โ AWS Amplify ๋ฐฐํฌ
ํ๊ฒฝ ๋ณ์ ๊ด๋ฆฌ
- ํ๊ฒฝ ๋ณ์์ Secret์ Repository์ ์ง์ Commitํ์ง ์์
- GitHub Actions Secrets ์ฌ์ฉ
- AWS Amplify Environment Variables ์ฌ์ฉ
-
.envํ์ผ๊ณผ Secret ๊ฐ์ Git Repository์ Commitํ์ง ์์
| ๋๊ตฌ | ์ญํ | ๋ชฉ์ |
|---|---|---|
| ๋๊ตฌ๋ช | ||
| ๋๊ตฌ | ์ญํ | ๋ชฉ์ |
|---|---|---|
| ๋๊ตฌ๋ช | ||