Skip to content

Latest commit

ย 

History

History
340 lines (240 loc) ยท 18.7 KB

README.md

File metadata and controls

340 lines (240 loc) ยท 18.7 KB

Issue ์ปจ๋ฒค์…˜์„ ์ง€์ผœ์ฃผ์„ธ์š”


๊ธฐ์ค€์— ๋งž๊ฒŒ Issue๋ฅผ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”


Issue๋Š” ํฌ๊ณ  ์ž‘์€ ์—…๋ฌด์˜ ๋‹จ์œ„์ž…๋‹ˆ๋‹ค.

๋ชจ๋‘๊ฐ€ Issue์˜ ์ œ๋ชฉ๋งŒ ๋ณด๊ณ ๋„ ์–ด๋– ํ•œ ์ž‘์—…์„ ํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋„๋ก, ์Šค์Šค๋กœ์˜ ํŒ๋‹จ ํ•˜์— ์ž˜ ๋‚˜๋ˆ„์–ด ์ฃผ์„ธ์š”.

Sub Issue๋ฅผ ์ ๊ทน์ ์œผ๋กœ ํ™œ์šฉํ•ด์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์ฃผ์„ธ์š”. ์ตœ์ข…์ ์œผ๋กœ, ๊ฐ€์žฅ ํ•˜์œ„์— ์žˆ๋Š” Issue๋Š” ๊ณผ๋„ํ•œ ์ž‘์—…๋Ÿ‰์„ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค.

๊ทœ์น™์— ๋งž๊ฒŒ Title์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”


[ํƒ€์ž…] ๊ธฐ๋Šฅ ์š”์•ฝ ์˜ ํ˜•์‹์„ ์ง€์ผœ์ฃผ์„ธ์š”.

์ƒํ™ฉ์— ๋งž๋Š” Tag๋ฅผ ๋ถ™์—ฌ์ฃผ์„ธ์š”


1. ๐Ÿ› ๏ธ Chore

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •, ์˜์กด์„ฑ ์„ค์น˜ ๋“ฑ ๊ธฐ๋Šฅ๊ณผ ์ง์ ‘์ ์ธ ๊ด€๋ จ์ด ์—†๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ex) ํŒจํ‚ค์ง€ ์—…๋ฐ์ดํŠธ, CI/CD ์„ค์ •

2. โœจ Feature

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ex) ํšŒ์›๊ฐ€์ž…, ๋‹คํฌ๋ชจ๋“œ ๋“ฑ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ƒˆ๋กญ๊ฒŒ ์ œ๊ณต๋˜๋Š” ๊ธฐ๋Šฅ

3. ๐Ÿ› Fix / Bug

Fix์™€ Bug๋Š” ๊ฐ™์€ Issue Template์„ ๊ณต์œ ํ•ฉ๋‹ˆ๋‹ค. ์ž‘์„ฑ ์‹œ์— ํƒœ๊ทธ๋Š” 1๊ฐœ๋งŒ ์œ ์ง€ํ•ด์ฃผ์„ธ์š”.

๊ตฌ๋ถ„

  • Fix : ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ž‘ํ–ˆ์„ ๋•Œ ์ž˜๋ชป๋œ ๋™์ž‘์„ ์ •์ƒ ๋™์ž‘์œผ๋กœ ๋ณ€๊ฒฝ
  • Bug : ์˜ˆ์ƒ์น˜ ๋ชปํ•œ ๋ฌธ์ œ ๋˜๋Š” ์˜ค๋ฅ˜ ํ˜„์ƒ์„ ๋ฐœ๊ฒฌํ•œ ๊ฒฝ์šฐ

4. ๐Ÿงน Refactor

์ฝ”๋“œ ๊ตฌ์กฐ ๊ฐœ์„  ๋“ฑ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์€ ๋™์ผํ•˜์ง€๋งŒ, ๋‚ด๋ถ€ ์ฝ”๋“œ ๊ตฌ์กฐ ๋˜๋Š” ํ’ˆ์งˆ์„ ๊ฐœ์„ ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ex) ์ปดํฌ๋„ŒํŠธ ๋ถ„๋ฆฌ, ๋กœ์ง ์ตœ์ ํ™”

5. โœ… Test

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ex) ์œ ๋‹› ํ…Œ์ŠคํŠธ, ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ถ”๊ฐ€

6. ๐Ÿ“ Docs

๋ฌธ์„œํ™” ๊ด€๋ จ ์ž‘์—…์ž…๋‹ˆ๋‹ค.

ex) README, ์ฝ”๋“œ ์ฃผ์„, API ๋ฌธ์„œ ์—…๋ฐ์ดํŠธ

PR ์ปจ๋ฒค์…˜์„ ์ง€์ผœ์ฃผ์„ธ์š”


๊ทœ์น™์— ๋งž๊ฒŒ Title์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”


Issue์™€ ๋™์ผํ•˜๊ฒŒ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.

PR ์ œ๋ชฉ์€, develop ๋ธŒ๋žœ์น˜์— mergeํ•  ๋•Œ commit message๋กœ ๋‚จ๊ฒŒ ๋˜๋‹ˆ ๊ผญ! ์œ ์˜ํ•ด์ฃผ์„ธ์š”.

