Team Convention - Seoul-InterViewer/InterViewer GitHub Wiki
To Do
- ๋ชจ๋ PR์ ํ์๋ค๊ณผ ์ฌ์ /์ฌํ ๋ํ๋ฅผ ํตํด ์งํํฉ๋๋ค.
- ํ์๋ค ๊ฐ ์ด๊ฒฌ์ด ๋ฐ์ํ๋ฉด ๋ค์๊ฒฐ๋ก ์งํํฉ๋๋ค.
- ์ง๋ฌธ์ ๋ถ๋ด์ค๋ฌ์ํ์ง ์๊ณ , ์ดํด๊ฐ ๋์ง ์๋ ๋ถ๋ถ์ ์ธ์ ๋ ์ง๋ฌธํฉ๋๋ค.
- ๊ฐ์์ ์์ ์งํ ์ํฉ์ ์ ๊ธฐ์ ์ผ๋ก ๊ณต์ ํด ํ ์ ์ฒด๊ฐ ๋งฅ๋ฝ์ ์ดํดํ ์ ์๋๋ก ํฉ๋๋ค.
- ์ ๊ธฐ์ ์ผ๋ก ์ฝ๋ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ๋, ๋ฆฌ๋ทฐ๋ ์ผ๋ฐฉ์ ์ธ ํผ๋๋ฐฑ๋ณด๋ค โ๋ํโ ์ค์ฌ์ผ๋ก ์ด๋ค์ง๋๋ค.
- ๊ธฐํ, ๋์์ธ, ๊ฐ๋ฐ ๊ฐ์ ๊ฒฝ๊ณ๋ฅผ ์ต์ํํ๊ณ , ์์ด๋์ด๋ ๋๊ตฌ๋ ์ ์ํ ์ ์์ต๋๋ค.
- ๊ฑด๊ฐ ๋ฌธ์ ๋ฑ ๋ถ๋์ดํ ์ํฉ ๋ฐ์ ์ ์ฌ์ ์ ํ์๋ค์๊ฒ ์๋ ค์ฃผ๊ณ ์ํด๋ฅผ ๊ตฌํฉ๋๋ค.
- TASK/FEATURE ISSUE๊ฐ ์ฌ๋ผ์ค๋ฉด ์์ ํ๋๊ฑธ ์ ์ ๋ฉ์ถ๊ณ ISSUE ํด๊ฒฐ๋ถํฐ ํฉ๋๋ค.
Not To Do
- ํ์๋ค๊ณผ ๋ ผ์ ์์ด push๋ merge๋ฅผ ํ์ง ์์ต๋๋ค.
- ์ ํด์ง ์๊ฐ ์ฝ์์ ์งํค๋ฉฐ, ๋ถ๋์ดํ ๊ฒฝ์ฐ์ ์ฌ์ ์ ๊ณต์ ํฉ๋๋ค.
- ๊ฐ์ธ์ ์ธ ๊ฐ์ ์ด ๋ด๊ธด ํผ๋๋ฐฑ์ ์ง์ํ๋ฉฐ, ์ธ์ ๋ ๊ฑด์ค์ ์ธ ๋ฐฉํฅ์ผ๋ก ์๊ฒฌ์ ์ฃผ๊ณ ๋ฐ์ต๋๋ค.
- ๋ค๋ฅธ ํ์์ ์์ ์ ๋ฌด๋จ์ผ๋ก ์์ ํ๊ฑฐ๋ ๋ฎ์ด์ฐ์ง ์๊ณ , ๋ณ๊ฒฝ์ด ํ์ํ ๊ฒฝ์ฐ ๋จผ์ ๊ณต์ ํฉ๋๋ค.
์ปค๋ฐ ๋ฉ์์ง ๊ท์น
์ปค๋ฐ ๋ฉ์์ง๋ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ผ๋ก ๋๋์ด ์ง๋๋ค. ํ ์ค๋ง ์์ฑํด๋ ์ค๋ช ์ด ์ถฉ๋ถํ๋ค๋ฉด ์ ๋ชฉ๋ง์ผ๋ก๋ ๊ด์ฐฎ์ต๋๋ค. ํ์ง๋ง ์ด๋ค ๋ณ๊ฒฝ ์ฌํญ์ด ์๋์ง ๋งฅ๋ฝ๊ณผ ์ค๋ช ์ด ํ์ํ๋ค๋ฉด ๋ณธ๋ฌธ์ ์์ฑํ ์ ์์ต๋๋ค. ๋ค์์ ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ์์ฑํ๋ ๊ท์น์ ๋๋ค.
- ์ปค๋ฐ ๋ฉ์์ง ์์ ๋ถ์ด๋ "feat", "init" ๋ฑ์ ์ ๋์ฌ๋ฅผ "์ปค๋ฐ ํ์ " ๋๋ "์ปค๋ฐ ์ปจ๋ฒค์ (Commit Convention)" ๊ฐ์ถ๊ธฐ
- ์ ๋ชฉ๊ณผ ๋ณธ๋ฌธ์ ํ ์ค ๋์ ๋ถ๋ฆฌํ๊ธฐ
- ์ ๋ชฉ์ 70์ ์ด๋ด๋ก ์ ๊ธฐ
- ์ ๋ชฉ ๋์ . ๋ ๊ธ์ง
์ฃผ์ ์ปค๋ฐ ํ์
์์:
feat: ์๋ก์ด ๊ธฐ๋ฅ ์ถ๊ฐ
fix: ๋ฒ๊ทธ ์์
docs: ๋ฌธ์ ๋ณ๊ฒฝ
merge: ๋ธ๋์น ๋ณํฉ
style: ์ฝ๋ ์คํ์ผ ๋ณ๊ฒฝ(์ฝ๋ ๊ธฐ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์๋ ๋ณ๊ฒฝ)
refactor: ์ฝ๋ ๋ฆฌํฉํ ๋ง
test: ํ
์คํธ ์ฝ๋ ์ถ๊ฐ ๋๋ ์์
chore: ํ๋ก์ ํธ์ ํ๊ฒฝ ์ค์ /๊ตฌ์ถ, ๋น๋ ํ๋ก์ธ์ค๋ ๋ณด์กฐ ๋๊ตฌ ๋ณ๊ฒฝ
init: ํ๋ก์ ํธ ์ด๊ธฐํ
build: ๋น๋ ๊ด๋ จ ๋ณ๊ฒฝ์ฌํญ
ci: CI ์ค์ ํ์ผ ๋ณ๊ฒฝ
schema: db ์คํค๋ง ๋ณ๊ฒฝ
migration: db ๋ณ๊ฒฝ์ฌํญ์ ๋ง์ด๊ทธ๋ ์ด์
sqlํ์ผ๋ก ์ ์ฅ
release: ๋ฒ์ ๋ฐฐํฌ
์ค์: release๋ ๋ฐ๋์ ์ปค๋ฐ๋ฉ์์ง์ ๋ฒ์ (0.0.0 ํ์)์ ์์ฑํด์ค์ผํฉ๋๋ค. ๋ํ, release์ปค๋ฐ ํ์ ์ main๋ธ๋์น์ PR์ ์ฌ๋ฆฌ๊ธฐ ์ ์ต์ข ์ปค๋ฐ์๋ง ์ฌ์ฉํฉ๋๋ค.
release: v1.2.4 ๋ฒ์ ๋ฐฐํฌ
- ๋ฐ๋๋ด์ฉ
- ๋ฐ๋๋ด์ฉ2
์ค์ ์ปค๋ฐ ์์ฑ ์์:
feat: ์ฌ์ฉ์ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ก๊ทธ์ธ ํผ ๊ตฌํ
- ์คํ์ผ ์์
PR ๊ท์น
PR์ ์ง์ง ๊ธํ ์ฌํญ์ด ์๋๋ผ๋ฉด ๋ฐ๋์ ๋ณธ์ธ ์ ์ธ ์ต์ ํ๋ช ์ Approve ๋ฆฌ๋ทฐ๊ฐ ๋ ์ด์ผ ๋ณํฉํ์ค ์ ์์ต๋๋ค. Comment X
Comment๋ ์ฝ๋ ์ด์ธ์ ๋ฆฌ๋ทฐ (ํด๋น ์ฝ๋ ์๋ ํ์ธ๋ฉ์์ง, ๋งํฌ ์ฒดํฌ, ๋์์ธ์ ์)์ ํ ๋ ์ฌ์ฉ, ๋๋ถ๋ถ์ ๊ฒฝ์ฐ์ ์ ๋ถ review๋ฅผ ์ฌ์ฉํฉ๋๋ค.
start a reviewํ๋ฉด ์ฝ๋์๋ค ๋ค๋ ์ฝ๋ฉํธ๋ค์ด ์์์ ์ฅ๋ผ์, ๋ง์ง๋ง์ submit์ ํ๋ฉด ๊น๋ํ๊ฒ ํ๋์ ๋ฆฌ๋ทฐ๋ก ๋จ๊ฒจ์ง๋๋ค.
PR ํ์
๐ PR ์ ๋ชฉ
- feat / ๋ธ๋์น๋ช - ๊ฐ๋จํ ์์ ๋ด์ฉ
๐ PR ๋ณธ๋ฌธ
๋ฐ์ ๋ธ๋์น
- ex) INTER-01-Button -> dev
PR ํ์ (ํ๋ ์ด์์ PR ํ์ ์ ์ ํํด์ฃผ์ธ์)
- ๊ธฐ๋ฅ ์ถ๊ฐ
- ๊ธฐ๋ฅ ์ญ์
- ๋ฒ๊ทธ ์์
- ์์กด์ฑ, ํ๊ฒฝ ๋ณ์, ๋น๋ ๊ด๋ จ ์ฝ๋ ์ ๋ฐ์ดํธ
์์ ๋ด์ฉ
- ์ด๋ฒ PR์์ ์์ ํ ๋ด์ฉ์ ๊ฐ๋ตํ ์ค๋ช ํด์ฃผ์ธ์(์ด๋ฏธ์ง ์ฒจ๋ถ ๊ฐ๋ฅ)
ํ ์คํธ ๊ฒฐ๊ณผ (์ ํ)
- ex) ๋ฒ ์ด์ค ๋ธ๋์น์ ํฌํจ๋๊ธฐ ์ํ ์ฝ๋๋ ๋ชจ๋ ์ ์์ ์ผ๋ก ๋์ํด์ผ ํฉ๋๋ค. ๊ฒฐ๊ณผ๋ฌผ์ ๋ํ ์คํฌ๋ฆฐ์ท, GIF, ํน์ ๋ผ์ด๋ธ ๋ฐ๋ชจ๊ฐ ๊ฐ๋ฅํ๋๋ก ์ํAPI๋ฅผ ์ฒจ๋ถํ ์๋ ์์ต๋๋ค.
์คํฌ๋ฆฐ์ท (์ ํ)
๋ฆฌ๋ทฐ ์๊ตฌ์ฌํญ(์ ํ)
- ๋ฆฌ๋ทฐ์ด๊ฐ ํน๋ณํ ๋ด์ฃผ์์ผ๋ฉด ํ๋ ๋ถ๋ถ์ด ์๋ค๋ฉด ์์ฑํด์ฃผ์ธ์
- ex) ๋ฉ์๋ XXX์ ์ด๋ฆ์ ๋ ์ ์ง๊ณ ์ถ์๋ฐ ํน์ ์ข์ ๋ช ์นญ์ด ์์๊น์?
๋ธ๋์น ์ด๋ฆ ํ์
์ข ๋ฅ | ์ฌ์ฉํจํด | ํน์ง |
---|---|---|
main | main | ํ๋ก๋์ ์ค๋ ์ท ๊ฐ์ฅ ์ต์ ์ ๋ฐฐํฌ๋ ๋ฒ์ |
develop | dev | ๋ฆด๋ฆฌ์ฆ ๊ณํ์ ๋ฐ๋ผ์ Github์์ ๊ธฐ๋ณธ ๋ธ๋์น๋ก ์ง์ |
feature | INTER-00(์ง๋ผ ์ด์๋ฒํธ)-๊ธฐ๋ฅ๋ช (ํ๋จ์ด, PascalCase) / INTER-00-ListComponent | develop์ ๋ณํฉ |
issue | ISSUE-00(์ด์๋ฒํธ)-์ด์๋ช (ํ๋จ์ด, PascalCase) / ISSUE-11-FixTailwindClasses | develop์ ๋ณํฉ |
hotfix | HOTFIX-00(์ด์๋ฒํธ)-hotfix๋ช (ํ๋จ์ด, PascalCase) / HOTFIX-911-OptimizeStateTransfer | main์ ๋ณํฉ |
Lint ๊ท์น
์ฃผ์ ๊ท์น
-
var ๋ ์ฌ์ฉํ์ง ์์ต๋๋ค.
-
๋ ๋ง์ ์ ๋ณด๋ https://standardjs.com/rules.html ๋ฅผ ์ฐธ๊ณ ํ์ธ์.
-
์ ๋งํฌ์ ๋ฃฐ์์ ์์ธ์ธ ๊ฒฝ์ฐ์ ๋๋ค.
- ์ธ๋ฏธ ์ฝ๋ก ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค.
- ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ์ฌ์ฉ์ ํ์ฉํฉ๋๋ค.
- Double Quote("") ์ฌ์ฉ๋ง์ ํ์ฉํฉ๋๋ค.
๋ณ์ ์ด๋ฆ
- ํด๋์ค, ์ปดํฌ๋ํธ, ์ธํฐํ์ด์ค, ํ์ : PascalCase
- ํ ํจ์: use๋ฅผ ์ ๋์ด๋ก ์ฌ์ฉํ๋ camelCase (useAuth.ts)
- others: camelCase
ํ์ผ ์ด๋ฆ
- ์ปดํฌ๋ํธ, DTO, Entity ํ์ผ : PascalCase
- ์ด๋ฏธ์ง, ์์ ๋ฑ ์ ์ ํ์ผ, ๋ผ์ฐํ ํด๋: kebab-case
[slug]
์ ๊ฐ์ ๋์ ๋ผ์ฐํ ํด๋: camelCase- others: camelCase
- ๊ธด ํ์ผ๋ช ์ ์ญํ ๊ณผ ์ปจํ ์คํธ๋ฅผ ๋ช ํํ๊ฒ ํ๊ธฐ ์ํด dot notation์ ์ฌ์ฉํ์ฌ ๊ตฌ๋ถํ๋ค.
ex) createTodo.usecase.ts
ex2) todo.test.ts
ex3) CreateTodo.dto.ts
html์ ํด๋์ค & ์์ด๋ ์ด๋ฆ
- snake_case
์คํ์ผ์ํธ
- ๊ฑฐ์ ์ฌ์ฉ๋์ง ์์ง๋ง, globals.css, variables.css ํํ๋ก ์ฌ์ฉํฉ๋๋ค.
์ธํฐํ์ด์ค ์ด๋ฆ
- ๋ชจ๋ ์ธํฐํ์ด์ค ์ ์์์๋ ์์ I๋ฅผ ๋ถ์ธ ํํ์ ์ด๋ฆ์ผ๋ก ์ ์ํฉ๋๋ค.
์์:
interface IFormRepository {}
- ์ด๋ Domain๊ณ์ธต์ repositories ํด๋๋ด์ ํ์ผ๋ช
์๋ช
๊ท์น์๋ ์ ์ฉ๋ฉ๋๋ค. (infra์ repositoriesํ์ผ๊ณผ ํผ๋์ด ์๊ธฐ์ํจ.)
์์:
ISupabase.repository.ts
ํจ์ ํ์
- ํ์ด์ง ์ปดํฌ๋ํธ, ๋ ์ด์์ ์ปดํฌ๋ํธ๋ ์ ๋ถ function ํจ์๋ฅผ ์ฌ์ฉํฉ๋๋ค. (Next.js์ ๊ณต์ ์ปจ๋ฒค์ )
- others: ํ์ดํ ํจ์ ์ฌ์ฉ
ex) export default function RootLayout() {}
ex2) const Modal = () => {}
Import & Export ๊ท์น
- ์ปดํฌ๋ํธ ํด๋์์๋ index.ts๋ฅผ ํตํ ์ฌ export๊ฐ ํ์ํฉ๋๋ค. (์ผ๊ด์ฑ์ ์ํจ)
//index.ts
export * from "./Input";
export * from "./input.type";
export * from "./input.variants";
๋ํ 1๋์ค(../)๋ฅผ ๋์ด๊ฐ๋ ์์๋ฅผ importํ ๋๋ ๋ฐ๋์ @ alias๋ฅผ ํตํด import ํฉ๋๋ค.
import { Input } from "@/app/components/input";
import { Input } from "./Input";
๊ฐ๋ณ ํ์ผ์์ export default๋ฅผ ์ฌ์ฉํ์ง ์๊ณ export const ์ ๊ฐ์ ๋ฐฉ์์ผ๋ก export๋ฅผ ํ์ ์ผ index.ts์์ ์ ํจํ๊ฒ ์ฌ export๊ฐ ๊ฐ๋ฅํด์ง๋๋ค.
node & npm ๋ฒ์ ํต์ผ
- node : v22.15.1
- pnpm : v10.11.0
์๋งจํฑ ํ๊ทธ
- ๊ฐ ํ์ด์ง์ ์ต์์ ๋ถ๋ชจ๋ ๋ฐ๋์ mainํ๊ทธ๋ฅผ ์ฌ์ฉํฉ๋๋ค.
- sectionํ๊ทธ๋ก ํญ๋ชฉ์ ๊ตฌ๋ถํ๊ณ section ํ๊ทธ๋ด์๋ ๋ฐ๋์ ํ๋๋ผ๋ ์ ๋ชฉํ๊ทธ๊ฐ ์์ด์ผํฉ๋๋ค.
- ํค๋์ ๋ฉ์ธ๋ก๊ณ ๋ h1๊ณผ a๋ก ๊ฐ์ธ์ ์ฌ์ฉํฉ๋๋ค.