#Clone #Wanted #Review

SANGKU OHยท2020๋…„ 9์›” 13์ผ
1
post-thumbnail

๐ŸŽฌ์˜์ƒ๋ณด๊ธฐ: ์˜์ƒ ๋ณด๊ธฐ
๐Ÿ“ŠTrello: Trello ๋ณด๊ธฐ

Wecode ์›ํ‹ฐ๋“œ ํด๋ก ์ฝ”๋”ฉ ํ”„๋กœ์ ํŠธ(Front-end)

ํ”„๋กœ์ ํŠธ ์†Œ๊ฐœ๐Ÿšจ

  • ์ง€์ธ์ถ”์ฒœ ์‹œ์Šคํ…œ ๋ฐ ๊ฐœ๋ฐœ์ง๊ตฐ ์ฑ„์šฉ์„ ์ฃผ๋ ฅ์œผ๋กœ ํ•˜๋Š” ์ฑ„์šฉํ”Œ๋žซํผ wanted์˜ ํŽ˜์ด์ง€ clone

๊ฐœ๋ฐœ ๊ธฐ๊ฐ„๐Ÿ“†

  • 2020/8/31 ~ 2020/9/11(2 Weeks)

๊ตฌ์„ฑ์› ๐Ÿ‘จโ€๐Ÿ’ป

  • ํ”„๋ก ํŠธ์—”๋“œ 3๋ช…
  • ๋ฐฑ์—”๋“œ 2๋ช…

๊ฐœ๋ฐœ ๋ชฉ์ ๐Ÿ

  • CRA์„ ํ†ตํ•œ ์ดˆ๊ธฐ ํ”„๋กœ์ ํŠธ ์„ธํŒ… ์—ฐ์Šต
  • React.js(functional components)๋ฅผ ํ†ตํ•œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ
  • Hooks์˜ ์ ์šฉ
  • Stlyed Component์˜ ์ ์šฉ
  • git์„ ํ†ตํ•œ ํ”„๋ก ํŠธ์—”๋“œ์™€ ๋ฐฑ์—”๋“œ์˜ ํ˜‘์—… ๊ฒฝํ—˜

์‚ฌ์šฉ ๊ธฐ์ˆ  & ๊ตฌํ˜„ ๊ธฐ๋Šฅโš™๏ธ

์‚ฌ์šฉ ๊ธฐ์ˆ 

  • React.js(Functional components)
  • React Router
  • Styled components
  • RESTful API
  • D3.js
  • Git

์ฃผ์š” ๊ตฌํ˜„ ๊ธฐ๋Šฅ

์ง์ ‘ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์€ โœ…, ํŒ€์›์ด ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์€ โœ“ ํ‘œ์‹œ
1) ๐Ÿ“„ ํšŒ์›๊ฐ€์ž… / ๋กœ๊ทธ์ธ ํŽ˜์ด์ง€

  • โœ“Modal login
  • โœ“์ด๋ฉ”์ผ ๋ฐ ํŒจ์Šค์›Œ๋“œ ์–‘์‹ ํ™•์ธ ๊ธฐ๋Šฅ
  • โœ“ํšŒ์›๊ฐ€์ž… ๊ธฐ๋Šฅ(์•ฝ๊ด€ ๋™์˜ ๋ฐ ํŠน์ • ์กฐ๊ฑด)
  • โœ“SNS ๋กœ๊ทธ์ธ ๊ธฐ๋Šฅ

2) ๐Ÿ“„ ๋ฉ”์ธํŽ˜์ด์ง€

  • โœ“์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ
  • โœ“scroll Pagination

3) ๐Ÿ“„ ํƒ์ƒ‰ํŽ˜์ด์ง€

  • โœ“์ด๋ฏธ์ง€ ์Šฌ๋ผ์ด๋“œ
  • โœ“๊ฐ ํšŒ์‚ฌ ํŽ˜์ด์ง€์˜ ์„ธ๋ถ€ data ์—ฐ๋™
  • โœ“login ๊ณ„์ •์˜ ์œ ์ €์ •๋ณด, ์ด๋ ฅ์„œ ์ •๋ณด ์—ฐ๋™
  • โœ“ํŒŒ์ผ ์—…๋กœ๋“œ ๊ธฐ๋Šฅ
  • โœ“ํŠน์ • ํšŒ์‚ฌ ์ง€์›ํ•˜๊ธฐ ๊ธฐ๋Šฅ

