๐Ÿฌ ๊ธดํ˜ธํก/GDSC

[Week2] ๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

ํ•œ๊ทœ์ง„ 2022. 10. 1. 01:28

์•ˆ๋…•ํ•˜์„ธ์š”, FE ์ฝ”์–ด๋ฉค๋ฒ„ ํ•œ๊ทœ์ง„์ž…๋‹ˆ๋‹ค.

์˜ค๋Š˜์€ GDSC์—์„œ ์ง„ํ–‰ํ•˜๋Š” ์ฒซ๋ฒˆ์งธ ๋Œ€๋ฉด ์Šคํ„ฐ๋””์ž…๋‹ˆ๋‹ค!! ๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ•ด ๋ด…์‹œ๋‹ค.

 

๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

๋ฆฌ์•กํŠธ๋ฅผ ํ•œ๋ฒˆ๋„ ์•ˆ์จ๋ณด์‹  ๋ถ„์€ ์—†๋Š”๊ฑธ๋กœ ์•Œ๊ณ  ์žˆ์œผ๋‹ˆ, ๊ตณ์ด ์ž์„ธํžˆ ์ ์–ด๋†“์ง€ ์•Š์•„๋„ ๋˜๊ฒ ์ฃ . ์ž์„ธํ•œ๊ฑด ๋‹ค๋ฅธ ๋ธ”๋กœ๊ทธ๋‚˜ ์ฑ…์— ๋‚˜์™€์žˆ์œผ๋‹ˆ ๋ณด์‹œ๋ฉด ๋˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

๊ฐ„๋‹จํ•˜๊ฒŒ๋Š” ์ด๋ ‡์Šต๋‹ˆ๋‹ค. Mac ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

1. Homebrew ์„ค์น˜

/usr/bin/ruby -e "$(curl -fsSL <https://raw.githubusercontent.com/Homebrew/install/master/install>)"

 

2. node, npm ์„ค์น˜

brew update
brew install node

node๋ฅผ ์„ค์น˜ํ•˜๋ฉด npm๋„ ํ•จ๊ป˜ ์„ค์น˜๋ฉ๋‹ˆ๋‹ค. ๋‚˜์ค‘์— ๋‹ค์‹œ ์ž์„ธํžˆ ์‚ดํŽด๋ณผ๊ฒŒ์š”.

 

node -v
npm -v

์ œ๋Œ€๋กœ ์„ค์น˜๋˜์—ˆ๋Š”์ง€ ๋ฒ„์ „์„ ํ™•์ธํ•ด๋ด…์‹œ๋‹ค.

 

brew install yarn --ignore-dependencies

์ €๋Š” npm๋ณด๋‹ค yarn์„ ์ฃผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. npm๊ณผ ๋น„์Šทํ•œ ํŒจํ‚ค์ง€ ๋งค๋‹ˆ์ €์ž…๋‹ˆ๋‹ค. ์‚ฌ์‹ค ๋ณ„๋กœ ๋‹ค๋ฅธ ๊ฑด ์—†์Šต๋‹ˆ๋‹ค.

 

 

3. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

ํ„ฐ๋ฏธ๋„์—์„œ yarn create react-app [projectName] ์œผ๋กœ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰ํ•ด๋ณผ๋• yarn start (๋˜๋Š” npm run start)๋กœ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

week2
โ”œโ”€โ”€ node_modules
โ”œโ”€โ”€ public
โ”‚   โ”œโ”€โ”€ favicon.ico
โ”‚   โ”œโ”€โ”€ index.html
โ”‚   โ””โ”€โ”€ manifest.json
โ”œโ”€โ”€ src
โ”‚   โ”œโ”€โ”€ App.css
โ”‚   โ”œโ”€โ”€ App.js
โ”‚   โ”œโ”€โ”€ App.test.js
โ”‚   โ”œโ”€โ”€ index.css
โ”‚   โ”œโ”€โ”€ index.js
โ”‚   โ”œโ”€โ”€ logo.svg
โ”‚   โ””โ”€โ”€ reportWebVitals.js
โ”œโ”€โ”€ .gitignore
โ”œโ”€โ”€ package.json
โ”œโ”€โ”€ README.md
โ””โ”€โ”€ yarn.lock

์ด๋Ÿฐ ๊ตฌ์กฐ์˜ ํŒŒ์ผ๋“ค์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๋ฌด์–ธ๊ฐ€ ์ข€ ๋งŽ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ html css js๋กœ๋งŒ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์„๋•Œ๋Š” ํŒŒ์ผ ๋‘์„ธ๊ฐœ๋กœ๋„ ์ถฉ๋ถ„ํžˆ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ๋ง์ด์ฃ .

