๐Ÿ’ป

๊ฐœ๋ฐœ ๋ฌธํ™”


๐Ÿ› ๏ธ ๊ธฐ์ˆ  ์Šคํƒ

๋น„๋™๊ธฐ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋Š” ์–ด๋–ป๊ฒŒ ํ•  ๊ฒƒ์ธ๊ฐ€ ?
  • ์ข…ํ˜
    • [ suspense ์ปดํฌ๋„ŒํŠธ + errorboundary ์ปดํฌ๋„ŒํŠธ ] ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ œ์–ดํ•˜๋Š” ๊ฒƒ์ด ์ข‹์•„๋ณด์ธ๋‹ค !
      • errorboundary ์ปดํฌ๋„ŒํŠธ๊ฐ€ ๊ฐ์‹ธ๋Š” ํ˜•ํƒœ
โ‡’ ๋น„๋™๊ธฐ๋Š” suspense ์ปดํฌ๋„ŒํŠธ ๋กœ ์ฒ˜๋ฆฌ, ์—๋Ÿฌ ์ฒ˜๋ฆฌ์™€ ๊ด€๋ จ๋œ errorboundary ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•ด์„  ์ถ”๊ฐ€ ์กฐ์‚ฌ๊ฐ€ ํ•„์š”
 
 

๐Ÿ’„ ์ฝ”๋“œ ์ปจ๋ฒค์…˜

๐Ÿง‘๐Ÿปโ€๐Ÿ’ป eslint, prettier

๐Ÿ“Œ
eslint, prettier ์ถ”์ฒœํ•ด์ฃผ๋Š”๊ฑฐ ๊นŒ์ง€ + prettier์—์„œ ์„ค์ • ์ถ”๊ฐ€ํ•˜๊ธฐ (tap ์นธ ์ˆ˜, ์†์„ฑ ์ค„ ๋ฐ”๊ฟˆ ๋“ฑ๋“ฑ)
  • ํ™‘๋”ฐ์˜ดํ‘œ (โ€™ โ€™) ์‚ฌ์šฉ
 

โšก๏ธ code ๊ทœ์น™

  • ์ปดํฌ๋„ŒํŠธ ์ƒ์„ฑํ•  ๋•Œ๋Š” ํ™”์‚ดํ‘œ ํ•จ์ˆ˜ ์‚ฌ์šฉ
  • if๋ฌธ curly๋ฃฐ ์ ์šฉ
 
๋„ค์ด๋ฐ
  • type, ์ปดํฌ๋„ŒํŠธ, ํŒŒ์ผ๋ช… โ‡’ PascalCase (ex. MainPage.tsx)
  • ํ•จ์ˆ˜, ๋ณ€์ˆ˜(state ๋“ฑ)๋ช… โ‡’ camelCase
    • ํ•จ์ˆ˜๋ช… - ํ•จ์ˆ˜ ๋„ค์ด๋ฐ์€ ๋™์‚ฌ + ๋ช…์‚ฌ (ex. onChange, getUserData โ€ฆ)
    • ํ•จ์ˆ˜๋ช…, ๋ณ€์ˆ˜๋ช… ์ž‘์„ฑ ์‹œ, ํ•จ์ถ•์–ด ๋ง๊ณ  ํ’€๋„ค์ž„ : btn โ‡’ button
  • ์ƒ์ˆ˜๋ช… โ‡’ UPPER_SNAKE_CASE (ex. API_KEY)
 
์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ
  • ์ด๋ฒคํŠธ ๋ฐœ์ƒ ์‹œ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋“ค โ‡’ on~~ (ex. onBackMove)
 
css
  • font-size : rem
  • widht, height : px, vw, vh (100%๊ฐ€ ์•„๋‹Œ %๋Š” ์ง€์–‘)
  • margin, padding : px
  • styled ๋ถ€๋ถ„์€ ์ปดํฌ๋„ŒํŠธ ์•„๋ž˜์— ์ž‘์„ฑํ•˜๊ธฐ