3) ๐Ÿ“„ ์ง๊ตฐ๋ณ„ ์—ฐ๋ด‰ ํŽ˜์ด์ง€

  • โœ… ์ง๊ตฐ, ์ง๋ฌด, ์—ฐ๋ด‰์˜ filter ๊ธฐ๋Šฅ
  • โœ… filter ์กฐ๊ฑด์— ๋”ฐ๋ฅธ chart ์—ฐ๋ด‰๋ฐ์ดํ„ฐ ๋ฐ˜์˜
  • โœ… ์„ ํƒ ์—ฐ๋ด‰์— ๋”ฐ๋ฅธ ํŠน์ • chart ์ปฌ๋Ÿฌ ๋ณ€๊ฒฝ
  • โœ… ํ‰๊ท  ์—ฐ๋ด‰ ๋ฐ์ดํ„ฐ์™€ ์ž„์˜์˜ ์—ฐ๋ด‰๋ฐ์ดํ„ฐ์˜ % ๋น„๊ต
  • โœ… pagination component์˜ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง ์ ์šฉ

4) ๐Ÿ“„ ์ง€์›ํ˜„ํ™ฉ ํŽ˜์ด์ง€

  • โœ… login ๊ณ„์ •์˜ ์ง€์› ๋‚ด์—ญ data ์—ฐ๋™
  • โœ… ์ง€์› ํ˜„ํ™ฉ ์š”์•ฝ ํ™•์ธ
  • โœ… ์ง€์› ํ˜„ํ™ฉ ์„ธ๋ถ€ ํ™•์ธ

#code review๐Ÿ”Ž

- โญ๏ธ ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง
: React์—์„œ๋Š”, ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋งŒ๋“ค์–ด์„œ ์›ํ•˜๋Š” ๋™์ž‘์„ ์บก์Šํ™” ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋‚˜์„œ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒํƒœ์— ๋”ฐ๋ผ ์ปดํฌ๋„ŒํŠธ์˜ ์ผ๋ถ€๋งŒ ๋ Œ๋”๋ง ํ•  ์ˆ˜ ์žˆ๋‹ค!

๊ณ„์† ์จ๋จน๊ฒŒ ๋˜๋Š” ์กฐ๊ฑด๋ถ€ ๋ Œ๋”๋ง์ด๋‹ค!

pagination ๊ธฐ๋Šฅ์ด ์žˆ๋Š” component๋ฅผ ๊ฐ€์ ธ์™”๋‹ค.
ํ•˜์ง€๋งŒ ๋‚˜๋Š” pagination๋„.. ๋งŽ์€ ๋ฐ์ดํ„ฐ๋„ ํ•„์š”๊ฐ€ ์—†์—ˆ๋‹ค.

  • import ํ•˜๋Š” JobCard component์— name ์ด๋ผ๋Š” ์†์„ฑ์„ ๋ถ€์—ฌํ–ˆ๋‹ค.

  • JobCard component์—์„œ props๋กœ ์†์„ฑ์„ ๋ฐ›๊ณ , pagination์˜ LIMIT์— name ์†์„ฑ์ด salary์ธ ๊ฒฝ์šฐ์—๋Š” LIMIT = 8 ๋˜๋„๋ก ์กฐ๊ฑด์„ ๋ถ€์—ฌํ–ˆ๋‹ค.

  • ๋™์ผํ•œ ๋ฐฉ๋ฒ•์œผ๋กœ fetch๋ฅผ ํ•˜๋Š” ํ•จ์ˆ˜๋ถ€๋ถ„์—๋„ ์กฐ๊ฑด์„ ์ฃผ์—ˆ๋‹ค. name ์†์„ฑ์ด salary์ธ ๊ฒฝ์šฐ์—๋Š” fetch๋ฅผ ๋ฐ›๋Š” state๋ฅผ false๋กœ ํ•˜๋Š” ์กฐ๊ฑด์„ ๋ถ€์—ฌํ–ˆ๋‹ค.

๐Ÿšจํ•˜์ง€๋งŒ ๊ณตํ†ต์œผ๋กœ ์“ฐ๋Š” component๋ฅผ ์ˆ˜์ •ํ•  ๋•Œ๋Š” ๊ผญ!๊ผญ!๊ผญ! ํŒ€์›๊ฐ„์˜ ์ƒ์˜๋ฅผ ํ†ตํ•ด ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์ž!