D-day ๋ผ๋ฒจ์„ ์ ์šฉํ•ด์ฃผ์„ธ์š”


  • ์ฝ”๋“œ ๋ฆฌ๋ทฐ๊ฐ€ ์™„๋ฃŒ๋˜์–ด์•ผ ํ•˜๋Š” ์‹œ์ ์„ D-n ๋ผ๋ฒจ์„ ํ†ตํ•ด์„œ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์Šค์Šค๋กœ ์ค‘์š”๋„๋ฅผ ํŒ๋‹จํ•ด์„œ, D-0 ~ D-3 ๋‚ด์—์„œ ์ •ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.
  • label์€ ํ‰์ผ (๊ณตํœด์ผ ์ œ์™ธ) 14์‹œ์— ์Šค์Šค๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

Template ์ง€์ผœ์„œ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”


PR Template์— ๋งž๊ฒŒ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

  1. Related Issues
  2. ์ž‘์—… ๋‚ด์šฉ
  3. ์ž‘์—… ๊ฒฐ๊ณผ (์„ ํƒ)
  4. ๋ฆฌ๋ทฐ ์‹œ ์š”์ฒญ์‚ฌํ•ญ (์„ ํƒ)

์ž‘์€ PR ๊ทœ์น™ ์„ ์ง€์ผœ์ฃผ์„ธ์š”

Reviwer์™€ Reviewer ๋ชจ๋‘๋ฅผ ์œ„ํ•ด PR์€ ์ ์ ˆํ•œ ๊ทœ๋ชจ๋ฅผ ์œ ์ง€ํ•ด์ฃผ์„ธ์š”.

PR์˜ ๊ทœ๋ชจ๊ฐ€ ์ž‘์•„์ง€๋ฉด, ๋ฆฌ๋ทฐ์˜ ์งˆ๋„ ์ƒ์Šนํ•˜๊ณ  ์†๋„๋„ ๋นจ๋ผ์ง‘๋‹ˆ๋‹ค ๐Ÿ˜Ž

๋ฆฌ๋ทฐํ•  ๋•Œ ์ง€์ผœ์ฃผ์„ธ์š”


์ฝ”๋“œ ๋ฆฌ๋ทฐ ๊ณผ์ •์—์„œ๋Š” ์ด๋Ÿฐ๊ฒŒ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•ด์š”

  • ์ผ๊ด€๋œ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์œ ์ง€ํ•˜๊ณ  ์žˆ๋Š”์ง€
  • ๋‹ค๋ฅธ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์˜๊ฒฌ ์ œ์‹œ
  • ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ ์ œ์‹œ
  • ๊ธฐ์ˆ ์ ์ธ ์ง€์‹, ๋…ธํ•˜์šฐ ๊ณต์œ 
  • ํžˆ์Šคํ† ๋ฆฌ ์ „๋‹ฌ

๋ฆฌ๋ทฐ์–ด๋ฅผ ์„ค์ •ํ•ด์ฃผ์„ธ์š”

ํŒ€์› ๋ชจ๋‘๋ฅผ Reviewer๋กœ ์„ค์ •ํ•ด์ฃผ์„ธ์š”. (๊ธฐ๋ณธ์ ์œผ๋กœ CODEOWNERS ํŒŒ์ผ์— ์˜ํ•ด ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.)

Merge ๊ธฐ์ค€์„ ์ง€์ผœ์ฃผ์„ธ์š”

  • Reviewer ์ค‘ ์ตœ์†Œ 2๋ช…์ด approve ํ•œ ๊ฒฝ์šฐ์—๋Š” ๋ˆ„๊ตฌ๋‚˜ merge ํ›„ PR์„ close ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ˜์˜๋˜์ง€ ๋ชปํ•œ comment์˜ ๊ฒฝ์šฐ, Issue๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋‹ค์‹œ ํ•ด๊ฒฐํ•ด์ฃผ์„ธ์š”. (P3 ์ฐธ๊ณ )
  • Approve์—๋Š” ์ฑ…์ž„์ด ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.

๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญํ•œ ํ›„์—๋Š”

  • ํ‰์ผ (๊ณตํœด์ผ ์ œ์™ธ) 14์‹œ์— D-n ๋ผ๋ฒจ์„ ๊ต์ฒดํ•ด์ฃผ์„ธ์š”.
  • D-0์ด ๋œ ํ›„์—๋„ ์•„๋ฌด๋„ ๋ฆฌ๋ทฐ๋ฅผ ์ œ๊ณตํ•˜์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ์—๋Š”, Discord์— ๋ฆฌ๋ทฐ๋ฅผ ์š”์ฒญํ•ด์ฃผ์„ธ์š”.
  • ๊ธด๊ธ‰ํ•œ ์ˆ˜์ • ๋“ฑ ์ฆ‰๊ฐ์ ์ธ ๋ฐ˜์˜์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, D-0 ๋ผ๋ฒจ์„ ๋‹ฌ๊ณ  Discord์— Review๋ฅผ ์ง์ ‘ ์š”์ฒญํ•ด์ฃผ์„ธ์š”.
  • Request Changes ๋ฆฌ๋ทฐ์— ์˜ํ•œ ์ˆ˜์ •์„ ์ œ์™ธํ•˜๊ณ ๋Š” ์ถ”๊ฐ€ ์ปค๋ฐ‹์€ ์ž์ œํ•ด์ฃผ์„ธ์š”.
  • ํ˜น์‹œ๋‚˜ ๋†“์นœ ๋ถ€๋ถ„์ด ์žˆ์–ด ์ˆ˜์ •์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ, Change to Draft๋ฅผ ํ†ตํ•ด ๋ช…์‹œํ•ด์ฃผ์„ธ์š”.