type
  • interface ์‚ฌ์šฉ
 
  • alias ์ ˆ๋Œ€ ๊ฒฝ๋กœ(๊ฒฝ๋กœ ๋ณ„์นญ) โ‡’ /src = @
  • API ์‘๋‹ต ํƒ€์ž… ์œ„์น˜
    • ์žฌ์‚ฌ์šฉ์„ฑ ๋†’์€ ๊ฒƒ์€ type.ts ํด๋”์— ๊ด€๋ฆฌ
 
  • nullish ์—ฐ์‚ฐ์ž
    • ์ผ๋‹จ ์‚ฌ์šฉํ•˜๋˜, PR ๋•Œ ๋…ผ์˜ (๋ˆˆ์— ์ž˜ ์•ˆ ๋ณด์ผ ๊ฒฝ์šฐ ์•ˆ์“ฐ๋Š” ๋ฐฉํ–ฅ์œผ๋กœ ์กฐ์ •)
  • ์‚ผํ•ญ์—ฐ์‚ฐ์ž, ์ถ•์•ฝ ํ‘œํ˜„(&&) vs if๋ฌธ
    • JSX ๋‚ด๋ถ€์—์„  ํ•„์—ฐ์ ์œผ๋กœ ์‚ผํ•ญ์—ฐ์‚ฐ์ž, ์ถ•์•ฝ ํ‘œํ˜„(&&)
    • JSX ์™ธ๋ถ€, ์ฆ‰ ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•  ๋•Œ๋Š” PR ๋•Œ ๋…ผ์˜
    • ์‚ผํ•ญ์—ฐ์‚ฐ์ž ์ค‘์ฒฉ ๊ธˆ์ง€
  • if๋ฌธ โ‡’ ๊ฐ€๋Šฅํ•˜๋ฉด Early Return
  • curly-rule ์‚ฌ์šฉ
 
React ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…
  • ๋ฆฌ์•กํŠธ v18๋กœ ๋„˜์–ด์˜ค๋ฉด์„œ React.FC or props & ๋ฐ˜ํ™˜ ํƒ€์ž…์„ ์ง์ ‘ ์ง€์ •ํ•˜๋Š” ํ˜•ํƒœ๋กœ ํƒ€์ดํ•‘ ํ•ด์ค˜์•ผ ํ•œ๋‹ค.
โ‡’ React ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์€ React.FC์„ ์‚ฌ์šฉ
const Welcom: React.FC<WelcomeProps> = ({ name }) => { ... } // ๊ทผ๋ฐ ์ฑ…์— ๋‚˜์™€์žˆ๋Š” ์˜ˆ์‹œ์—์„œ๋Š” ๋ณ„๋„๋กœ ์ปดํฌ๋„ŒํŠธ ํƒ€์ž…์„ ์ง€์ •ํ•ด์ฃผ์ง€ ์•Š์Œ

๐Ÿ“‚ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ

๐Ÿ“Œ
์ž‘์—… ์ค‘ ํ•„์š”์— ๋”ฐ๋ผ ์œ ๊ธฐ์ ์œผ๋กœ ๋ณ€๋™
(์•„๋ž˜๋Š” ์˜ˆ์‹œ๋กœ ๊ฐ€์ ธ์˜จ ๋””๋ ‰ํ† ๋ฆฌ ๊ตฌ์กฐ) โ”œโ”€โ”€ src โ””โ”€โ”€ assets | โ”‚ โ”œโ”€โ”€ components | | โ””โ”€โ”€ Post // default ์ปดํฌ๋„ŒํŠธ์—์„œ ๋ถ„๋ฆฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์—ฌ๊ธฐ์— ๋„ฃ๊ธฐ | | โ””โ”€โ”€ index.tsx // default ์ปดํฌ๋„ŒํŠธ โ”‚ โ”œโ”€โ”€ types // ๋ช…์„ธ + ํ•œ ๋ฒˆ ์ด์ƒ ์“ฐ์ด๋Š” ํƒ€์ž… ํŒŒ์ผ | โ”œโ”€โ”€ pages | โ”œโ”€โ”€ constants // ์Šคํƒ€์ผ ์ƒ์ˆ˜, ๊ทธ๋ƒฅ ์ƒ์ˆ˜๋Š” ํŒŒ์ผ๋กœ ๋ถ„๋ฆฌ! | โ”œโ”€โ”€ hooks | โ”œโ”€โ”€ apis | โ”œโ”€โ”€ atoms | โ”œโ”€โ”€ utils | โ”œโ”€โ”€ styles | โ”œโ”€โ”€ storage | โ”œโ”€โ”€ App.tsx | โ”œโ”€โ”€ index.tsx โ””โ”€โ”€
 

