React๋ ๋ฌด์์ธ๊ฐ์?
React๋ ํ์ด์ค๋ถ์ด ๋ง๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ์งง์ ์๊ฐ ๋ด์ ์ ๋ช ์ธ๋ฅผ ํกํกํ ์ป์ ํ๋ ์์ํฌ์ ๋๋ค. ์ง๋ 3๋ ๊ฐ์ ์กฐ์ฌ์ ๋ฐ๋ฅด๋ฉด Angular์ Vue.js๋ณด๋ค ๋ ๋์ ๋ง์กฑ๋๋ฅผ ๊ฐ์ง๊ณ ์๋ค๊ณ ํฉ๋๋ค. 2019๋ ๋ง์๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ ์ค์์ ๊ฐ์ฅ ์ฌ์ฉ์๊ฐ ๋ง์ ํ๋ ์์ํฌ๊ฐ ๋ ๊ฒ์ด๋ผ ์์๋๋ค๊ณ ํฉ๋๋ค.
HTML5, CSS, Javascript๊ฐ ์ต์ํ๋ค๋ฉด, ์์ฆ ๋ง์ ์์๊ฐ ์๋ React๋ฅผ ํตํด ์น๊ฐ๋ฐ์ ๋ฐฐ์๋ณด๋ ๊ฒ์ด ์ด๋จ๊น์? ๋ฌผ๋ก ์ ๋ ๋ฐฐ์ฐ๋ฉด์ ์ด ๊ธ์ ์ฐ๊ณ ์์ต๋๋ค.
๊ฐ๋ฐํ๊ฒฝ ์ค์ ํ๊ธฐ ์ํํธ์จ์ด
๊ฐ๋ฐ์ ์์ํ๊ธฐ์ ์์, ๊ฐ๋ฐํ๊ฒฝ์ ์ค์ ํด๋ด ์๋ค. ํ์ํ ์ํํธ์จ์ด๋ ์๋์ ๊ฐ์ต๋๋ค.
1) ํ ์คํธ ์๋ํฐ ์ค์นํ๊ธฐ
์ด๋ฏธ ์ฌ์ฉํ๊ณ ์๋ ์น์ํ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์๋ฉด ๋์ง๋ง, ์ ๋ Visual Studio Code๋ฅผ ์ ํธํฉ๋๋ค. ํ ์คํธ ์๋ํฐ๋ ๊ทธ ์ธ์ Braket์ด๋ Sublime Text๋ ์์ผ๋ ์ํ์๋ ํ๋ก๊ทธ๋จ์ ์ฌ์ฉํ์๋ฉด ๋ฉ๋๋ค.
2) ์ปค๋งจ๋ ๋ผ์ธ ์ Command Line Shell
์๋์ฐ์์๋ cmd ์ฐฝ, Power Shell์, ๋งฅ๊ณผ ๋ฆฌ๋
์ค์์๋ ํฐ๋ฏธ๋ Terminal ์ฐฝ์ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค. Git์ ์ค์นํ ๋ ๊ฐ์ด Git Bash๋ฅผ ์ค์นํ์ฌ ์ฌ์ฉํ ์ ์์ต๋๋ค. ํน์ ํ
์คํธ์๋ํฐ๋ก Visual Studio Code๋ฅผ ์ฌ์ฉํ๋ค๋ฉด ํ์ฅํ๋ก๊ทธ๋จ์ Terminal์ด ์๊ธฐ ๋๋ฌธ์, ๋ฒ๊ฑฐ๋กญ๊ฒ ๋ฐ๋ก ์ฐฝ์ ์ด ํ์ ์์ด, ํ
์คํธ ์๋ํฐ ๋ด์์ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ต์ ๋ฒ์ ์์๋ Terminal์ ์์ฒด์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. (new!)
3) ๋ธ๋ผ์ฐ์ ์ ํ
๋ชจ๋ ๋ธ๋ผ์ฐ์ ์ ๋ฒ์ ์ด HTML5๋ฅผ ์ง์ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ต์ ๋ฒ์ ์ ํฌ๋กฌ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค. ์ ๋ ํ์ฌ ํฌ๋กฌ v.76์ ์ฐ๊ณ ์์ต๋๋ค.
๊ฐ๋ฐํ๊ฒฝ ์ค์ ํ๊ธฐ Git ์ค์ ํ๊ธฐ
Git์ ์ค์นํฉ๋๋ค. Git์ GUI ํด์ ์ฌ์ฉํ๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ์์ ํ์ธํ ์ ์์ต๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ์ถ์ฒ์ ๋ง์ด ๋ฐ์ ํ๋ก๊ทธ๋จ์ SourceTree์ Fork๋ก, ๋์ ์ฐจ์ด์ ์ ์๊ณ ์ถ๋ค๋ฉด ์ฌ๊ธฐ๋ฅผ ์ฐธ์กฐํ์ธ์.
Git์ ์ค์น๊ฐ ๋๋ฌ๋ค๋ฉด ์ต์ด๋ก ๊ณ์ ์ค์ ์ ํด์ผํฉ๋๋ค.
1) ์ปค๋งจ๋ ์ฐฝ์ ์ด๊ณ Git์ด ์ ๋๋ก ์ค์น๋์๋์ง ํ์ธํฉ๋๋ค.
$ git --version
2) Git์์ ์ฐ์ผ ์ด๋ฆ๊ณผ ๋ฉ์ผ์ฃผ์๋ฅผ ์ค์ ํฉ๋๋ค.
$ git config --global user.name "์ฌ์ฉ์์ด๋ฆ"
$ git config --global user.email ์ฌ์ฉ์๋ฉ์ผ์ฃผ์
3) ์๋์์ ์ ๋๋ก ์ค์ ์ด ๋์๋์ง ํ์ธํ ์ ์์ต๋๋ค.
$ git config --list
--list ๋์ user.email, user.name๋ฑ ํค๊ฐ์ ์ ๋ ฅํด๋ ๋ณผ ์ ์์ต๋๋ค.
๊ฐ๋ฐํ๊ฒฝ ์ค์ ํ๊ธฐ Node.js์ NPM ์ค์นํ๊ธฐ
Node.js์ npm์ ์ค์นํฉ๋๋ค. Node.js๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ๋ฐ ์๋ฒ ํ๋ ์์ํฌ์ด๋ฉฐ, NPM์ Node Package Manager์ ๋๋ค. ์ฌ๊ธฐ์์ ์ค์นํ์ผ์ ๋ค์ด๋ฐ์ต๋๋ค.
์ปค๋งจ๋ ์ฐฝ์์ Node.js์ NPM์ด ์ ๋๋ก ์ค์น๋์๋์ง ํ์ธํด๋ด ๋๋ค.
$ node -v
$ npm -v
๋ฒ์ ์ด ์ ๋๋ก ๋จ๋ฉด ์ค์น๋ ๊ฒ์ ๋๋ค.
๊ฐ๋ฐ์ ์์ํ๊ธฐ
์ด์ ๊ฐ๋ฐ์ ์์ํ๋ ค๋ ํด๋๋ฅผ ๋ง๋ญ๋๋ค. ๊ฐ๊ธ์ ์๋ฌธ์ผ๋ก ๋ ํด๋ ์ด๋ฆ์ ์ฌ์ฉํ๊ธฐ๋ฅผ ๊ถ์ฅํฉ๋๋ค.
1) ์ปค๋งจ๋ ์ฐฝ์ด๋, ํน์ Visual Studio Code ํ๋ก๊ทธ๋จ ๋ด ํฐ๋ฏธ๋์ฐฝ์์ ํด๋น ํ๋ก์ ํธ ํด๋๋ก ์ด๋ํ๊ฑฐ๋ ์ฝ๋๋ค.
2) git์ ์ค์ ํฉ๋๋ค.
$ git init
์ปค๋งจ๋์ฐฝ์ ์ ๋ ฅํ๋ฉด ๋น Git Repository๋ฅผ ํด๋น ๊ฒฝ๋ก์ ์ด๊ธฐํ๋์๋ค๊ณ ๋น๋๋ค.
3) npm์ ์ค์ ํฉ๋๋ค.
$ npm init
๊ณ์ ์ํฐ๋ฅผ ๋๋ฌ์ฃผ๋ค๋ณด๋ฉด Is this OK? (yes) ๊ฐ ๋์ต๋๋ค. ์ํฐ๋ฅผ ๋๋ฌ์ฃผ๋ฉด ๋ฉ๋๋ค.
ํ๋ก์ ํธ ํด๋ ๋ด์ "package.json" ํ์ผ์ด ์ถ๊ฐ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด ํ์ผ์ ํ๋ก์ ํธ์ ์์กด์ฑ์ ๊ด๋ฆฌํ๋ ๋งค์ฐ ์ค์ํ ํ์ผ์ ๋๋ค.
4) .gitignore ํ์ผ ์ค์ ํ๊ธฐ
ํ ์คํธ ์๋ํฐ ๋ด์์ ์ ํ์ผ์ ์ถ๊ฐํ์ฌ .gitignore ํ์ผ์ ๋ง๋ค์ด์ค๋๋ค. ์ค์ํ ๊ฒ์ ํ์ผ ์ด๋ฆ์ด ์จ์ (.)์ผ๋ก ์์ํ๋ค๋ ๊ฒ์ ๋๋ค. ".gitignore" ํ์ผ ๋ด์ node_modules๋ฅผ ์ ๊ณ ์ ์ฅํด์ค๋๋ค.
node_modules
.gitignore ํ์ผ ๋ด์ ์ ํ ํด๋์ ํ์ผ์ ์ปค๋ฐ์ ์ถ๊ฐ๋์ง ์๊ณ , ์ ์ฅ์์ ์ฌ๋ผ๊ฐ์ง ์์ต๋๋ค.
5) React ์ฌ์ฉํ๊ธฐ
$ npm install --save react react-dom
6) Babel ์ฌ์ฉํ๊ธฐ
Babel์ ์ฝ๋๋ฅผ ๋ณํํด์ฃผ๋ ๊ฐ๋ฐ๋๊ตฌ๋ก, ES6+ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ชจ๋ ์น๋ธ๋ผ์ฐ์ ์์ ํธํ์ด ๊ฐ๋ฅํ๋๋ก ํ๋ค.
๋๋ฌธ์ ์ง๊ธ๋ถํฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ๊ณต๋ถํ๋ค๋ฉด ES5 ์ดํ ๋ฌธ๋ฒ์ ๊ณต๋ถํ๋ ๋ฐ ์ด์ ์ฌ๋ฆด ํ์๋ ์๋ค. ES6+ ๋ฌธ๋ฒ์ ๊ณต๋ถํ์.
$ npm install --save-dev babel-preset-env babel-preset-react
ํ๋ก์ ํธ ํด๋์์ .babelrc ํ์ผ์ ๋ง๋ค๊ณ ํ์ผ ๋ด์ ์๋์ ๊ฐ์ด ์ ์ด ์ ์ฅํฉ๋๋ค.
{
"presets": [ "env" , "react" ]
}
7) Parcel ์์ํ๊ธฐ
$ npm install -g parcel-bundler
Parcel์ ์ค์น๊ฐ ์๋ฃ๋๋ฉด package.json ํ์ผ์ NPM ์คํฌ๋ฆฝํธ๋ฅผ ์ถ๊ฐํ๋ฉด ํธ๋ฆฌํ๊ฒ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
"scripts": {
"start": "parcel index.html"
}
๊ฐ๋ฐ์๋ฒ๋ฅผ ์ด์ด์ฃผ๋ ํ์ ๋ช ๋ น์ด์ ๋๋ค. ์์ ๊ฐ์ด ๋ฑ๋กํ ํ
$ npm start
์ด๋ ๊ฒ ์ฌ์ฉํ๋ฉด ๋ฉ๋๋ค.
์ฌ๊ธฐ๊น์ง ํ๊ฒฝ์ค์ ์ด ๋๋ฌ์ต๋๋ค.
๋ค์ ๊ธ์์๋ React๋ฅผ ํ์ฉํด ์ค์ ๋ก ๊ฐ๋ฐ์ ์์ํด๋ณด๋๋ก ํฉ์๋ค.
๊ฐ์ฌํฉ๋๋ค.
---
(์๋ฃ!) + ์ฝ๋๋ฅผ ์ฃผ์์ผ๋ก ์ฝ์
ํด์๋๋ฐ, ํฐ์คํ ๋ฆฌ ์๋ํฐ์์ ์ฝ๋๋ก ์ฝ์
ํ ์ ์๋ ๋ถ๋ถ์ด ์์ด์ ๋ค์ ๊ธ์ด ์ฌ๋ผ์ค๊ธฐ ์ ๊น์ง ์์ ํ๊ฒ ์ต๋๋ค.
+ ์นํฉ๊ณผ ํ์ ์ ๋ํ ๋ด์ฉ์ ํด๋น ๊ธ์ ์ถ๊ฐํ๊ฑฐ๋, ๋ค์ ๊ธ์ ๋ฐ๋ก ๋ค๋ฃจ๋๋ก ํ๊ฒ ์ต๋๋ค.
+ ์ค๋ช ์ ์์๊ฐ ๋๋ ์ด๋ฏธ์ง ํ์ผ์ ์ถํ ์ถ๊ฐํ๋๋ก ํ๊ฒ ์ต๋๋ค.
๋๊ธ