Pnย ๊ทœ์น™์— ๋งž์ถฐ์„œ ๋ฆฌ๋ทฐ๋ฅผ ๋‚จ๊ฒจ์ฃผ์„ธ์š”.

๋ ˆ๋ฒจ ์˜๋ฏธ ๋ฑ…ํฌ ์ƒ๋Ÿฌ๋“œ ์„ค๋ช… ์ฒ˜๋ฆฌ ๊ธฐ์ค€
๐ŸŸฅ P1 ๊ผญ ๋ฐ˜์˜ํ•ด ์ฃผ์„ธ์š” ๋ฆฌ๋ทฐ์–ด๋Š” PR์˜ ๋‚ด์šฉ์ด ์„œ๋น„์Šค์— ์ค‘๋Œ€ํ•œ ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ์ž ์žฌํ•˜๊ณ  ์žˆ๋Š” ๋“ฑ ์ค‘๋Œ€ํ•œ ์ฝ”๋“œ ์ˆ˜์ •์ด ๋ฐ˜๋“œ์‹œ ํ•„์š”ํ•˜๋‹ค๊ณ  ํŒ๋‹จ๋˜๋Š” ๊ฒฝ์šฐ, P1 ํƒœ๊ทธ๋ฅผ ํ†ตํ•ด ๋ฆฌ๋ทฐ ์š”์ฒญ์ž์—๊ฒŒ ์ˆ˜์ •์„ ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค. ๋ฆฌ๋ทฐ ์š”์ฒญ์ž๋Š” p1 ํƒœ๊ทธ์— ๋Œ€ํ•ด ๋ฆฌ๋ทฐ์–ด์˜ ์š”์ฒญ์„ ๋ฐ˜์˜ํ•˜๊ฑฐ๋‚˜, ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†๋Š” ํ•ฉ๋ฆฌ์ ์ธ ์˜๊ฒฌ์„ ํ†ตํ•ด ๋ฆฌ๋ทฐ์–ด๋ฅผ ์„ค๋“ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ”ง Request Changes
๐ŸŸง P2 ์ ๊ทน์ ์œผ๋กœ ๊ณ ๋ คํ•ด ์ฃผ์„ธ์š” ์ž‘์„ฑ์ž๋Š” P2์— ๋Œ€ํ•ด ์ˆ˜์šฉํ•˜๊ฑฐ๋‚˜ ๋งŒ์•ฝ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ์ ํ•ฉํ•œ ์˜๊ฒฌ์„ ๋“ค์–ด ํ† ๋ก ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. ๐Ÿ”ง Request Changes
๐ŸŸจ P3 ์›ฌ๋งŒํ•˜๋ฉด ๋ฐ˜์˜ํ•ด ์ฃผ์„ธ์š” ์ž‘์„ฑ์ž๋Š” P3์— ๋Œ€ํ•ด ์ˆ˜์šฉํ•˜๊ฑฐ๋‚˜ ๋งŒ์•ฝ ์ˆ˜์šฉํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋ผ๋ฉด ๋ฐ˜์˜ํ•  ์ˆ˜ ์—†๋Š” ์ด์œ ๋ฅผ ๋“ค์–ด ์„ค๋ช…ํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ์— ๋ฐ˜์˜ํ•  ๊ณ„ํš์„ ๋ช…์‹œ์ ์œผ๋กœ(JIRA ํ‹ฐ์ผ“ ๋“ฑ์œผ๋กœ) ํ‘œํ˜„ํ•  ๊ฒƒ์„ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค. Request changes ๊ฐ€ ์•„๋‹Œ Comment ์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๐Ÿ’ฌ Comment
๐ŸŸฉ P4 ๋ฐ˜์˜ํ•ด๋„ ์ข‹๊ณ  ๋„˜์–ด๊ฐ€๋„ ์ข‹์Šต๋‹ˆ๋‹ค ์ž‘์„ฑ์ž๋Š” P4์— ๋Œ€ํ•ด์„œ๋Š” ์•„๋ฌด๋Ÿฐ ์˜๊ฒฌ์„ ๋‹ฌ์ง€ ์•Š๊ณ  ๋ฌด์‹œํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ์˜๊ฒฌ์„ ๋ฐ˜์˜ํ•˜๋Š” ๊ฒŒ ์ข‹์„์ง€ ๊ณ ๋ฏผํ•ด ๋ณด๋Š” ์ •๋„๋ฉด ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. โœ… Approve
๐ŸŸฆ P5 ๊ทธ๋ƒฅ ์‚ฌ์†Œํ•œ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค ์ž‘์„ฑ์ž๋Š” P5์— ๋Œ€ํ•ด ์•„๋ฌด๋Ÿฐ ์˜๊ฒฌ์„ ๋‹ฌ์ง€ ์•Š๊ณ  ๋ฌด์‹œํ•ด๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. โœ… Approve