โš™๏ธ github

โŒฅ ๋ธŒ๋žœ์น˜ ์ „๋žต

๐Ÿ“Œ
github flow ๊ธฐ๋ฐ˜
main : ๋ฐฐํฌ ์ „์šฉ ๋ธŒ๋žœ์น˜
develop : ๊ฐœ๋ฐœ ์ „์šฉ ๋ธŒ๋žœ์น˜
 
pull ๋ฐ›์„ ๋•Œ๋Š” develop๋กœ ๋ถ€ํ„ฐ ๋ฐ›์œผ๋ฉฐ, develop์—์„œ ๋ธŒ๋žœ์น˜ ๋ถ„๊ธฐ๊ฐ€ ์ผ์–ด๋‚œ๋‹ค.
  • ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ํ•  ๋•Œ๋Š” feature/๊ธฐ๋Šฅ๋ช…
  • ๋ฌด์–ธ๊ฐ€๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” fix/๊ธฐ๋Šฅ๋ช…
  • ์Šคํƒ€์ผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” style/๊ธฐ๋Šฅ๋ช…
  • ์ฃผ์„ ์ œ๊ฑฐ, ๋“ฑ๋“ฑ ๋ฌธ์„œ ์ž‘์—… docs/๊ธฐ๋Šฅ๋ช…
  • ์ด์Šˆ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด feature/#์ด์Šˆ๋ฒˆํ˜ธ/๊ธฐ๋Šฅ๋ช…
  • ๊ธฐ๋Šฅ ๋ช… ์ž‘์„ฑ ์‹œ, ๋‹จ์–ด๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ์ผ ๊ฒฝ์šฐ -์œผ๋กœ ๊ตฌ๋ถ„ํ•œ๋‹ค.
 
PR ๋ณด๋‚ผ ๋•Œ feature/@ โ†’ develop ๋กœ ๋ณด๋‚ธ๋‹ค. โ‡’ PR ๋ณด๋‚ด๊ณ  ๋ธŒ๋žœ์น˜๋ฅผ ์‚ญ์ œํ•˜๋Š” ๋ฐฉ์‹
  • ์‹ค์งˆ์ ์œผ๋กœ ๋ ˆํฌ์— ๋‚จ์•„์žˆ๋Š” ๋ธŒ๋žœ์น˜๋Š” main, develop
 
develop ๋ธŒ๋žœ์น˜์—์„œ ์ž‘์—… ๋‚ด์šฉ ๊ฒ€์ˆ˜ํ•œ ํ›„ ๋ฐฐํฌ ์ „ main ๋ธŒ๋žœ์น˜๋กœ ๋จธ์ง€
 

๐ŸŒˆ ์ปค๋ฐ‹ ์ปจ๋ฒค์…˜

๐Ÿ“Œ
gitmoji + ํ…œํ”Œ๋ฆฟ ๊ธฐ๋ฐ˜ commit ์ž‘์„ฑ (+ ์ด์Šˆ ๋ฒˆํ˜ธ)
 
  • ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€ ํ˜•ํƒœ (ํ…œํ”Œ๋ฆฟ ํ˜•ํƒœ์— ๋งž๊ฒŒ ์ˆ˜์ • ํ•„์š”)
