๐Ÿ“

ํ”„๋กœ์ ํŠธ ํšŒ์˜ ๊ธฐ๋ก (24.03.10)

 

๋ฆฌํŒฉํ† ๋ง ๋ฆฌ์ŠคํŠธ (ํ˜ธ๋ฏผ)

  • Axios ์ฝ”๋“œ ์ถ”์ƒํ™”
    • ํ”„๋กœ์ ํŠธ ๋‹น์‹œ์— axios ์ฝ”๋“œ์— ๋Œ€ํ•œ ์ถ”์ƒํ™”๊ฐ€ ์ „ํ˜€ ์ง„ํ–‰์ด ์•ˆ๋˜์—ˆ๋˜๊ฑธ๋กœ ๊ธฐ์–ตํ•˜๋Š”๋ฐ ํ•ด๋‹น ๋‚ด์šฉ์ด ๋ฐ˜์˜๋˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • RTK โ†’ tanstack Query
    • ์ „์ฒด ์ฝ”๋“œ์— ๋ฐ˜์˜ํ•œ๋‹ค๊ธฐ๋ณด๋‹จ ํ•™์Šต์ด ์ฃผ ๋ชฉ์ ์ผ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
    • RTK์— ๋Œ€ํ•œ ๊ธฐ์ˆ ๊ณต์œ ๊ฐ€ ๋˜์–ด์žˆ์ง€ ์•Š์•„์„œ ๋‘˜๋‹ค ๊ธฐ์ˆ ๊ณต์œ ๊ฐ€ ๋˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.
    • tanstack์„ ์‚ฌ์šฉํ–ˆ์„ ๋•Œ Suspense๋‚˜ ErrorBoundary๋ฅผ ํ†ตํ•ด์„œ ๋กœ๋”ฉ, ์—๋Ÿฌ์ฒ˜๋ฆฌ๋ฅผ ์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”
  • styled-component
    • ํ˜„์žฌ styled-component์— ๋„ค์ด๋ฐ์ด ์ ์šฉ์ด ์•ˆ๋˜์–ด์žˆ์–ด์„œ ํ•˜๋‚˜์˜ ๋„ค์ด๋ฐ ์ปจ๋ฒค์…˜์ด ์žกํžˆ๋ฉด ํ†ต์ผ์„ฑ ๊ฐ–์ถ”๊ธฐ๊ฐ€ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.
    • ํ™”๋ฉด ๋ ˆ์ด์•„์›ƒ ์žก์„ ๋•Œ ๊ฐ์ž ๋ ˆ์ด์•„์›ƒ์„ ์žก์•„์„œ ํ†ต์ผ์„ฑ์ด ์—†๋Š”๋ฐ ๋””์ž์ธ + ์ˆ˜์ •์„ ๊ฐ™์ดํ•˜๋Š” ๋ฐฉํ–ฅ๋„ ์ข‹๊ฒ ์–ด์š”
    • ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์ ์šฉ๋„ ๊ฐ™์ดํ•˜๋ฉด ์ข‹๊ฒ ๋„ค์š”.
  • accessToken ๋ฉ”๋ชจ๋ฆฌ ๋ณด๊ด€
    • accessToken์ด ์›น ์Šคํ† ๋ฆฌ์ง€์— ๋ณด๊ด€๋˜๋ฉด ํƒˆ์ทจ์— ๋Œ€ํ•œ ์œ„ํ—˜์„ฑ์ด ์กด์žฌํ•ฉ๋‹ˆ๋‹ค.
    • ์ „์—ญ์ƒํƒœ๊ด€๋ฆฌ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ๋„ ์ข‹์€ ๋ฐฉ๋ฒ•์ผ ๊ฒƒ ๊ฐ™๊ณ  tanstack์„ ํ†ตํ•ด์„œ ๊ด€๋ฆฌํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.
  • ํด๋”๊ตฌ์กฐ ๋ณ€๊ฒฝ
    • ํ˜„์žฌ ํŽ˜์ด์ง€๋ณ„ ์ปดํฌ๋„ŒํŠธ๋„ src/components ์— ํฌํ•จ๋˜์–ด์žˆ๋Š”๋ฐ ํ•ด๋‹น ํŽ˜์ด์ง€๋ณ„๋กœ ๊ตฌ๋ถ„ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.
    • ๊ทธ๋ฆฌ๊ณ  Interface Styled ์œ„์น˜ํ•ด์•ผํ•˜๋Š” ๊ณณ์„ ๋ช…ํ™•ํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•˜๋ฉด ์ข‹๊ฒ ์–ด์š”
  • Custom Hooks
    • ์ปดํฌ๋„ŒํŠธ๋ณ„๋กœ ๊ธฐ๋Šฅํ•ด์•ผํ•˜๋Š”๊ฒƒ๋“ค์ด Custom Hooks๋กœ ๋‚˜๋ˆ ์ ธ์žˆ์ง€ ์•Š๋Š” ์ฝ”๋“œ๋“ค์ด ๋งŽ์€๋ฐ ์ฝ”๋“œ๋ถ„๋ฆฌ๊ฐ€ ์žˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค
    • ex) API ํ˜ธ์ถœ์ฝ”๋“œ , Form ์ƒํƒœ๊ด€๋ฆฌ ๋“ฑ
  • React-Hook-Form
    • ํผ ์ƒํƒœ๊ด€๋ฆฌ๊ฐ€ ํ˜„์žฌ state ์™€ useEffect๋กœ ๊ด€๋ฆฌ๋˜๋Š”๊ฒŒ ๋งŽ์€๋ฐ ์ €ํฌ QA๋ฐ›์•˜๋˜๋Œ€๋กœ React-Hook-Form ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š”๊ฒƒ๋„ ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค.
  • Story book
    • ์Šคํ† ๋ฆฌ๋ถ ๋„์ž…ํ•ด๋ณด๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”.
    • Storybook์„ ํ†ตํ•ด์„œ ui ์Šคํ† ๋ฆฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”
    • msw๋ฅผ ํ†ตํ•ด์„œ API ๋ฅผ ๋ชจํ‚นํ•ด์„œ ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณผ ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์•„์š”
  • ์ฝ”๋“œ์ปจ๋ฒค์…˜ ๊ทœ์ • ๋ณ€๊ฒฝ ๋ฐ ์ ์šฉ
    • ์ฝ”๋“œ์ปจ๋ฒค์…˜์„ ์ •ํ–ˆ๋Š”๋ฐ ์‹ค์งˆ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๋ฉด์„œ ๋ฐ˜์˜ํ•˜๊ธฐ ์–ด๋ ค์› ๋˜๊ฒƒ๋„ ๋งŽ์•˜๊ณ  ๋ฐ˜์˜์ด ์•ˆ๋œ์• ๋“ค๋„๋งŽ์•„์„œ ๊ฐ™์ด ์ ์šฉํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”
 