๋ฆฌ๋ทฐ๋ฅผ ๋๋‚ด๊ธฐ ์ „์— ๋‹ค์‹œ ํ•œ ๋ฒˆ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

์ƒํƒœ ์‚ฌ์šฉ ์กฐ๊ฑด ์„ค๋ช… ํ›„์† ์กฐ์น˜
โœ… Approve - ๊ธฐ๋Šฅ์ด ์ •์ƒ ๋™์ž‘ํ•จ
- ์ฝ”๋“œ ์Šคํƒ€์ผ/๊ตฌ์กฐ ๋ฌธ์ œ๊ฐ€ ์—†์Œ - ๋ณ‘ํ•ฉํ•ด๋„ ๋ฌด๋ฐฉํ•œ ์ƒํƒœ
- ์‚ฌ์†Œํ•œ ๊ฐœ์„  ์—ฌ์ง€๋Š” Comment๋กœ ๋ณ„๋„ ๋‚จ๊ธธ ์ˆ˜ ์žˆ์Œ ๋ฐ”๋กœ Merge ๊ฐ€๋Šฅ. ํ•„์š” ์‹œ ๊ฐœ์„  ์˜๊ฒฌ์€ Comment๋กœ ๋‚จ๊น€
๐Ÿ”ด Request Changes - ๋ช…๋ฐฑํ•œ ๋ฌธ์ œ, ๋…ผ๋ฆฌ ์˜ค๋ฅ˜, ์ปจ๋ฒค์…˜ ์œ„๋ฐ˜ ๋“ฑ- ๋ณ‘ํ•ฉ ์ „์— ๋ฐ˜๋“œ์‹œ ์ˆ˜์ • ํ•„์š” - ๋ณ‘ํ•ฉ์„ ๋ง‰๋Š” ์ˆ˜์ค€์˜ ์˜ค๋ฅ˜
- ๋ฆฌ๋ทฐ์–ด๊ฐ€ ๋ณด๊ธฐ์— ์ˆ˜์ • ์—†์ด ํ†ต๊ณผ ๋ถˆ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์ˆ˜์ • ํ›„ ๋‹ค์‹œ ๋ฆฌ๋ทฐ ์š”์ฒญ. Merge ๊ธˆ์ง€
๐ŸŸก Comment - ๋น„์ฐจ๋‹จ ํ”ผ๋“œ๋ฐฑ- ์ œ์•ˆ, ์งˆ๋ฌธ, ๊ฐœ์„  ์•„์ด๋””์–ด ๋“ฑ - Merge๋ฅผ ๋ง‰์ง€ ์•Š์Œ
- ๋ฐ˜์˜ ์—ฌ๋ถ€๋Š” ์ž‘์„ฑ์ž ํŒ๋‹จ ๋ฐ˜์˜์ด ํ•„์š”ํ•˜๋‹ค๋ฉด Merge ํ›„ ๋ณ„๋„ ์ด์Šˆ ์ƒ์„ฑํ•˜์—ฌ ๊ด€๋ฆฌ

์ฐธ๊ณ ๋ฌธํ—Œ


https://blog.banksalad.com/tech/banksalad-code-review-culture/

Commit Convention


๊ทœ์น™์— ๋งž๋Š” ์ œ๋ชฉ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


gitmoji ๋ฅผ ์ด์šฉํ•ด์„œ ์ƒ์„ฑํ•ด์ฃผ์„ธ์š”.

  • emoji Tag: Description ์˜ ํ˜•์‹์ด ๋ ๊ฑฐ์—์š”.
    • ex. โœจย Feat: sample commit
  • ํƒœ๊ทธ์˜ ์ฒซ ๊ธ€์ž๋Š” ๋Œ€๋ฌธ์ž๋กœ ์ ์–ด์ฃผ์„ธ์š”. feat โŒย Feat โญ•
์ด๋ชจ์ง€ ์ด๋ฆ„ (:gitmoji:) ํƒœ๊ทธ ์„ค๋ช…
โœจ :sparkles: feat ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ ์ถ”๊ฐ€
๐Ÿ”จ :hammer: fix ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ์ฃผ๋Š” ๊ธฐ๋Šฅ ์ˆ˜์ •
โ™ป๏ธ :recycle: refactor ๋ฆฌํŒฉํ† ๋ง (๊ธฐ๋Šฅ ๋ณ€ํ™” ์—†์ด ์ฝ”๋“œ ๊ฐœ์„ )
๐Ÿ› :bug: bug ๋ฒ„๊ทธ ์ˆ˜์ •
๐Ÿš‘๏ธ :ambulance: hotfix ๊ธด๊ธ‰ํ•œ ๋ฌธ์ œ ์ˆ˜์ •
๐Ÿ’„ :lipstick: UI UI ๋ณ€๊ฒฝ, CSS ์ˆ˜์ • ๋“ฑ
๐ŸŽจ :art: style ์ฝ”๋“œ ํฌ๋งทํŒ…, ์„ธ๋ฏธ์ฝœ๋ก  ๋“ฑ ์ฝ”๋“œ ์˜ํ–ฅ ์—†๋Š” ๋ณ€๊ฒฝ
๐Ÿ”ง :wrench: config ํ™˜๊ฒฝ ์„ค์ •, ๋นŒ๋“œ ์„ค์ • ๋“ฑ ์ˆ˜์ •
โœ๏ธ :pencil2: typo ์˜คํƒ€, ๋ฌธ๊ตฌ ์ˆ˜์ •
๐Ÿ“ :memo: docs ๋ฌธ์„œ(README, ์ฃผ์„ ๋“ฑ) ๋ณ€๊ฒฝ
๐Ÿ’ฌ :speech_balloon: comment ์ฃผ์„ ์ถ”๊ฐ€/์ œ๊ฑฐ (TODO, NOTE ๋“ฑ)
๐Ÿ“ฆ :package: package ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ์˜์กด์„ฑ ์ถ”๊ฐ€
๐Ÿ”ฅ :fire: remove ๋ถˆํ•„์š”ํ•œ ์ฝ”๋“œ/ํŒŒ์ผ ์‚ญ์ œ
โœ… :check: test ํ…Œ์ŠคํŠธ