- โญ๏ธ Filter function(feat. Hooks)
:Hooks ๊ทœ์น™
1) ์ตœ์ƒ์œ„(at the top level)์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ, ์ค‘์ฒฉ๋œ ํ•จ์ˆ˜ ๋‚ด์—์„œ Hook์„ ์‹คํ–‰ํ•˜์ง€ ๋งˆ์„ธ์š”.
2) React ํ•จ์ˆ˜ ์ปดํฌ๋„ŒํŠธย ๋‚ด์—์„œ๋งŒ Hook์„ ํ˜ธ์ถœํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • fetch ํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด data๋ฅผ ์ „์†ก๋ฐ›๋Š” ์ตœ์ƒ์œ„ ๋ถ€๋ชจ์—์„œ data๋ผ๋Š” state๋ฅผ ์„ค์ •ํ•˜๊ณ  useEffect๋ฅผ ํ†ตํ•ด ๋ Œ๋”์‹œ์— fetch๋ฅผ ํ•  ์ˆ˜์žˆ๋Š” loadData ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.


    FirstDepth
  • salaryList ๋ผ๋Š” ๋ณ€์ˆ˜์— ํ•„์š”ํ•œ ๋ถ€๋ถ„์˜ data๋ฅผ ๋‹ด์•„์ฃผ์—ˆ๋‹ค.
  • getFirstDepth ๋ถ€ํ„ฐ ๊ฐ depth์˜ filter๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ๋‹ค.
  • ES6์˜ Set๊ณผ add๋ฅผ ํ™œ์šฉํ•ด ์ค‘๋ณต๋œ ๊ฐ’์„ ์ œ์™ธํ•œ ํ•„์š”ํ•œ ๊ฐ’๋งŒ mainCategory์— ๋‹ด์•˜์Šต๋‹ˆ๋‹ค.
    SecondDepth
  • ์œ„์™€ ๊ฐ™์€ ๋ฐฉ๋ฒ•์„ ํ™œ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋งŒ FirstDepth์™€ ๋‹ค๋ฅด๊ฒŒ ์ธ์ž๊ฐ€ ๋“ค์–ด๊ฐ์— ๋”ฐ๋ผ ํ•จ์ˆ˜๊ฐ€ ์ž‘๋™๋ฉ๋‹ˆ๋‹ค.
  • state ์ž…๋‹ˆ๋‹ค.
  • filter ๊ธฐ๋Šฅ์„ ๋™์ ์œผ๋กœ ๋งŒ๋“ค์–ด ์ค„ handler ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค.
  • ์ธ์ž๋กœ name, value๋ฅผ ๋ฐ›๊ณ , name์ด job์ผ ๊ฒฝ์šฐ job state์— value๋ฅผ, postion state์— secondDepth(value)๊ฐ€ ์‹คํ–‰๋œ ๊ฐ’์„ ๋‹ด์Šต๋‹ˆ๋‹ค.

- โญ๏ธ Chart function(feat.D3)

๐Ÿšจ chart๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด D3.js ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

  • filter๋ฅผ ํ†ตํ•ด ์ •์ œ๋œ ๋ฐ์ดํ„ฐ๋ฅผ props๋กœ ๋‚ด๋ ค์ค๋‹ˆ๋‹ค.

  • ์œ„์™€ ๊ฐ™์ด ์ธ์ž๋กœ ๋ฐ›๋Š” ๋ถ€๋ถ„์—์„œ ๋ฐ”๋กœ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค(๋„ˆ๋ฌด ์ข‹์•„..)๐Ÿ‘

  • ๋‹ค์‹œํ•œ๋ฒˆ ๊ตฌ์กฐ ๋ถ„ํ•ด ํ• ๋‹น!

  • data๋ฅผ ๋ฐ›๊ธฐ ์œ„ํ•ด state์˜ ์„ค์ •์„ ํ•ฉ๋‹ˆ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  chart๋ฅผ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ๋ฐ‘์ž‘์—…์ธ useRef๋ฅผ ์„ ์–ธํ•ฉ๋‹ˆ๋‹ค.

  • ref๋ฅผ ๋„ฃ์–ด ์ค๋‹ˆ๋‹ค.

