์ด ๋ฌธ์๋ ๋ด ์ฝ์ํธ๋ฅผ ๋ถํํด(๋ด์ฝ๋ถ) ํ๋ก ํธ์๋ ๋ ํฌ์งํ ๋ฆฌ์ ๊ธฐ์ฌํ ๋ ๋ฐ๋ผ์ผ ํ๋ ํ์ ๊ท์น๊ณผ ์ฝ๋ ์ปจ๋ฒค์ ์ ์ ๋ฆฌํ ๊ฐ์ด๋์ ๋๋ค.
- Issue ์์ฑ (์์ ๋ฒ์์ ๋ชฉ์ ์ ์)
- ๋ธ๋์น ์์ฑ ํ ์์
- PR ์์ฑ ๋ฐ ๋ฆฌ๋ทฐ ์์ฒญ
- ์ฝ๋ ๋ฆฌ๋ทฐ ๋ฐ PR ์น์ธ (2์ธ ์ด์)
dev์ ๋ณํฉ ํ ์์ ๋ธ๋์น ์ญ์
| ๊ตฌ๋ถ | ๋ธ๋์น๋ช |
|---|---|
| ๋ฐฐํฌ์ฉ | main |
| ๊ฐ๋ฐ์ฉ | dev |
| ๊ธฐ๋ฅ ๊ฐ๋ฐ์ฉ | feat |
| ๋ฒ๊ทธ ์์ ์ฉ | fix |
| ๋ฆฌํฉํ ๋ง์ฉ | refactor |
| ์คํ์ผ์ฉ | style |
| ํ๊ฒฝ ์ค์ ์ฉ | chore |
| ๋ฌธ์์ฉ | docs |
ํ์: type/#์ด์๋ฒํธ/์์
๋ช
type:feat/fix/refactor/style/chore/docs#์ด์๋ฒํธ: GitHub Issue ๋ฒํธ (์๋ค๋ฉด ๋จผ์ ์ด์ ์์ฑ)์์ ๋ช:kebab-case๋ก ์์ฑ
์์:
feat/#23/concert-detail
ํ์: [#์ด์๋ฒํธ] ํ์
(ํ์ด์ง) : ์์
์์ฝ
[#23] feat(login) : ๋ก๊ทธ์ธ ํ์ด์ง ์์ฑ
PR ์ ์ฒดํฌ๋ฆฌ์คํธ
- PR ์ ๋ชฉ์ด ๊ท์น์ ๋ง๊ฒ ์์ฑ๋์๋์ง ํ์ธ
- ์์ ๋ด์ฉ์ด ๋ช ํํ๊ฒ ์ค๋ช ๋์๋์ง ํ์ธ
- console.log, debugger ์ ๊ฑฐ
- npm run lint ํต๊ณผ ํ์ธ
- UX์ ์ํฅ์ ์ฃผ๋ ๋ณ๊ฒฝ์ด๋ผ๋ฉด ์คํฌ๋ฆฐ์ท/์์ ์ฒจ๋ถ
- ํ์ ์ @garlatonic(๋ฐ์์) ๋ฉ์ ํ์ฌ Copilot ์ฝ๋ ๋ฆฌ๋ทฐ ์์ฒญ
ํ์: ํ์
(ํ์ด์ง) : ์์
์์ฝ
feat(login) : ๋ก๊ทธ์ธ ํ์ด์ง ์์ฑ
| ํ์ | ์ค๋ช |
|---|---|
feat |
์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ |
fix |
๋ฒ๊ทธ ์์ |
perf |
์ฑ๋ฅ ๊ฐ์ |
refactor |
์ฝ๋ ๋ฆฌํฉํ ๋ง (๊ธฐ๋ฅ ๋ณ๊ฒฝ ์์) |
style |
UI/์คํ์ผ, ํฌ๋งทํ ๋ณ๊ฒฝ (๋ก์ง ๋ณํ X) |
chore |
๋น๋, ์ค์ , ๊ธฐํ ์ก๋ฌด |
docs |
๋ฌธ์ ์์ |
test |
ํ ์คํธ ์ฝ๋ ์์ฑ/์์ |
ํญ ํฌ๊ธฐ: 2
์ปด๋ง: es5 ๊ธฐ์ค
๋ฌธ์์ด: ๋๋ธ ์ฟผํฐ `"`
์ธ๋ฏธ์ฝ๋ก `;` ์ฌ์ฉ
PR ์ `console.log` / `debugger` ์ ๊ฑฐ
- ์ปดํฌ๋ํธ๋ ํจ์ ์ ์ธ์ ์ฌ์ฉ
export default function Component() {};- ์ด๋ฒคํธ ํธ๋ค๋ฌ:
handle~(์:handleDelete) - ์ฝ๋ฐฑ Props:
on~(์:onEdit,onChange,onSubmit) - ๊ณตํต ์ปดํฌ๋ํธ์ Props์๋ ๊ฐ๋ฅํ ๊ธฐ๋ณธ๊ฐ์ ์ง์ ํด ์ฌ์ฉ์ฑ์ ๋์
- ํ์
ํ์ผ:
.tsํ์ฅ์ ์ฌ์ฉ (์:/types/{ํ์ด์ง๋ช }/index.ts) type์ฐ์ ์ฌ์ฉ (interface๋ ํ์ํ ๊ฒฝ์ฐ๋ง)- ํ์
๋ถ๋ถ๋ช
์:
- ์ฐ์
unknown์ผ๋ก ์ ์ธ - TODO ์ฃผ์์ผ๋ก ๋ณด์ ํ์์ฑ์ ๋ช ์
- ์ฐ์
null๋ณด๋คundefined์ ํธ- ์ต์
๋ ์ฒด์ด๋
?., ๋ ๋ณํฉ ์ฐ์ฐ์??์ ๊ทน ์ฌ์ฉ
- ์ต์
๋ ์ฒด์ด๋
- ํด๋์ค ๋ณํฉ ์
twMerge์ฌ์ฉ - ์ธ๋ถ์์ ์ ๋ฌ๋ฐ์
className์ ํญ์ ๋ง์ง๋ง์ ๋ณํฉํ์ฌ ์ค๋ฒ๋ผ์ด๋ ๊ฐ๋ฅํ๊ฒ ์ ์ง - ๊ณต์ฉ ์คํ์ผ/๋ณ์๋
global.css์ ์ ์
| ๊ตฌ๋ถ | ์ปจ๋ฒค์ |
|---|---|
| ํ์ผ/ํด๋ | kebab-case |
| ์ปดํฌ๋ํธ | PascalCase |
| Hook | useName |
| Boolean | isName, hasName, canName, shouldName |
| Type/Interface | Name, NameProps, NameType |
| Zustand Store | useNameStore |
"use client"๋ ๊ฐ๋ฅํ ํ ํ์ ์ปดํฌ๋ํธ์๋ง ์ ์ธ- ๋ฐ์ดํฐ ํจ์นญ์ ๊ฐ๋ฅํ ํ Server Component์์ ์ํ ํ Client Component๋ก ์ ๋ฌ
<Suspense>๋ฅผ ์ ๊ทน ์ฌ์ฉํด ๊ตฌ์ญ๋ณ ๋ก๋ฉ ์ํ๋ฅผ ๋ช ํํ๊ฒ ๋ถ๋ฆฌ- ์ด๋ฏธ์ง์ ๋งํฌ๋ Next.js ์ปดํฌ๋ํธ(
<Image>,<Link>) ์ฌ์ฉ (import ๊ฒฝ๋ก ์ฃผ์) page.tsx๋ ๊ธฐ๋ณธ์ ์ผ๋ก Server Component๋ก ์ ์ง, ํด๋ผ์ด์ธํธ ๊ธฐ๋ฅ์ด ํ์ํ ๊ฒฝ์ฐ ํ์ ์ปดํฌ๋ํธ์์"use client"์ ์ธ