๊ทœ์น™์— ๋งž๋Š” ๋ณธ๋ฌธ์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.


  • ํ•œ ์ค„ ๋‹น 72์ž ์ด๋‚ด๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”. ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์—์„œ์˜ ๊ฐ€๋…์„ฑ์„ ์œ„ํ•จ์ด์—์š”.
  • ๋ณธ๋ฌธ์˜ ์ด ๊ธธ์ด์—๋Š” ์ œํ•œ์ด ์—†์–ด์š”.
  • "๋ฌด์—‡์„, ์™œ" ๋ณ€๊ฒฝํ–ˆ๋Š”์ง€๋ฅผ ๋ฐ˜๋“œ์‹œ ํฌํ•จํ•ด์ฃผ์„ธ์š”.
  • ๊ด€๋ จ ์ด์Šˆ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋ช…์‹œํ•ด์ฃผ์…”๋„ ์ข‹์•„์š”. (Footer)
โœจ Feat: ์‚ฌ์šฉ์ž ํ”„๋กœํ•„ ํŽ˜์ด์ง€ ์ถ”๊ฐ€

- ์ƒˆ๋กœ์šด ์œ ์ € ํ”„๋กœํ•„ ํŽ˜์ด์ง€ UI ๊ตฌํ˜„
- ์œ ์ € ๋‹‰๋„ค์ž„, ๊ฐ€์ž…์ผ, ์ตœ๊ทผ ํ™œ๋™ ํ‘œ์‹œ
- ์ถ”ํ›„ ํ™œ๋™ ๊ทธ๋ž˜ํ”„ ์ถ”๊ฐ€ ์˜ˆ์ •

- Resolves #42

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ณ๋ฅผ ์ง€์ผœ์ฃผ์„ธ์š”