๋ณ„๋กœ ๋ถ€๋‹ด์„ ๋А๋‚„๊ฑด ์•„๋‹Œ๊ฒƒ์ด, ์œ„์ฒ˜๋Ÿผ ๋ณต์žกํ•œ ํŒŒ์ผ๋“ค์„ ์›น์— ๋„์šฐ๊ธฐ ์œ„ํ•ด ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด๋ฉด ์›๋ž˜ ์•„๋Š”๊ฒƒ๊ณผ ๋น„์Šทํ•œ ํ˜•ํƒœ๋กœ ๋‚˜์˜ฌ๊ฒ๋‹ˆ๋‹ค.

 

yarn build ๋ช…๋ น์–ด๋กœ ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ๋ฅผ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. Build ๋ผ๋Š” ๋””๋ ‰ํ† ๋ฆฌ๊ฐ€ ์ƒˆ๋กœ ์ƒ๊ธด๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•ด๋‹น ๋””๋ ‰ํ† ๋ฆฌ ๋‚ด์—๋Š” css, js, html ๋“ฑ ์ •์ ์ธ ํŒŒ์ผ์ด ๋“ค์–ด์žˆ์Šต๋‹ˆ๋‹ค.

์›น์œผ๋กœ ๋ฐฐํฌ๋ฅผ ํ•  ๋•Œ๋Š” ๋นŒ๋“œ๋œ ํŒŒ์ผ๋“ค์„ ์›น์„œ๋ฒ„๋ฅผ ์ด์šฉํ•ด ๋ฐฐํฌ๋ฅผ ํ•˜๋ฉด ๋˜๊ฒ ์ฃ ?? ๊ฐ„๋‹จํ•˜๊ฒŒ ์ด๋ ‡๊ฒŒ๋„ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋นŒ๋“œ๋œ ํŒŒ์ผ๋กœ ๊นƒํ—ˆ๋ธŒ ํŽ˜์ด์ง€๋ฅผ ํ†ตํ•ด ๋ฐฐํฌ๋ฅผ ํ•œ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์ž…๋‹ˆ๋‹ค.

 

๋งŒ๋“ค์–ด์ง„ jsํŒŒ์ผ์„ ํ•˜๋‚˜ ๋“ค์—ฌ๋‹ค๋ณด๋ฉด ์œ„์˜ ์‚ฌ์ง„์ฒ˜๋Ÿผ ์–ด์ง€๋Ÿฌ์šด๊ฒŒ ๋ง‰ ๋‚˜ํƒ€๋‚ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๋ฅผ ๋นŒ๋“œํ•˜๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•˜๋ฉด, ์šฐ๋ฆฌ๊ฐ€ ์ž‘์„ฑํ•œ ์—ฌ๋Ÿฌ ์ฝ”๋“œ์™€ ํŒŒ์ผ๋“ค์ด ์œ„์™€๊ฐ™์ด ํ•ฉ์ณ์„œ ์ƒˆ๋กœ์šด ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿฐ๊ฑด ๋ˆ„๊ฐ€ํ• ๊นŒ์š”?? webpack๊ณผ babel์ด๋ผ๋Š” ์–ด๋””์„œ ๋งŽ์ด ๋“ค์–ด๋ณธ ํ‚ค์›Œ๋“œ๊ฐ€ ์—ฌ๊ธฐ์„œ ๋“ฑ์žฅํ•ฉ๋‹ˆ๋‹ค.
SPA(single page app)์—์„œ webpack์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

 

webpack์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ชจ๋“ˆํ™”์™€ ๋ฒˆ๋“ค๋ง, ํ•ซ ๋กœ๋”ฉ ๋“ฑ์„ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ๋ฆฌ์•กํŠธ์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ES6 ๋“ฑ ์ตœ์‹  ๋ฌธ๋ฒ•์„ ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜ํ•ด์ฃผ๋Š” babel๋„ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

 

ํ•˜์ง€๋งŒ ์ €ํฌ๋Š” ์•„์ง ์ €๋Ÿฐ๊ฑธ ๋ณธ์ ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ง€๊ธˆ ๋‹น์žฅ์€ ์•Œ ํ•„์š”๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค. ์™œ๋ƒ๋ฉด create react-app์œผ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ธํŒ…์ด ๋˜์–ด ์žˆ๊ฑฐ๋“ ์š”. ์ • ๊ถ๊ธˆํ•˜์‹œ๋ฉด yarn eject ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด๋ณด์„ธ์š”. (ํ•œ๋ฒˆ ๊บผ๋‚ด๋ฉด ๋‹ค์‹œ ๋˜๋Œ๋ฆด ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒ์„ ์ž”๋œฉ ์ฃผ๋ฉฐ) ๋‚ด์žฅ๋˜์–ด ์žˆ๋Š” webpack.config๋ฅผ ๊บผ๋‚ด๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

