๐Ÿ“ React. Environment Setup

[meษช]ยท2021๋…„ 8์›” 27์ผ
0

1-3. Today I Learned. React.js

๋ชฉ๋ก ๋ณด๊ธฐ
1/9
post-thumbnail

๐Ÿ“Œ ๊ฐœ๋ฐœ ๊ณต๋ถ€ 1๊ฐœ์›” ์ฐจ์ธ to-be ๊ฐœ๋ฐœ์ž์˜ ์ž์Šต ๋ธ”๋กœ๊ทธ๐Ÿ™‚๏พ Aug 16 ~ 20, 2021

ํ˜„์žฌ ์ƒํƒœ
๋‹ค ๋จน์ง€๋„ ๋ชปํ–ˆ๊ณ , ๊ฒจ์šฐ ๋จน์€ ๊ฒƒ๋„ ๋‹ค ์†Œํ™”ํ•˜์ง€ ๋ชปํ•œ ์ฒด๋กœ ํ•จ๊ป˜ํ•˜๊ณ  ์žˆ์–ด์„œ ๋ถ€์กฑํ•œ ์ ์ด ๋งŽ์€๋ฐ, ํŠนํžˆ ์ง€๊ธˆ ๋‚˜์—๊ฒŒ ๋ถ€์กฑํ•œ ์ ์€ JavaScript ๊ธฐ์ดˆ๊ฐ€ ๋„ˆ๋ฌดx345 ๋ถ€์กฑํ•˜๋‹ค.
๋ณต์Šต์€ ๋ณต์Šต๋Œ€๋กœ, ์ง„๋„๋Š” ์ง„๋„๋Œ€๋กœ ๋‚˜๊ฐ€์•ผ ํ•œ๋‹ค.

โš ๏ธ ์ฒ˜์Œ์—” ์ดˆ๊ธฐ setting ํ•˜๋Š๋ผ ํ•˜๋ฃจ๋ฅผ ๋‹ค ์†Œ์ง„ํ•ด๋ฒ„๋ฆด ์ˆ˜ ์žˆ์Œ ์ฃผ์˜

Installation

@ browser

  • Node.js download ๋งํฌ
    • Node.js๋ฅผ ์„ค์น˜ํ•˜๋ฉด NPM์ด tool์ด ๋”ธ๋ ค์˜ค๋Š”๋ฐ, NPM์œผ๋กœ library๋“ค์„ ์‰ฝ๊ฒŒ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Œ
    • Create-React-App์ด๋ผ๋Š” library๋ฅผ ์“ฐ๋ ค๋ฉด Node.js๋ฅผ ๊น”์•„์•ผ ํ•จ
    • M1์€ ์•ˆ์ •ํ˜•๋ณด๋‹ค ์ตœ์‹ ํ˜•์ด ๋” ํ˜ธํ™˜์ด ์ž˜ ๋งž๋Š”๋‹ค๋Š” ์–˜๊ธฐ๊ฐ€ ์žˆ์Œ

@ desktop

  • project ์ง„ํ–‰ํ•  directory ์ƒ์„ฑ

@ terminal

  • Create-React-App์œผ๋กœ React project ์ƒ์„ฑ
    : npx create-react-app (project๋ช…)
    • npx : npm์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” package๋ฅผ ๋ฐ”๋กœ ์‹คํ–‰ํ•˜๊ณ  ์„ค์น˜ํ•˜๋Š” ๊ฒƒ

@ editor

  • node.modules, package.json, git-ignore๋ผ๋Š” folder๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธ
    • Create-React-App ๋•๋ถ„์— ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์ด ์ด๋ ‡๊ฒŒ ์•Œ์•„์„œ setting๋˜์–ด ์žˆ๋Š” ๊ฒƒ์ธ๋ฐ, ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด Babel๋กœ ์ง์ ‘ ํ™˜๊ฒฝ์„ settingํ•ด์•ผ ํ•˜๋Š” ๋ฒˆ๊ฑฐ๋กœ์›€์ด ์žˆ์Œ
  • .gitingnore์— .eslintcache ์ž‘์„ฑํ•ด์„œ ์ถ”๊ฐ€
  • folder์™€ file ์ค‘ ๋ถˆํ•„์š”ํ•œ ๊ฒƒ ์‚ญ์ œ
    ex. logo.js
  • Routes.js์— code ์ž…๋ ฅ
  • ํ•„์š”ํ•œ file import