โ‡’ ๊ธฐ์ˆ ์ ์ธ ๋ณ€๊ฒฝ์‚ฌํ•ญ๋“ค๋„ ํฌํ•จ๋˜๊ณ  ์ฝ”๋“œ ํ€„๋ฆฌํ‹ฐ์ ์ธ ์ˆ˜์ •๋“ค๋„ ์กด์žฌํ•˜๋Š”๋ฐ ๋ฆฌํŒฉํ† ๋ง์˜ ๋ชฉ์ ์„ ํ•™์Šต์œผ๋กœ ๋†“๊ณ  ์ƒ๊ฐํ–ˆ์„ ๋•Œ ๋ชจ๋“  ๋‚ด์šฉ์€ ์ˆ˜์ •๋ณด๋‹จ ๊ธฐ์ˆ ๊ณต์œ ์— ์ดˆ์ ์„ ๋‘๋Š”๊ฒŒ ์ข‹์„ ๊ฒƒ ๊ฐ™์•„์š”. *๊ฐœ์ธ์ ์ธ ์˜๊ฒฌ์ž…๋‹ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง ๋ฆฌ์ŠคํŠธ (์ˆ˜ํ˜)

  • Status ํŒŒ์ผ ์‚ญ์ œ
    • Status ๋Š” ๋ฆฌ๋•์Šค ์Šฌ๋ผ์ด์Šค๋กœ ๋กœ๋”ฉ ๋ฐ ์—๋Ÿฌ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋ ค๊ณ  ๋งŒ๋“ค์—ˆ์ง€๋งŒ, ์‚ฌ์šฉํ•˜๊ธฐ ๋ฒˆ๊ฑฐ๋กญ๊ณ  ํ™•์žฅ์„ฑ์žˆ๊ฒŒ ๊ตฌํ˜„๋œ ๊ฒƒ์ด์•„๋‹ˆ๋ผ. ๋” ๊ธฐ๋Šฅ์„ ๋ถ™์ด๊ธฐ์— ์• ๋งคํ•ด์ง„ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ๋”๊ตฐ๋‹ค๋‚˜ ๋ฉ”์ธ ํŽ˜์ด์ง€์„œ๋งŒ ์ ์šฉ๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค. ํƒ ์Šคํƒ์œผ๋กœ ๋ฆฌํŒฉํ† ๋ง ์ž‘์—…์„ ํ•œ๋‹ค๋ฉด ํ•ด๋‹น ์Šฌ๋ผ์ด์Šค๋ฅผ ์ œ๊ฑฐํ•˜๋Š”๊ฒƒ์ด ์ข‹์•„๋ณด์ž…๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๋” ์ฝ๊ธฐ์‰ฝ๊ฒŒ ๋ฆฌํŒฉํ† ๋ง
    • ๋ช…๋ นํ˜•์œผ๋กœ ์ž‘์„ฑ๋˜์–ด์žˆ๊ฑฐ๋‚˜, ๋กœ์ง์˜ ํ๋ฆ„์ด ํฉ์–ด์ ธ์žˆ๋Š” ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ๋ฆฌํŒฉํ† ๋งํ•ด์•ผํ• ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ์ปดํฌ๋„ŒํŠธ ์žฌ์„ค๊ณ„
    • ์ปดํฌ๋„ŒํŠธ๋“ค์„ ์• ์ดˆ์— ์ค‘๋ณต์ด ๋ฐœ์ƒํ•˜์ง€์•Š๋„๋ก ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋“ค๊ณผ, ์ค‘๋ณต๋  ์ปดํฌ๋„ŒํŠธ๋“ค ํ˜น์€ ํ•จ์ˆ˜๋“ค์„ ๋ฏธ๋ฆฌ ์ถ”์ƒํ™”ํ• ์ˆ˜์žˆ๋„๋ก ์˜ˆ์ƒํ•˜์—ฌ ์žฌ์„ค๊ณ„ ํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋ฌผ๋ก  ์ฝ”๋“œ๋ฅผ ๋‹ค ๋Œ€์ฒดํ•˜์ง„ ๋ชปํ•˜๊ฒ ์ง€๋งŒ ์—ฌ๊ฑด์ด๋œ๋‹ค๋ฉด ๋ช‡๋ช‡ ๋ถ€๋ถ„์€ ์žฌ์„ค๊ณ„๋œ ์ฝ”๋“œ๋กœ ๋Œ€์ฒดํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • Import ๊ตฌ๋ฌธ ๋ฆฐํŠธ ๊ทœ์น™ ๊ตฌํ˜„
    • ์ €๋ฒˆ์— ํ•ด๋‹น ๋ฆฐํŠธ๋ฅผ ์™„๋ฒฝํžˆ ์„ค์ •ํ•˜์ง€์•Š์•„์„œ ์ผ์ผ์ด ์ˆœ์„œ์—๋งž๊ฒŒ import ๋ฅผ ์žฌ์ •๋ ฌ ํ•ด์คฌ๋Š”๋ฐ. ๋ฆฐํŠธ๊ทœ์น™์„ ๋งŒ๋“ค์–ด ํ•ด๋‹น๋ถ€๋ถ„์„ ์ž๋™ํ™” ํ• ์ˆ˜ ์žˆ์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.
  • ํ…Œ์ŠคํŠธ๋ฐฐํฌ ์„œ๋ฒ„๋ฅผ ๋„์šฐ๊ธฐ
    • ์ด๋ฒˆ 3์ฐจํŒ€์—์„  ํ•ด๋‹น ๋ถ€๋ถ„์„ ๊ตฌํ˜„ ํ•ด์ฃผ์…”์„œ. Pr ์ด์˜ฌ๋ผ๊ฐ€๋ฉด ๋ฐ”๋กœ ํ•ด๋‹น ๊ตฌํ˜„์„ ์›น์—์„œ ํ…Œ์ŠคํŒ… ํ•ด๋ณผ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฒˆ์— ๋ฏธ๋ฆฌ cicd? ๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ์ž‘์—…ํ•œ๋‹ค๋ฉด. ์ง์ ‘ ๋กœ์ปฌ์—์„œ ๋ธŒ๋žœ์น˜๋ฅผ ๋ฐ”๊ฟ” ์‹คํ–‰ํ•˜์—ฌ ํ…Œ์ŠคํŠธ ํ•˜์ง€์•Š์•„๋„๋ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์Šคํ† ๋ฆฌ๋ถ์„ ๋ฐฐํฌํ•ด๋ณด๋Š”๊ฒƒ๋„ ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