ref๋ฅผ ํ†ตํ•ด ํŠน์ • DOM์— ์ ‘๊ทผ์ด ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค!

  • ํ•„์š”ํ•œ ๋ถ€๋ถ„๋“ค์„ ๋ณ€์ˆ˜๋กœ ์„ ์–ธํ•ด์ค๋‹ˆ๋‹ค.
  • D3 ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด x, y์ถ•์„ ๊ทธ๋ฆฌ๋Š” ๋ณ€์ˆ˜๋ฅผ ์„ ์–ธ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
  • scale์ด๋ผ๋Š” ๋ช…์นญ์ด ๋ถ™์€ d3 ๋ฉ”์†Œ๋“œ๋Š” .domain(), .range()์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.
  • .domain() ๋ฒ”์œ„์˜ ์ž…๋ ฅ๊ฐ’์ด ๋“ค์–ด์˜ค๋ฉด .range() ๋ฒ”์œ„์˜ ๊ฒฐ๊ณผ๊ฐ’์œผ๋กœ ๋ฐ”๊ฟ”์ฃผ๋Š” ํ•จ์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค!

  • useEffect ์•ˆ์—์„œ data๊ฐ€ ๋“ค์–ด์˜ฌ๋•Œ๋งˆ๋‹ค ์ƒˆ๋กœ ๋ Œ๋”๊ฐ€ ๋˜๋„๋ก ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

๐Ÿšจsvg๋กœ ๊ทธ๋ ค์ง€๋Š” d3๋Š” ์ƒˆ๋กœ ๋ Œ๋”๋  ๊ฒฝ์šฐ ์ด์ „ ๊ฐ’์ด ์‚ฌ๋ผ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๊ธฐ์— .remove()๋ฅผ ํ†ตํ•ด ์ด์ „ ๊ฐ’์„ ๋จผ์ € ์‚ญ์ œ ํ•œ ๋’ค์— ์ƒˆ๋กœ ๊ทธ๋ž˜ํ”„๊ฐ€ ๊ทธ๋ ค์ง€๋„๋ก ์„ค์ •๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

  • .append() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ํŠน์ • tag๋ฅผ ์ง‘์–ด๋„ฃ๊ฒ ๋‹ค๊ณ  ์„ ์–ธ!
  • ๊ทธ ์•„๋ž˜์—์„œ .call() ๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋‘์—ˆ๋˜ ํ•จ์ˆ˜๋ฅผ ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.

๐Ÿšจd3 ๋ฉ”์†Œ๋“œ๋Š” ๊ฒฐ๊ณผ ๊ฐ’์œผ๋กœ ์„ ํƒ๋ฌผ์˜ ์ฐธ์กฐ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
๋ฉ”์†Œ๋“œ๋ฅผ ์ฒด์ธ์œผ๋กœ ์—ฐ๊ฒฐํ•  ๋•Œ๋Š” ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

  • .on()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ๋งˆ์šฐ์Šค๊ฐ€ ๋“ค์–ด๊ฐ”์„๋•Œ svg๋ฅผ ๊ทธ๋ฆฌ๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.
    1) DOM ์„ ํƒ (svg = select.svgRef.current)
    2) DOM ์š”์†Œ ์•ˆ์—์„œ ํŠน์ •์š”์†Œ ์„ ํƒ(selectAll)
    3) ๋ฐ”์ธ๋”ฉํ•  DATA ์„ ํƒ(data([e])
    4) ์š”์†Œ ์ƒ์„ฑ(join)
    5) ์š”์†Œ์— ์†์„ฑ ๋ถ€์—ฌ(attr)

d3์˜ ํŠน์ง• ์ค‘ ํ•˜๋‚˜! ๊ฐ€์ƒ์˜ ์š”์†Œ๋ฅผ ๋ฏธ๋ฆฌ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค!
์œ„์˜ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด tooltipSal์ด๋ผ๋Š” class๋ฅผ ๋จผ์ € ์„ ํƒ์„ ํ•˜๊ณ , ๊ทธ ์•„๋ž˜์—์„œ ์ƒ์„ฑํ•œ ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค!

  • ๊ทธ๋ž˜ํ”„๋ฅผ ๊ทธ๋ฆฌ๋Š” ๋ถ€๋ถ„์ด useEffect() ์•ˆ์— ์œ„์น˜ํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํŠน์ • ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ๋ฅผ ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ์ถ”๊ฐ€๋กœ useEffect()๋ฅผ ๊ตฌ์„ฑํ•ด์„œ ํ•ด๋‹น ๋ถ€๋ถ„์— ๋Œ€ํ•œ ์—…๋ฐ์ดํŠธ ์š”์†Œ๋ฅผ ๊ตฌ์„ฑํ•˜๋ฉด ๋œ๋‹ค๐Ÿ‘
  • ํ•ด๋‹น ๋ฐฉ๋ฒ•์„ ์“ธ ๊ฒฝ์šฐ ๋ฌผ๋ก  ์›๋ž˜ ๊ทธ๋ž˜ํ”„์— ์˜ํ–ฅ์„ ์ฃผ๋Š” state๊ฐ€ ์•„๋‹Œ ๋‹ค๋ฅธ state๋ฅผ ์„ ์–ธํ•ด์„œ useEffect๊ฐ€ ์ž‘๋™ํ•˜๋„๋ก ํ•ด์•ผํ•œ๋‹ค!๐Ÿšจ