@ editor terminal

  • project ์ง„ํ–‰ํ•  directory๋กœ ์ด๋™
  • npm install react-router-dom --save
    • react-dom์„ ์„ค์น˜ํ•˜๋Š” ๊ฒƒ
  • npm install node-sass@4.14.1 โ€”-save
    • react-dom ์„ค์น˜
    • CRA ver "4.0.3" ๊ณผ node-sass ver 6.0์ด๋ž‘ ํ˜ธํ™˜์ด ๋˜์ง€ ์•Š๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ ์ „๊นŒ์ง€ node-sass ver 4.14.1๋กœ ๋ฒ„์ „์„ ์ง€์ •ํ•ด์„œ ์„ค์น˜ํ•ด์•ผ ํ•จ
    • package.json์—์„œ "react-dom" "^17.0.2"์™€ ๊ฐ™์ด ์„ค์น˜๋œ ๋‚ด์šฉ ํ™•์ธ ๊ฐ€๋Šฅ
  • npm start
    • browser๊ฐ€ ์—ด๋ฆผ
    • App.js์—์„œ ์ˆ˜์ •ํ•˜๋ฉด ๋ฐ”๋กœ ์ด browser์— ๋ฐ˜์˜๋จ
      - ์ด๊ฒƒ๋„ create-react-app์ด ํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ
      - App.js๊ฐ€ main page์— ๋“ค์–ด๊ฐˆ HTML์„ ์ž‘์„ฑํ•˜๋Š” ๊ณณ์ธ๋ฐ, ๊ทธ๋ ‡๋‹ค๊ณ  App.js file์ด main page๋Š” ์•„๋‹ˆ๊ณ , ์‹ค์ œ main page๋Š” public์ด๋ผ๋Š” folder ์•ˆ์— ์žˆ๋Š” index.html file์ž„
      : App.js์˜ ๋‚ด์šฉ์ด index.js ์•ˆ์˜ document.getElementById('root')๋ฅผ ํ†ตํ•ด index.html์— ๊ทธ๋ ค์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ
  • npm install react-router-dom
    • routing์„ ์œ„ํ•œ router ์„ค์น˜

folders & files

node_modules

  • ์ด project๋ฅผ ์‹คํ–‰ํ•  ๋•Œ ์‚ฌ์šฉ๋˜๋Š” dependency module์ด ๋ชจ๋‘ ๋ชจ์—ฌ์žˆ๋Š” folder
  • ์—ฌ๊ธฐ์— ์„ค์น˜๋˜์–ด ์žˆ๋Š” ๋‚ด์šฉ์€ package.json file์— ๊ธฐ๋ก๋˜์–ด ์žˆ์Œ ("dependencies" ๋ถ€๋ถ„)
  • ์ด folder๋ฅผ ์ง€์šฐ๋ฉด project๋ฅผ ๋„์šธ ์ˆ˜ ์—†์Œ
    ใ„ด ์ง€์šฐ๋”๋ผ๋„ npm install ํ•˜๋ฉด ๋‹ค์‹œ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์Œ (๋‹จ package.json file์ด ์ˆ˜์ •๋˜์ง€ ์•Š์•„์•ผ ํ•จ)
  • ํฌ๊ธฐ๊ฐ€ ๋„ˆ๋ฌด ํฌ๊ณ  file๋„ ๋งŽ์•„์„œ Git์— ์˜ฌ๋ฆด ๋•Œ ์ด folder๋Š” ์˜ฌ๋ฆฌ์ง€ ์•Š์Œ

public

  • ์ž˜ ๋ณ€๊ฒฝ๋˜์ง€ ์•Š๋Š” staticํ•œ file์„ ๋ณด๊ด€ํ•จ
  • index.html์˜ body tag์— ์žˆ๋Š” <div id="root"></div>๋ฅผ ํ†ตํ•ด React code๋ฅผ ์‹คํ–‰ํ•ด์„œ ๋งŒ๋“ค์–ด์ง„ DOM์ด ๊ตฌํ˜„๋จ