๋„์‹ํ™”๋œ ์ƒ/ํ•˜์œ„ ๊ด€๊ณ„๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”

  • src
    • app : App Router ์šฉ ํด๋”์ž…๋‹ˆ๋‹ค.
    • features : ๋„๋ฉ”์ธ(๊ธฐ๋Šฅ)๋ณ„๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ๋“ค์„, ํด๋”๋ช…์œผ๋กœ ๊ตฌ๋ถ„ํ•ด์ฃผ์„ธ์š”.
      • components : ์ปดํฌ๋„ŒํŠธ๋“ค์ด ์ •์˜๋œ ํŒŒ์ผ์ž…๋‹ˆ๋‹ค.
        • ๊ฐ ํด๋”๋ช…์€, ์ปดํฌ๋„ŒํŠธ๋ช…๊ณผ ์ผ์น˜ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
        • ์ปดํฌ๋„ŒํŠธ ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” type ๋ฐ storybook ํŒŒ์ผ์€ ๊ฐ ์ปดํฌ๋„ŒํŠธ ํด๋”์— ์œ„์น˜ํ•˜์—ฌ์•ผ ํ•˜๋ฉฐ, ์•„๋ž˜์˜ ๋ช…๋ช…๋ฒ•์„ ์ค€์ˆ˜ํ•˜์—ฌ์•ผ ํ•ฉ๋‹ˆ๋‹ค.
          • storybook ํŒŒ์ผ์€ *.stories.tsx ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
          • type ํŒŒ์ผ์€ *.types.ts ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
            • type ํŒŒ์ผ ๋‚ด์—๋Š” ํ•ด๋‹น ์ปดํฌ๋„ŒํŠธ์—์„œ ํ™œ์šฉ๋˜๋Š” type๋งŒ ์ •์˜ํ•ด์ฃผ์„ธ์š”.
            • ๊ฐ™์€ ๋„๋ฉ”์ธ ๋‚ด์—์„œ 3๊ฐœ ์ด์ƒ์˜ ํŒŒ์ผ์—์„œ ๊ณต์šฉ๋˜์–ด์•ผ ํ•˜๋Š” type์˜ ๊ฒฝ์šฐ, ๋„๋ฉ”์ธ ๋‚ด์˜ types ํด๋” ๋‚ด์—์„œ ์ •์˜ํ•ด์ฃผ์„ธ์š”.
              • ์ถ”ํ›„ ์•ˆ์ •์„ฑ์„ ์œ„ํ•ด, 2๊ฐœ ํŒŒ์ผ์—์„œ๋งŒ ๊ณต์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋ถ„๋ฆฌํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
                • ์ด ๊ฒฝ์šฐ, ๋ฐ˜๋“œ์‹œ ์ฃผ์„์œผ๋กœ ๊ณต์šฉ๋˜๋Š” ํŒŒ์ผ์„ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”.
              • OR ! 2๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ, interface๋กœ ์ •์˜ํ•œ ๋’ค extends ํ•˜๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์„ ํƒ ๋ฐ”๋žŒ.
          • component ํŒŒ์ผ์€ PascalCaseFileName.tsx ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
      • hooks : React Hook ํŒŒ์ผ๋“ค์„ ๋ชจ์•„๋†“๋Š” ํด๋”์ž…๋‹ˆ๋‹ค.
        • ํŒŒ์ผ๋ช…์˜ ๊ฒฝ์šฐ, use๋กœ ์‹œ์ž‘ํ•˜๋Š”, React์˜ ๊ทœ์น™์„ ๋”ฐ๋ผ์ฃผ์„ธ์š”.
        • hook ๋‚ด์—์„œ ์‚ฌ์šฉํ•˜๋Š” type์€, ๋ณ„๋„์˜ ํŒŒ์ผ์— ์ •์˜ํ•ด์ฃผ์„ธ์š”.
          • ํŒŒ์ผ๋ช…์€ useSampleHook.types.ts ์™€ ๊ฐ™์ด ์ง€์–ด์ฃผ์„ธ์š”.
        • React Query Function ๊ฐ™์€ ๊ฒฝ์šฐ,
      • apis : ํ•ด๋‹น ๋„๋ฉ”์ธ์—์„œ ํ™œ์šฉ๋˜๋Š” api ํ˜ธ์ถœ ํ•จ์ˆ˜๋“ค์ด ์žˆ๋Š” ๊ณณ์ž…๋‹ˆ๋‹ค.
        • ํ•˜์œ„์—๋Š” HTTP method์— ๋”ฐ๋ผ์„œ ํด๋”๋ฅผ ๊ตฌ๋ถ„ํ•ด์ฃผ์„ธ์š”.
        • ๊ธฐ๋Šฅ๋ณ„๋กœ ํŒŒ์ผ์„ ๋ฌถ์–ด, ๊ฐ ํŒŒ์ผ ๋‚ด์— ์—ฌ๋Ÿฌ๊ฐœ์˜ API call ํ•จ์ˆ˜๊ฐ€ ์กด์žฌํ•˜๋„๋ก ํ•ด์ฃผ์„ธ์š”.
        • ํŒŒ์ผ๋ช…์€ kebab-case๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • common : ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ํŒŒ์ผ๋“ค์„ ํฌํ•จํ•ด์ฃผ์„ธ์š”.
      • components : ํ”„๋กœ์ ํŠธ ์ „๋ฐ˜์—์„œ ์‚ฌ์šฉ๋˜๋Š” ๊ณต์šฉ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํฌํ•จํ•ด์ฃผ์„ธ์š”.
        • ExampleComponent : ์ปดํฌ๋„ŒํŠธ๋ฅผ ์ •์˜ํ•˜๋Š” ํด๋”์˜ ๊ฒฝ์šฐ, ์ปดํฌ๋„ŒํŠธ๋ช…๊ณผ ๋™์ผํ•œ ์ด๋ฆ„์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
    • assets : font ํŒŒ์ผ ๋“ฑ ๊ณต์šฉ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ์–ด์ฃผ์„ธ์š”.

๊ทœ์น™์„ ์ง€์ผœ์„œ ์ด๋ฆ„์„ ์ง€์–ด์ฃผ์„ธ์š”


ํด๋”๋ช…์€ ์ด๋ ‡๊ฒŒ ์ง€์–ด์ฃผ์„ธ์š”

  • app router ๋‚ด์˜ ํด๋”๋ช…์€ Next.js์˜ ๊ทœ์น™์„ ์ง€์ผœ์ฃผ์„ธ์š”
  • components ํด๋” ํ•˜์œ„์˜ ์ปดํฌ๋„ŒํŠธ์˜ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ํฌํ•จํ•˜๋Š” ํด๋”์˜ ๊ฒฝ์šฐ, ์ปดํฌ๋„ŒํŠธ๋ช…๊ณผ ๋™์ผํ•˜๊ฒŒ ํด๋”๋ช…์„ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
    • storybook ํŒŒ์ผ์€ *.stories.tsx ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
    • type ํŒŒ์ผ์€ *.types.ts ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
    • component ํŒŒ์ผ์€ PascalCaseFileName.tsx ํ˜•์‹์„ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.