๋ฆฌํŒฉํ† ๋ง ๋ฆฌ์ŠคํŠธ (์ง€ํ˜ธ)

  • ๋ชจ๋ฐ”์ผ ๋Œ€์‘
    • ๋ชจ๋ฐ”์ผ ๋Œ€์‘์„ ๋ชปํ•œ๊ฒŒ ๊ฑธ๋ ค์„œ ์ฝ”๋“œ ๋งˆํฌ์—…์„ ๋‹ค๋“ฌ๊ณ  ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ ํ™•์ธ & ๊ตฌํ˜„๋ฌผ ํ™•์ธ ๋ชจ๋‘ ๊ดœ์ฐฎ๊ฒŒ ๋ณด์ด๋ ค๋ฉด ์–ด๋А์ •๋„ ๋Œ€์‘์€ ๋˜์–ด์•ผ ํ•˜์ง€ ์•Š์„๊นŒ ๊ณ ๋ฏผ๋˜๋„ค์š”
  • ๋ฉ”์ธ ํ™”๋ฉด FCP ๊ฐœ์„ 
    • ์ฒซ ํ™”๋ฉด์—์„œ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธธ์–ด์ง€๋ฉด ์ด์šฉ์ž ์œ ์ถœ ํ™•๋ฅ ์ด ๋†’์•„์ง€๋Š” ๋งŒํผ ๋น ๋ฅธ ํ™”๋ฉด์„ ๋ณด์—ฌ์ค˜์•ผํ• ํ…๋ฐ, API ๋ถˆ๋Ÿฌ์˜ค๋Š” ์–‘์ด ๋งŽ์•„์„œ ์ด๋ฅผ ์ข€ ์ค„์ผ ๋ฐฉ๋ฒ•์€ ์—†์„๊นŒ ์‹ถ์–ด์กŒ์Šต๋‹ˆ๋‹ค. (๋”ฑํžˆ ๋ฐฉ๋ฒ•์ด ๋– ์˜ค๋ฅด๋Š”๊ฑด ์•„๋‹ˆ์—์š”)
  • ๊ทธ ์™ธ์—๋„ tanstack-query, react-hook-form ๋ชจ๋‘ ์ข‹์€ ๊ฒƒ ๊ฐ™์•„์š” ํ•™์Šต ๋ชฉ์ ์—์„œ ์ด์ œ ์‹ค์ œ ์ž˜ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ํ•œ๋‹ค ๋ณด๋ฉด ์˜๋ฏธ์žˆ๋Š” ์›์ธ๊ณผ ๊ฐœ์„ ์ฑ…์ด๋ผ ์ƒ๊ฐ๋˜๊ตฌ์š”.
    •