โœจ ํƒ€์ด๋จธ ๊ธฐ๋Šฅ ์ถ”๊ฐ€ - ๋ฉ”์ธ ํŽ˜์ด์ง€์— ํƒ€์ด๋จธ ๊ธฐ๋Šฅ์„ ์ถ”๊ฐ€ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ด์Šˆ ๋ฒˆํ˜ธ : #6
 
  • ๊นƒ๋ชจ์ง€ ์‚ฌ์šฉ๋ฒ•
โšก๏ธ Gitmoji ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ (+ ๊นƒ๋ชจ์ง€ ํˆด ์†Œ๊ฐœ)
Gitmoji ๋ž€? gitmoji๋ž€ git + emoji๋ฅผ ํ•ฉ์ณ์„œ ๋ถ€๋ฅด๋Š” ๋ง๋กœ emoji๋ฅผ ์ด์šฉํ•˜์—ฌ commit message๋ฅผ ์ž‘์„ฑํ•˜๋Š” tool์ด๋ผ๊ณ  ๋ณด๋ฉด ๋  ๋“ฏํ•˜๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ๊ทธ๋ƒฅ ๊ธ€๋กœ๋งŒ ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ์จ์™”๊ฒ ์ง€๋งŒ, ๋ฉ”์„ธ์ง€์— ์ด๋ชจ์ง€(์ด๋ชจํ‹ฐ์ฝ˜)์„ ๋”ํ•˜๋ฉด, ๋‚˜์ค‘์— ์ปค๋ฐ‹ ๋ฉ”์„ธ์ง€๋ฅผ ํ›‘์–ด๋ณผ๋•Œ ํ›จ์”ฌ ๊ฐ€๋…์„ฑ ๋†’๊ฒŒ ์ฝ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•ด๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์— ์ด๋ชจํ‹ฐ์ฝ˜์„ ์‚ฌ์šฉํ•˜๋ฉด ์‚ฌ์šฉ๋œ ์ด๋ชจํ‹ฐ์ฝ˜๋งŒ ๋ณด๊ณ  ์ปค๋ฐ‹์˜ ๋ชฉ์ ์ด๋‚˜ ์˜๋„๋ฅผ ์‰ฝ๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์œ„์˜ ์ปค๋ฐ‹ ๋กœ๊ทธ์ฒ˜๋Ÿผ ๋‹จ์ˆœํ•˜๊ฒŒ ๊ธ€๊ท€๋งŒ ๋‚˜์—ดํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ์‹œ๊ฐ์ ์ธ ๊ฐ•์กฐ๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ๋Š”๊ฑธ ๋А๋‚„ ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ชจ์ง€ ์•„์ด์ฝ˜์— ์ต์ˆ™ํ•ด์กŒ๋‹ค๋ฉด, ๊ธ€์„ ์ฝ์ง€ ์•Š์•„๋„ ์ „์ฒด์ ์œผ๋กœ ์–ด๋–ค ์ผ์ด ์žˆ์—ˆ๋Š”์ง€ ํ•œ๋ˆˆ์— ๋ณผ ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด, โœจ ๋ชจ์–‘์˜ ์ด๋ชจ์ง€๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€๋ฅผ ์˜๋ฏธํ•˜๋Š” ๊นƒ๋ชจ..
โšก๏ธ Gitmoji ์‚ฌ์šฉ๋ฒ• ์ •๋ฆฌ (+ ๊นƒ๋ชจ์ง€ ํˆด ์†Œ๊ฐœ)
 
  • ์ปค๋ฐ‹๊ณผ ์ด์Šˆ ์—ฐ๊ฒฐํ•˜๊ธฐ
