JOYLOG

[ReactJS] React๋ž€? (Virtual DOM, npm๊ณผ npx, ๊ตฌ์กฐ, React Router DOM, Data Flow) ๋ณธ๋ฌธ

D E V E L O P E R ๐Ÿ’ป/Front-end

[ReactJS] React๋ž€? (Virtual DOM, npm๊ณผ npx, ๊ตฌ์กฐ, React Router DOM, Data Flow)

์ฃผํž 2021. 7. 8. 10:46

 

Recat JS

  • facebook ์—์„œ 2013 ๋…„์— ๋ฐœํ‘œํ•œ library
  • ์ปดํฌ๋„ŒํŠธ๋กœ ์ด๋ฃจ์–ด์ ธ ์žˆ์–ด ์žฌ์‚ฌ์šฉ์„ฑ์ด ๋›ฐ์–ด๋‚จ
  • Virtual DOM

 

Real DOM? Virtual Dom? ์ด ๋ฌด์—‡์ธ๊ฐ€.

10๊ฐœ์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ ์žˆ์„ ๋•Œ, ๊ทธ ์ค‘ ํ•˜๋‚˜์˜ ๋ฆฌ์ŠคํŠธ๊ฐ€ Update ๋˜์—ˆ๋‹ค.

  • Real DOM : ์ „์ฒด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋‹ค์‹œ Reload ํ•ด์•ผํ•˜๋ฏ€๋กœ, ๋งŽ์€ ๋น„์šฉ ๋ฐœ์ƒ
  • Virtual DOM : ๋ฐ”๋€ ํ•œ ๊ฐ€์ง€ ์•„์ดํ…œ๋งŒ DOM์—์„œ ๋ฐ”๊ฟ” ์คŒ.

 

Virtual Dom์€ ์–ด๋–ป๊ฒŒ ํ•œ ๊ฐ€์ง€ ์•„์ดํ…œ๋งŒ DOM์—์„œ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์„๊นŒ?

  1. JSX ๋ฅผ ๋žœ๋”๋งํ•œ๋‹ค. (Virtual DOM ์ด Update)
  2. ์ด์ „ Virtual DOM๊ณผ ๋น„๊ตํ•ด ๋ฐ”๋€ ๋ถ€๋ถ„์„ ์ฐพ๋Š”๋‹ค. ( = diffing)
  3. ๋ฐ”๋€ ๋ถ€๋ถ„๋งŒ Real DOM์—์„œ ๋ฐ”๊ฟ”์ค€๋‹ค.

 


npx ํ™œ์šฉํ•˜์—ฌ React App ์ƒ์„ฑ

webpack์ด๋‚˜ babel์— ๋Œ€ํ•œ ์ˆ˜๋™์  ์„ค์ • ์—†์ด, create-react-app Command๋กœ ๋ฐ”๋กœ ๋ฆฌ์•กํŠธ ์‹œ์ž‘ํ•˜๊ธฐ

  • Webpack : ์›น ์ œ์ž‘์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ, ํ”„๋ ˆ์ž„์›Œํฌ ๋“ฑ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ ๋ฌธ์„œ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•ด์ง. ๋งŽ์€ ๋ชจ๋“ˆ๋“ค์„ ๋ฌถ์–ด์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋ณด๋‚ด์ฃผ๋Š” ์—ญํ• .
  • Babel : ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์œ„ํ•ด ์ตœ์‹  ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์„ ๊ตฌํ˜• ๋ธŒ๋ผ์šฐ์ €์—์„œ๋„ ๋Œ ์ˆ˜ ์žˆ๊ฒŒ ๋ณ€ํ™˜์‹œ์ผœ์คŒ. (ES5 ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋ฌธ๋ฒ•์œผ๋กœ ๋ณ€ํ™˜)
  • server ํด๋”์™€ clientํด๋” ๊ตฌ๋ถ„ ํ›„, client ์—์„œ ์ง„ํ–‰
npx create-react-app .

npm ( node package manager)

: ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋‹ด๋Š” ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ์—ญํ• ์„ ํ•œ๋‹ค.
: node.js์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“ˆ์„ ํŒจํ‚ค์ง€๋กœ ๋งŒ๋“ค์–ด npm์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ณ  ๋ฐฐํฌํ•˜๊ณ  ์žˆ์Œ.