#Total reivew๐Ÿ‘

โญ๏ธํŠน๋ณ„ํ•œ ๊ฒฝํ—˜, ์œ„๊ธฐ๋Š” ๊ธฐํšŒ๋กœ

์ฝ”๋กœ๋‚˜ ๊ฒฝ๊ณ„์ˆ˜์œ„๊ฐ€ 2.5๋‹จ๊ณ„๊ฐ€ ๋˜๋ฉด์„œ ์‚ฌ์ƒ์ดˆ์œ  ํ”„๋กœ์ ํŠธ๊ฐ€ ์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰๋˜์—ˆ๋‹ค.
์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰๋˜๋Š” ํ”„๋กœ์ ํŠธ๊ฐ€ ๋ถ€๋‹ด์ด ๋งŽ์ด ๋˜๊ธด ํ–ˆ์ง€๋งŒ, ์–ด์ฉŒ๋žด ์ด๋ฏธ ๋ฒŒ์–ด์ง„ ์ผ
๋ฏธ๋ฆฌ ๊ฒฝํ—˜ํ•˜๋Š” ๋””์ง€ํ„ธ๋…ธ๋งˆ๋“œ(?)๋ผ๋Š” ๋งˆ์Œ์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ–ˆ๋‹ค.
์˜คํ”„๋ผ์ธ์œผ๋กœ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ์—๋Š” ๋™๊ธฐ๋“ค์ด๋‚˜ ๋ฉ˜ํ† ๋ถ„๋“ค์—๊ฒŒ ๋งŽ์€ ์š”์ฒญ์„ ํ•ด์„œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•ด ๋‚˜๊ฐ”๋‹ค๋ฉด, ์ด๋ฒˆ์—๋Š” ์กฐ๊ธˆ ๋” ํ˜ผ์ž์„œ ๊ตฌ๊ธ€๋ง์„ ํ†ตํ•ด ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๋Š” ๋นˆ๋„๊ฐ€ ๋งŽ์•„์กŒ๋‹ค.
์ฆ‰, ์„ฑ์žฅ์„ ํ•œ ๊ฒƒ์ด๋‹ค!๐Ÿ‘
ํ–‰์•„์›ƒ, zoom์„ ํ†ตํ•ด ๋ฏธ๋ฆฌ ๊ฒฝํ—˜ํ•˜๋Š” ์žฌํƒ๊ทผ๋ฌด๋ž€ ์–ด๋–ค ๊ฒƒ์ธ์ง€ ์•Œ์•„๊ฐ€๋Š” ์‹œ๊ฐ„๋„ ๋˜์—ˆ๊ณ , vs code์˜ liveshare๋ฅผ ํ†ตํ•ด ๋ชจ๋‘ ๋‹ค๊ฐ™์ด ํ•˜๋Š” ์ž‘์—…๋„ ํ•˜๋‚˜์˜ ์žฌ๋ฏธ๋กœ ๋‹ค๊ฐ€์™”๋‹ค.

๐Ÿ‘Šํฌ๊ธฐํ•˜์ง€ ๋ง์ž!