src

  • ๋Œ€๋ถ€๋ถ„์˜ ์ž‘์—…์ด ์ง„ํ–‰๋˜๋Š” folder
  • index.js์— ๊ธฐ์žฌ๋˜์–ด ์žˆ๋Š” import App from './App';๊ฐ€ ์•„๊นŒ ๋„์šด browser์˜ ํ™”๋ฉด์„ ๊ตฌํ˜„ํ•˜๋Š” code
  • App.js์—์„œ code ๊ตฌํ˜„ํ•˜๋ฉด ๋จ
    • ์—ฌ๊ธฐ์— code ์ž…๋ ฅํ•˜๋ฉด browser์— ๋ฐ”๋กœ ๋ฐ˜์˜๋จ (= HMR : Hot Module Replacement)
  • ํ˜น์€ pages folder๋‚˜ Footer.js ๋“ฑ ํ•„์š”ํ•œ file์„ ์ƒ์„ฑํ•ด์„œ code ์งœ๋ฉด ๋จ
    • 'Footer.js'์—์„œ ์ฒซ ๊ธ€์ž ๋Œ€๋ฌธ์ž์—ฌ์•ผ ํ•˜๊ณ ,; .js ๋Œ€์‹  .jsx๋กœ ์ €์žฅํ•ด๋„ ๋™์ž‘๋  ์ˆ˜ ์žˆ์œผ๋‚˜ ์—„์—ฐํžˆ ๋‹ค๋ฅด๋ฏ€๋กœ js ํŒŒ์ผ๋กœ ์ƒ์„ฑํ•ด์•ผ ํ•จ
  • reportWebVitals();๋ž‘ reportWebVitals.js (performance ๊ด€๋ จ์ž„) ์ฒ˜๋Ÿผ ๋‹น์žฅ ํ•„์š”์—†๋Š” code๋Š” ์‚ญ์ œ

package.json

  • npm start๊ฐ™์€ ๋ช…๋ น์–ด๋„ ์ด file์— ๊ธฐ๋ก๋˜์–ด ์žˆ์Œ ("scripts" ๋ถ€๋ถ„)
    • start : ๊ฐœ๋ฐœ mode๋กœ program์„ ์‹คํ–‰
    • build : ์‹ค์ œ ๋ฐฐํฌ mode๋กœ ๋งŒ๋“ฆ
    • test : ๊ทธ๋ƒฅ test?
    • eject : ๋‚ด๋ถ€ ์„ค์ • file์„ ๊บผ๋ƒ„ (web page๋‚˜ Babel ์„ค์ •์„ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ)

index.html

  • ์ผœ์ง„ browser (localhost:3000) ์˜ ๊ฐœ๋ฐœ์ž๋„๊ตฌ์—์„œ Elments tab์„ ๋ณด๋ฉด <div id="root"> ๋ฐ‘์— <div class="App">...</div> == $0๊ฐ€ ์žˆ๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.

๊ธฐํƒ€ ํ•„์š”ํ•œ folder ๋ฐ file ์ƒ์„ฑ

ex.

  • 1๏ธโƒฃ 'component' folder ์ƒ์„ฑ ํ›„ ํ•„์š”ํ•œ component file ์ถ”๊ฐ€
  • component folder ๋ฐ–์—์„œ (.gitignore์™€ ๊ฐ™์€ level์—์„œ) .eslintcache file์„ ๋งŒ๋“ค์–ด์„œ .gitignore์— ์ถ”๊ฐ€
  • 2๏ธโƒฃ 'styles' folder ์ƒ์„ฑ ํ›„ reset.scss, common.scss file ์ถ”๊ฐ€
  • project directory ๋‚ด์— Index.js์ฒ˜๋Ÿผ Routes.js file ์ƒ์„ฑ
    • Routes.js์— component ๊ฒฝ๋กœ ๊ธฐ์žฌ
  • .css๋Š” public folder์— ์ ‘๊ทผํ•˜๋Š” ๊ฒŒ ๋ถˆ๊ฐ€๋Šฅํ•˜๋ฏ€๋กœ ํ•„์š”ํ•œ image๋Š” src/assets/images ์ด๋Ÿฐ ๊ณณ์— ์ €์žฅ
1๏ธโƒฃ 
// ๊ฐ page์˜ component
import Login from './pages/Login/Login';
import Main from './pages/Main/Main';

// importํ•œ component ๊ฒฝ๋กœ ์„ค์ •
<Route exact path='/signin' component={Sign-in} />
<Route exact path='/' component={Main} />
2๏ธโƒฃ
@mixin flexCenter {
  display: flex;
  align-items: center;
  justify-content: center;
}

// .css file์—์„œ
@import '../common.scss'
.logo {
  @include flexCenter;
}    

๐Ÿ™‡ the source of this content

์ฝ”๋”ฉ์•™๋งˆ

profile
๋Š๋ ค๋„ ํ•  ๊ฑฐ์•ผ.......

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