[๊ฐœ๋ฐœ] Github ์ด์Šˆ์™€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ๊ฒฐํ•ด๋ณด์ž
์•ˆ๋…•ํ•˜์„ธ์š” devport ์ž…๋‹ˆ๋‹ค. Github์— ์ด์Šˆ๋ฅผ ๋Œ€์‘ํ•˜๊ณ  ์ปค๋ฐ‹ํ•  ๋•Œ์— ํŠน์ • ํฌ๋งท์„ ์‚ฌ์šฉํ•˜๊ฒŒ๋œ๋‹ค๋ฉด ์ปค๋ฐ‹๋œ ๋‚ด์šฉ์ด ์ž๋™์œผ๋กœ ์ด์Šˆ์— ๋ฐ˜์˜๋˜๋Š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•ด์„œ ๊ฐ„๋‹จํžˆ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. Github commit message ์ด์Šˆ์— ์ž๋™ ๋งํฌ Github์˜ Repository์— ๋Œ€ํ•˜์—ฌ Commit Message์— "#[Issue Number]"๋ฅผ ์ž…๋ ฅํ•˜๊ฒŒ ๋  ๊ฒฝ์šฐ ์ž๋™์œผ๋กœ ์ด์Šˆ์— ์ปค๋ฐ‹ ๋‚ด์šฉ์„ ์ถ”๊ฐ€ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€๋œ ์ด์Šˆ๋Š” ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€์™€ ํ•จ๊ป˜ ๋งํฌ๋ฅผ ์ œ๊ณตํ•˜๊ฒŒ ๋˜๋ฉฐ ๋งํฌ๋ฅผ ํด๋ฆญํ•˜๊ฒŒ ๋˜๋ฉด ๋ณ€๊ฒฝ ์ด๋ ฅ์— ๋Œ€ํ•˜์—ฌ ์ถœ๋ ฅ ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ปค๋ฐ‹๊ณผ ํ•จ๊ป˜ ์ด์Šˆ๋ฅผ Close ํ•  ์ˆ˜ ์žˆ๋Š” Keyword ์ด์Šˆ์— ์˜ฌ๋ผ์˜จ ๋ฒ„๊ทธ ๋˜๋Š” ๊ธฐ๋Šฅ์„ ์ˆ˜์ •ํ•˜์˜€์„๋•Œ์— Commit Message์— ์ ์ ˆํ•œ ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ๋˜๋ฉด ์ด์Šˆ๋ฅผ ๊ฐ™์ด Clos..
[๊ฐœ๋ฐœ] Github ์ด์Šˆ์™€ ์ปค๋ฐ‹ ๋ฉ”์‹œ์ง€๋ฅผ ์—ฐ๊ฒฐํ•ด๋ณด์ž
 
์•„๋ž˜ ๋ช…๋ น์–ด ์‚ฌ์šฉ์‹œ ์ปค๋ฐ‹ template ์ ์šฉ ๊ฐ€๋Šฅ. ํŒŒ์ผ ์ด๋ฆ„์„ .gitmessage.txt ๋กœ ๋ณ€๊ฒฝ(ํŒŒ์ผ ๋ช… ์•ž์— ์˜จ์  ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค)ํ•ด์ฃผ์‹œ๊ณ  ํŒŒ์ผ์ด์žˆ๋Š” ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋ช…๋ น์–ด๋ฅผ ์‹คํ–‰ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. or ๋””๋ ‰ํ† ๋ฆฌ๊นŒ์ง€ ์ ์–ด์ฃผ์‹œ๋ฉด๋ฉ๋‹ˆ๋‹ค
  • git config --global commit.template .gitmessage.txt
  • git config --global commit.template /test/study/.gitmessage.txt
 
ํด๋” ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„์„ ์œ„ํ•˜์—ฌ
git config core.ignorecase false ์œผ๋กœ ๋Œ€์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ • ํ›„
git rm -r --cached . ๋กœ ํ˜„์žฌ๊ฒฝ๋กœ์˜ ์บ์‹œ๋ฅผ ์ง€์›Œ์ฃผ์‹ ๋’ค add, commit ๋“ฑ ์ง„ํ–‰ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค
 
์Šฌ๋ž™&๊นƒ ์—ฐ๋™
 

 
๐Ÿชฃ
ํœด์ง€ํ†ต