ํŒŒ์ผ๋ช…์€ ์ด๋ ‡๊ฒŒ ์ง€์–ด์ฃผ์„ธ์š”

  • React์—์„œ ์ •ํ•ด์ง„ ๊ทœ์น™์„ ์šฐ์„ ํ•ด์„œ ์ ์šฉํ•ด์ฃผ์„ธ์š”.
    • ์ปดํฌ๋„ŒํŠธ ํŒŒ์ผ์€ PascalCase๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
    • Hook ํŒŒ์ผ์˜ ๊ฒฝ์šฐ์—๋Š” camelCase๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
  • ๊ทธ ์™ธ util ๋“ฑ ๋ชจ๋“  ํŒŒ์ผ์€ kebab-case ๋ฅผ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”.
    • OS๋‚˜ git ๋‹จ์—์„œ ๋Œ€์†Œ๋ฌธ์ž ์ธ์‹ ๊ด€๋ จ ํ˜ผ์šฉ์„ ๋ง‰๊ธฐ ์œ„ํ•จ์ž…๋‹ˆ๋‹ค.
  • *.js ํ™•์žฅ์ž๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ง์•„์ฃผ์„ธ์š”.
    • *.cjs ๋ฐ *.mjs ํ™•์žฅ์ž๋ฅผ ๋ฐ˜๋“œ์‹œ ๊ตฌ๋ถ„ํ•ด์ฃผ์„ธ์š”.

๋ณ€์ˆ˜๋ช…์€ ์ด๋ ‡๊ฒŒ ์ง€์–ด์ฃผ์„ธ์š”

  • type/interface/enum์€ PascalCase๋กœ ์ง€์–ด์ฃผ์„ธ์š”.
    • Props, Data, Params, Payload ๋“ฑ ์ ‘๋ฏธ์–ด๋ฅผ ๋ถ™์—ฌ, ์˜๋ฏธ๋ฅผ ๋ช…ํ™•ํ•˜๊ฒŒ ํ•ด์ฃผ์„ธ์š”.
    • enum ์ž์ฒด์˜ ๋ช…์นญ์€ PascalCase์ด์ง€๋งŒ, ๋‚ด๋ถ€ ๊ฐ’์€ CAPITAL_SNAKE_CASE๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ „์—ญ์œผ๋กœ ํ™œ์šฉ๋˜๋Š” ๋งค์ง ๋„˜๋ฒ„(์ƒ์ˆ˜)๋Š” ๋ชจ๋‘ ๋Œ€๋ฌธ์ž๋กœ, CAPITAL_SNAKE_CASE๋กœ ์ง€์–ด์ฃผ์„ธ์š”.
    • ํŒŒ์ผ ๋‚ด๋ถ€์—์„œ ์‚ฌ์šฉํ•˜๋Š” ์ง€์—ญ ์ƒ์ˆ˜๋Š” ์ผ๋ฐ˜ ๋ณ€์ˆ˜๋ช…์œผ๋กœ ์ทจ๊ธ‰ํ•ฉ๋‹ˆ๋‹ค. (camelCase ํ™œ์šฉ)
  • ํ•จ์ˆ˜๋ช… ๋ฐ ๋ณ€์ˆ˜๋ช…์€ (ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ์ œ์™ธ) camelCase๋กœ ์ง€์–ด์ฃผ์„ธ์š”.
  • ์ฝ”๋“œ๋ฅผ ์ฒ˜์Œ ๋ณด๋Š” ์‚ฌ๋žŒ์ด๋ผ๋„ ๊ฐ์ž๊ฐ€ ์ˆ˜ํ–‰ํ•˜๋Š” ์—ญํ• ์„ ์•Œ ์ˆ˜ ์žˆ๋„๋ก, ๊ฐ„๊ฒฐํ•˜๊ณ  ๋ช…ํ™•ํ•˜๊ฒŒ ์ง€์–ด์ฃผ์„ธ์š”.
  • ์ค„์ž„๋ง์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. (๋ˆ„๊ตฌ๋‚˜ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋Š” ๋‹จ์ถ•์–ด๋งŒ ์‚ฌ์šฉํ•ด์ฃผ์„ธ์š”. ex. Documentation โ†’ Docs)

ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ช…์€ ์ด๋ ‡๊ฒŒ ์ง€์–ด์ฃผ์„ธ์š”

  • CAPITAL_SNAKE_CASE ๋กœ ์ž‘์„ฑํ•ด์ฃผ์„ธ์š”.
  • ๋ชฉ์ ์ด๋‚˜ ์„œ๋น„์Šค๋ช… ๋“ฑ์„ ์ ‘๋‘์–ด๋กœ ๋ถ™์—ฌ์„œ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•ด์ฃผ์„ธ์š”.
  • ํ™˜๊ฒฝ๋ณ€์ˆ˜ ์ค‘ key, token, password ๋“ฑ ๋ฏผ๊ฐํ•œ ๊ฐ’์€ ์ ‘๋ฏธ์–ด๋กœ *_SECRET ๋“ฑ์„ ๋ถ™์—ฌ ๋ช…์‹œํ•ด์ฃผ์„ธ์š”.
  • NEXT_PUBLIC_ ์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ํ™˜๊ฒฝ๋ณ€์ˆ˜๋Š” ํด๋ผ์ด์–ธํŠธ ์ธก์—์„œ๋„ ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. ์œ ์˜ํ•ด์ฃผ์„ธ์š”.

์ฝ”๋”ฉ ์Šคํƒ€์ผ์„ ์ง€์ผœ์ฃผ์„ธ์š”