npx

: npm ์„ ์ข€ ๋” ํŽธํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด npm์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” ํ•˜๋‚˜์˜ ๋„๊ตฌ๋กœ ์ดํ•ด
: npx๋Š” npm ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•˜๊ณ , ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” CLI ๋„๊ตฌ

  • ์žฅ์ 1. Disk space ๋‚ญ๋น„ํ•˜์ง€ ์•Š์„ ์ˆ˜ ์žˆ๋‹ค.
  • ์žฅ์ 2. ํ•ญ์ƒ ์ตœ์‹  ๋ฒ„์ „์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 


Bolier Plate์— ํŠน์„ฑํ™”๋œ ๊ตฌ์กฐ

  • _actions / _reducer : Redux๋ฅผ ์œ„ํ•œ ํด๋”
  • components/views : Page๋ฅผ ์œ„ํ•œ ํด๋”
  • components/views/Sections : Page์™€ ๊ด€๋ จํ•œ css ํŒŒ์ผ, componenet๋ฅผ ์œ„ํ•œ ํด๋”
  • App.js : Routing ๊ด€๋ จ ์ผ์„ ์ฒ˜๋ฆฌ
  • Config.js : ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ •ํ•˜๋Š” ๊ณณ
  • hoc : Higher Order Component์˜ ์•ฝ์ž
    • component๋ฅผ ๊ฐ–๋Š” function
    • ์˜ˆ๋ฅผ ๋“ค์–ด Auth๋ผ๋Š” HOC๊ฐ€ ์žˆ์„ ๋•Œ(์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ปดํฌ๋„ŒํŠธ ๊ฐ€์ง), ํšŒ์› ์ž๊ฒฉ์ด ๋˜๋Š”์ง€ ํ™•์ธํ•œ ํ›„, ํŽ˜์ด์ง€์— ๋ณด๋‚ด์ฃผ๊ฑฐ๋‚˜ ์•„๋‹ˆ๋ผ๋ฉด ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋ณด๋‚ด์ฃผ๋Š” ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • utils : ์—ฌ๋Ÿฌ๊ตฐ๋ฐ์—์„œ ์“ฐ์ผ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ์ด๊ณณ์— ๋„ฃ์–ด, ์–ด๋””์„œ๋“  ์“ธ ์ˆ˜ ์žˆ๊ฒŒ๋” ํ•ด์คŒ
tip :( ES7 React/Redux/GraphQL/React-Native snippets) VScode ํ™•์žฅ ๋‹ค์šด๋ฐ›์œผ๋ฉด, 'rfce' ํ†ตํ•ด react ํ•จ์ˆ˜ํ˜• ์ปดํฌ๋„ŒํŠธ ๋ฐ”๋กœ ๋ถˆ๋Ÿฌ์˜ฌ ์ˆ˜ ์žˆ๋‹ค. ('rcc'๋Š” ํด๋ž˜์Šค ์ปดํฌ๋„ŒํŠธ)

 

React Router DOM

  • ํŽ˜์ด์ง€ ์ด๋™ํ•  ๋•Œ, React Router DOM ํ™œ์šฉ (https://reactrouter.com/web/example/basic)
  • App.js ์—์„œ ๋ผ์šฐํŒ…์„ ๋งŒ๋“ ๋‹ค. react-router-dom
npm install react-router-dom --save (client ์—์„œ)

 

DOM ์ž‘์„ฑ๋ฒ• 1.

<Route exact path="/">
    <LandingPage/>
</Route>

DOM ์ž‘์„ฑ๋ฒ• 2.

<Route exact path="/" component = {LandingPage}/>

 


Data Flow

  • server(nodeJS) <- client(ReactJS) : request
  • server(nodeJS) -> DataBase : request์— ๋Œ€ํ•œ ๋ฐ์ดํ„ฐ ํ™•์ธ
  • server(nodeJS) -> client(ReactJS) : response

ReactJS์—์„œ ๋ณด๋‚ด๋Š” Request

AXIOS ์‚ฌ์šฉ (JQeury ์‚ฌ์šฉํ•  ๋•Œ AJAX)

npm install axios --save
Comments