ํ”„๋กœ์ ํŠธ ์ข…๋ฃŒ๊ฐ€ ํ•˜๋ฃจ ๋‚จ์€ ์ƒํ™ฉ์—์„œ ์ง€์›ํ˜„ํ™ฉ ํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ–ˆ๋Š”๋ฐ, ์‹œ๊ฐ„์ด ์—†๋‹ค๋ณด๋‹ˆ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ '๋†€๋ฉด ๋ญํ•˜๋žด' ์ผ๋‹จ ํ•ด๋ณด์ž๋Š” ๋งˆ์Œ์œผ๋กœ ๋น ๋ฅด๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑ, ์—์–ด๋น„์•ค๋น„๋ฅผ ๋นŒ๋ ค ๋ชจ๋‘๊ฐ€ ๋ชจ์—ฌ์„œ ๋ฐค์ƒˆ ๐Ÿ”ฅ๋ถˆ์ฝ”๋”ฉ์„ ํ†ตํ•ด ํŽ˜์ด์ง€๋ฅผ ์™„์„ฑ..!(๋จผ๊ฐ€ MT๋ฅผ ๊ฐ”๋Š”๋ฐ ์žฅ๊ธฐ์ž๋ž‘ ํ…Œ๋งˆ๊ฐ€ ์ฝ”๋”ฉ์ธ ๊ธฐ๋ถ„)
๋•๋ถ„์— ๐Ÿ„์žฌ๋ฏธ์žˆ๊ณ  ์†Œ์ค‘ํ•œ ๊ฒฝํ—˜ + โœ…ํ•  ์ˆ˜ ์—†์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋˜ ํŽ˜์ด์ง€๋„ ์™„์„ฑ!
์ฒ˜์Œ์— ํฌ๊ธฐํ–ˆ๋”๋ผ๋ฉด ์•„์‰ฌ์šฐ๋ฆฌ๋งŒํผ ๋ฉ‹์ง€๊ฒŒ ํŽ˜์ด์ง€๊ฐ€ ๋‚˜์™€์„œ ๋„ˆ๋ฌด ๊ฐ๊ฒฉ์ด์—ˆ๋‹ค ๋ž„๊นŒ...?๐Ÿ˜ญ
ํ•ญ์ƒ ํฌ๊ธฐํ•˜์ง€๋ง๊ณ  ํž˜ ๋‹ซ๋Š”๋ฐ๊นŒ์ง€ ํ•ด๋ณด์ž

๐Ÿ—ผ๊ตฌ์กฐ์˜ ์ค‘์š”์„ฑ

์ด๋ฒˆ์—๋Š” ๊ธฐ๋Šฅ ์ปดํฌ๋„ŒํŠธ ๋‹จ์œ„๋กœ ํŽ˜์ด์ง€ ๋ ˆ์ด์•„์›ƒ์„ ๋งŒ๋“ค๊ณ  mock data๋ฅผ ํ†ตํ•ด ๊ธฐ๋Šฅ์„ ๋จผ์ € ๊ตฌํ˜„ํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ž‘์—…์„ ์‹œ์ž‘ํ–ˆ๋‹ค. ์ตœ์ข…์ ์œผ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—ฐ๊ฒฐํ•˜๊ณ , ํŽ˜์ด์ง€๋ฅผ ์ปดํฌ๋„ŒํŠธ๋ฅผ ํ•ฉ์น˜๋Š” ๋‹จ๊ณ„์— ๋“ค์–ด๊ฐ€๋‹ˆ ๋ช‡๋ช‡ child component์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›๋„๋ก ๊ตฌ์„ฑํ•ด๋ฒ„๋ฆฐ ๋…€์„๋“ค์˜ ๊ธฐ๋Šฅ์„ ์ƒˆ๋กœ ๋งŒ๋“ค์–ด์•ผ ๋˜๋Š” ์ƒํ™ฉ์ด ์™€๋ฒ„๋ ธ๋‹ค(Hooks์˜ ๊ธฐ๋ณธ๋ฃฐ์„ ๋ฌด์‹œํ•œ ์ž์˜ ์ตœํ›„..๐Ÿ’ฆ)
์ดˆ๊ธฐ์— ํŽ˜์ด์ง€๋ฅผ, ํ˜น์€ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•จ์— ์žˆ์–ด ํฐ ์›์น™ ๋˜๋Š” ๊ตฌ์กฐ๋ฅผ ์ƒ๊ฐํ•˜๋ฉด์„œ component๋ฅผ ๋งŒ๋“ค์–ด์•ผ ๋‚˜์ค‘์— ๊ณ ์ƒ์„ ์•ˆํ•œ๋‹ค๋Š” ๊ฒƒ์„ ๋ผˆ์ €๋ฆฌ๊ฒŒ ๋Š๊ผˆ๋‹ค...(๊ฐ™์€ ์‹ค์ˆ˜๋Š” ๋˜ ํ•˜์ง€ ์•Š๊ธฐ๋ฅผ ๋ฐ”๋ผ๋ฉฐ..!)

profile
Prof.Google์„ ํ†ตํ•ด ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ด ๊ณณ์— insert ๐Ÿธ

0๊ฐœ์˜ ๋Œ“๊ธ€