Prettier/ESLint์— ๋ช…์‹œ๋˜์–ด ์žˆ๋Š” ๋ฐ”๋ฅผ ์šฐ์„ ์‹œํ•ฉ๋‹ˆ๋‹ค.

ESLint ๊ทœ์น™

  • ๊ฒ€์‚ฌ ๋Œ€์ƒ : ts/tsx ํŒŒ์ผ๋งŒ lint์—์„œ ๊ฒ€์‚ฌํ•˜๋„๋ก ํ•ฉ๋‹ˆ๋‹ค.
  • Recommended Rule
    • Next.js์˜ Core Web Vitals ๊ทœ์น™ ๋ฐ Typescript ์ „์šฉ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • Storybook ๊ถŒ์žฅ ๊ทœ์น™์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • ESLint ๊ธฐ๋ณธ ๊ถŒ์žฅ ๊ทœ์น™ ๋ฐ TypeScript ESLint ๊ถŒ์žฅ ๊ทœ์น™์„ ํ•จ๊ป˜ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • Common JS ํŒŒ์ผ (*.cjs) ์—์„œ๋Š” require ๊ตฌ๋ฌธ ์‚ฌ์šฉ์„ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • React & JSX
    • React, React Hooks ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • React version์„ ์ž๋™ ๊ฐ์ง€ํ•ฉ๋‹ˆ๋‹ค.
    • JSX ํŒŒ์ผ ํ™•์žฅ์ž๋Š” *.tsx ๋งŒ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • React import ๊ตฌ๋ฌธ ํ•„์ˆ˜ ๊ทœ์น™์„ ๋น„ํ™œ์„ฑํ™”ํ•ฉ๋‹ˆ๋‹ค.
    • props-types ๊ฒ€์‚ฌ๋ฅผ ๋น„ํ™œ์„ฑํ™” ํ•ฉ๋‹ˆ๋‹ค. (TypeScript ์‚ฌ์šฉ ์‹œ ๋ถˆํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.)
    • ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ๋Š” ๋ฐ˜๋“œ์‹œ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

Prettier ๊ทœ์น™

  • ๋“ค์—ฌ์“ฐ๊ธฐ : space 2์นธ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (tab์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)
  • ํ•ญ์ƒ ์„ธ๋ฏธ์ฝœ๋ก ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • Quote ์‚ฌ์šฉ ๊ทœ์น™
    • JS/TS: ' (Single Quote)
    • JSX/HTML ์†์„ฑ: " (Double Quote)
  • Trailing comma ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๊ฐ์ฒด ๋งˆ์ง€๋ง‰์—๋„ ์‰ผํ‘œ ์‚ฌ์šฉ)
  • print width : ํ•œ ์ค„์— ์ตœ๋Œ€ 100์ž ๊นŒ์ง€ ํ—ˆ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • bracket spacing : ๊ฐ์ฒด ์‚ฌ์šฉ ์‹œ ์ค‘๊ด„ํ˜ธ ์–‘์ชฝ์— ๊ณต๋ฐฑ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • arrowParens : ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ, ๋งค๊ฐœ๋ณ€์ˆ˜์— ๊ด„ํ˜ธ๋ฅผ ํ•ญ์ƒ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. (๋‹จ์ผ ๋งค๊ฐœ๋ณ€์ˆ˜์ผ ๋•Œ๋„ ๊ด„ํ˜ธ ์ƒ๋žต ๋ถˆ๊ฐ€๋Šฅ)
  • endOfLine : ์šด์˜์ฒด์ œ์— ๋งž์ถ”์–ด ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • import ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. (ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ)
    • ๊ฐ import ๊ทธ๋ฃน ์‚ฌ์ด์—๋Š” ๋นˆ ์ค„์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.
    • import specifier (์ค‘๊ด„ํ˜ธ ๋‚ด) ๋Š” ์•ŒํŒŒ๋ฒณ ์ˆœ์„œ๋กœ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ˆœ์„œ๋Š” ์•„๋ž˜์™€ ๊ฐ™์Šต๋‹ˆ๋‹ค.
      1. ํ”„๋ ˆ์ž„์›Œํฌ (React, Next.js)
      2. ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ
      3. global style, static assets
      4. @ ๋กœ ์ •์˜๋œ ๊ณตํ†ต module๋“ค
      5. ๋„๋ฉ”์ธ ๋ชจ๋“ˆ (features/*)
      6. ๊ธฐํƒ€ src ํ•˜์œ„ ๊ฒฝ๋กœ
      7. ์ƒ๋Œ€๊ฒฝ๋กœ import
  • tailwindcss class ์ˆœ์„œ๋ฅผ ์ •๋ ฌํ•ฉ๋‹ˆ๋‹ค. (ํ”Œ๋Ÿฌ๊ทธ์ธ ์‚ฌ์šฉ)

๊ธฐํƒ€ ๊ทœ์น™

  • type/interface ์‚ฌ์šฉ ๊ตฌ๋ถ„
    • interface๋ฅผ ์šฐ์„ ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • props๋Š” ๊ตฌ์กฐ๋ถ„ํ•ดํ• ๋‹น ํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
    • children ๋˜ํ•œ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • useRouter ๋Œ€์‹  Link๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.