config๋ผ๋Š” ํด๋”๊ฐ€ ์ƒ๊ฒผ๊ณ , ๊ทธ ์•ˆ์—๋Š” ์›นํŒฉ ๊ด€๋ จ ์„ค์ •์ด ๋“ค์–ด ์žˆ๋„ค์š”. ์ €๋„ ๋ด๋„ ์ž˜ ๋ชจ๋ฆ…๋‹ˆ๋‹ค. ์กฐ๋งŒ๊ฐ„ ๊ณต๋ถ€๋ฅผ ํ•œ๋ฒˆ ํ•ด๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

 

package.json ์˜ ๋‚ด์šฉ๋„ ๊ฝค ๋งŽ์ด ๋ฐ”๋€Œ์—ˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋ฒจ๊ณผ ์›นํŒฉ ๊ด€๋ จ๋œ ํŒจํ‚ค์ง€๋“ค์ด ์—ฌ๋Ÿฌ ์„ค์น˜๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ € ๋ฌด์‹œ๋ฌด์‹œํ•œ ๊ณผ์ •์„ create react-app ๋ช…๋ น์–ด๋ฅผ ํ†ตํ•ด ์ž๋™์œผ๋กœ ์„ธํŒ…ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ณ ๋งˆ์›Œ!! ํ•˜๊ณ  ๊ฐœ๋ฐœ ์‹œ์ž‘ํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 


 

๊ณผ์ œ

1. ํˆฌ๋‘๋ฆฌ์ŠคํŠธ ๋งŒ๋“ค๊ธฐ

์ฒซ๋ฒˆ์งธ ๊ณผ์ œ๋Š” ๋ฌด์ฒ™ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋จผ์ € Figma๋ฅผ ํ†ตํ•ด์„œ ์—ฌ๋Ÿฌ๋ถ„์ด ํ‘œํ˜„ํ•˜๊ณ ์ž ํ•˜๋Š” ๊ฒƒ์„ ์‹œ๊ฐ์ ์œผ๋กœ ๋งŒ๋“ค์–ด๋ด…๋‹ˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋ฅผ React๋ฅผ ์ด์šฉํ•ด ๊ตฌํ˜„ํ•ด๋ด…์‹œ๋‹ค.

๋ฆฌ์•กํŠธ๋ฅผ ํ•˜์…จ๋˜ ๋ถ„์ด๋ผ๋ฉด, ์กฐ๊ธˆ ๋” ํšจ์œจ์ ์ธ ํŒจํ„ด์— ๋Œ€ํ•ด์„œ ๊ณ ๋ฏผ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ์‹œ๊ฐ„์ด ๋  ๊ฒƒ์ด๊ณ , ๋ฆฌ์•กํŠธ๊ฐ€ ์ฒ˜์Œ์ด๋ผ๋ฉด ๊ณผ์ œ๋ฅผ ํ•˜๋ฉฐ ๋ฆฌ์•กํŠธ์˜ ์žฅ์ ์— ๋Œ€ํ•ด ๋А๋ผ์‹ค ์ˆ˜ ์žˆ์„๊ฑฐ์—์š”.

2. WIL

์ผ์ฃผ์ผ ๋™์•ˆ ๊ณผ์ œ๋ฅผ ํ•˜๋ฉฐ ํ•™์Šตํ•œ ๋‚ด์šฉ, ๊ณ ๋ฏผํ–ˆ๋˜ ๋ถ€๋ถ„ ๋“ฑ์„ ๊ธ€๋กœ ์ •๋ฆฌํ•ด์„œ ์ €ํฌ์™€ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”.

1. ๋ฆฌ์•กํŠธ๋ฅผ ์ฒ˜์Œ ์‹œ์ž‘ํ• ๋•Œ node์™€ npm์ด๋ผ๋Š”๊ฑธ ์„ค์น˜ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. node์™€ npm์€ ๋ฌด์—‡์ด๊ณ  ์™œ ๋ฆฌ์•กํŠธ์—์„œ ์“ฐ์ด๋Š”๊ฑธ๊นŒ์š”?
2. ์ปดํฌ๋„ŒํŠธ, props, state๋Š” ๋ฌด์—‡์ผ๊นŒ์š”?
3. ๋ฐ”๋‹๋ผJS์™€ ๋ฆฌ์•กํŠธ์—์„œ DOM์„ ๋‹ค๋ฃจ๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์–ด๋–ค ์ ์ด ๋‹ค๋ฅผ๊นŒ์š”??
4. ์ด ์™ธ์—๋„ ์ €ํฌ์™€ ํ•จ๊ป˜ ๊ธฐ๋กํ•˜๊ณ  ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ์ด ์žˆ๋‹ค๋ฉด ์–ผ๋งˆ๋“ ์ง€ ์ข‹์•„์š”.