๋ค์ด๊ฐ๊ธฐ ์ ..
ํ๋ก ํธ์๋๋ UI๋ง ๋ง๋๋ ์ฌ๋์ด ์๋๊ฐ? ๋ผ๋ ์คํด๊ฐ ๋ง๋ค.
ํ์ง๋ง ํ๋ก ํธ์๋๋ UI 50% ๊ทธ๋ฆฌ๊ณ javascript์ ๋ฐ์ดํฐ ํต์ ์ด 50%๋ฅผ ์ด๋ฃฌ๋ค.
UI๋ฟ๋ง ์๋๋ผ ํต์ ๋ถ๋ถ๋ ๋ค์ด๊ฐ์ผ ํ๋ก ํธ์๋๋ผ๊ณ ํ ์ ์๋ค.
ํ๋ก์ ํธ๋ฅผ ์งํํ๊ธฐ ์ ํ๋ก๊ทธ๋จ ์ค์น๊ฐ ํ์ํ๋ค.
- OS(์ด์์ฒด์ Operating System - mac, window, linux ๋ฑ ๋ด ์ปดํจํฐ)์ ํ๋ก๊ทธ๋จ ์ค์น
- ํด๋์ ํ๋ก์ ํธ ์ค์นํ๊ธฐ
๊ทธ ์ ์ Node.js์ npm์ด ๋ฌด์์ธ์ง ๊ทธ๋ฆฌ๊ณ ์ ์ค์นํด์ผ ํ๋์ง ์์๋ณด์.
- ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํ์ํค๋ ๋๊ตฌ
์์ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ ์์ด HTML, CSS, JS๋ฅผ ๊ฐ์ง๊ณ ๋ธ๋ผ์ฐ์ ๋ฅผ ๋ง๋ค์ด์๋ค.
๊ทธ๋์ ํํ์ด์ง๋ฅผ ๋ง๋ค์ด๋ดค๋ค ํ๋ฉด JS๋ฅผ ํด๋ณธ ๊ฒฝํ์ด ๋ฌด์กฐ๊ฑด ์์๋ค.
์ด๋ค ๊ฐ๋ฐ์์ด๊ฑด๊ฐ์ JS๋ฅผ ์ํด๋ณธ ์ฌ๋์ด ์์๋ค๋ ๊ฒ์ด๋ค.
ํ์ด์ฌ, ์๋ฐ ๋ฑ์ ์ธ์ด๋ค์ด ์๋๋ฐ ์ด๊ฒ๋ค๋ก๋ ๊ฒ์์ด๋ ๋ฉํฌ๋ก ๋ฑ์ ๋ง์ด ๋ง๋ค ์ ์์์ง๋ง JS๋ก๋ ๊ฒ์ ๋ฑ์ ๋ง๋ค ์ ์์๋ค. ๊ทธ๋์ ๋์จ๊ฒ์ด Node.js์ด๋ค. Node.js๋ ํ์ด์ฌ์ด๋ ์๋ฐ, ์๋ฐ์คํฌ๋ฆฝํธ์ ๊ฐ์ ์ธ์ด๊ฐ ์๋๋ผ ์ธ์ด(์๋ฐ์คํฌ๋ฆฝํธ)๋ฅผ ์คํ์ํค๋ ๋๊ตฌ์ด๋ค.
๋ฒ์ ์ด ๋๋ค๊ณ ํด์ ๋ฌด์กฐ๊ฑด ์ข์๊ฒ์ด ์๋๋ค.
์์ ์ ์ด๊ณ ์ ๋ขฐ๋๊ฐ ๋์ 16.15.1 ๋ฒ์ ์ผ๋ก ๋ค์ด๋ฐ๋ ๊ฒ์ ๊ถ์ฅํ๋ค!
- ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํจํค์ง ๋ ๋ชจ๋์ด ๋ญ์ณ์ ธ ์๋ ์ฌ์ดํธ
๊ทธ๋์ ์ด์ ์ฌ๋๋ค์ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์ฌ๋ฌ๊ฐ์ง ๋๊ตฌ๋ค์ ๋ง๋ค๊ธฐ ์์ํ๋ค. ์๋ฅผ ๋ค์ด ์บ๋ฌ์
์ ๋ง๋ ๋ค๊ณ ๊ฐ์ ํ์ ๋ ๋ชปํด๋ 2~300์ค์ ์ฝ๋๊ฐ ํ์ํ ๊ฒ์ด๋ค. ๊ทธ๋ฐ๋ฐ ๋๊ตฐ๊ฐ๊ฐ ์ด๊ฑธ ๋ฏธ๋ฆฌ ๋ง๋ค์ด ๋๊ณ ์์ค์ฝ๋๋ง ๋ถ๋ฌ์ฌ ์ ์๋ค๋ฉด ์ผ๋ง๋ ํจ์จ์ ์ผ๊น?๋ผ๋ ์๊ฐ์ ํ๊ธฐ ์์ํ๊ณ ๊ทธ๋์ ์ด๊ฒ(๋ผ์ด๋ธ๋ฌ๋ฆฌ)์ ๊ณต์ ํ๋ ๋ฌธํ๊ฐ ์๊ธฐ๊ธฐ ์์ํ๋ค. ๊ทธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ์
๋ก๋ํ๊ณ ๋ค์ด๋ก๋ํ ์ ์๋ ์ฌ์ดํธ๊ฐ ์๊ฒผ๊ณ ๊ทธ๊ฒ์ด npm์ด๋ค.
๋ ํจ์จ์ ์ผ๋ก ์น์ฌ์ดํธ๋ฅผ ์ ์ํ๊ธฐ ์ํด ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ ๋ง๋ค์ด ๋์ ๋ถํ๋ค์ ๋ค์ด๋ฐ์์ ์ฌ์ฉํ๋ ค๋ฉด Node.js์ npm / yarn์ด ํ์๋ผ๊ณ ํ ์ ์๋ค.
yarn ์ด๋ผ๋๊ฑด ํ์ด์ค๋ถ์์ ๋ง๋ npm๊ณผ ๊ฐ์ ์ญํ ์ ํ๋ ์ฌ์ดํธ์ด๋ค.
sudo npm install -g yarn
์ผ๋ก ์ค์น
npm์ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ Git/Github๋ฅผ ์ฌ์ฉํ๋ ๊ณผ์ ๊ณผ ๋งค์ฐ ๋น์ทํ๋ค.
(node.js ์ค์นํ๋ฉด npm ์๋ ์ค์น ๋)
Git/Github
๋ด ์ปดํจํฐ์ Git์ ๋ค์ด๋ฐ๋๋ค.
git ๋ช
๋ น์ด๋ก ๋ด ์์ค์ฝ๋๋ฅผ Github์ ์ฌ๋ฆฐ๋ค.
git ๋ช
๋ น์ด๋ก ์์ค์ฝ๋๋ฅผ ๋ค์ด๋ฐ๋๋ค.
NPM
๋ด ์ปดํจํฐ์ npm์ ๋ค์ด๋ฐ๋๋ค.
npm ๋ช
๋ น์ด๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ด vscode์ ๋ค์ด๋ก๋ ๋ฐ๋๋ค.
(CLI Command Line Interface <-> GUI - Grapic User Interface)
๋ชจ๋ ๋ช ๋ น์ด๋ ๋ช ๋ น์ด ๋ค์ โhelp ์ต์ ์ ์์ฑํ๋ฉด ์์ธํ ์ฌ์ฉ ๋ฐฉ๋ฒ์ ์ ์ ์๋ค.
์ ๋ช ๋ น์ด๋ฅผ ํตํด์ ํ๋ก์ ํธ์ ํ์ํ ํ๋ก๊ทธ๋จ๋ค์ ์ค์นํ์!
Next.js (https://nextjs.org/) ์ค์น
npx create-next-app@latest
Emotion (https://emotion.sh/) ์ค์น
yarn add @emotion/react
Apollo-Client, Graphql(https://www.apollographql.com/) ์ค์น
npm install @apollo/client graphql
Axios ์ค์น
yarn add axios
Ant-Design(https://ant.design/), Material-UI(https://material-ui.com/) ์ค์น
yarn add antd
npm install @material-ui/core
์ค์น๋ฅผ ์๋ฃํ๊ฒ ๋๋ฉด ํด๋๊ตฌ์กฐ๊ฐ ๋ฐ๋๊ฒ ๋๋ค.
์ด๋ฐ ์ด๊ธฐ ํด๋ ๊ตฌ์กฐ๋ฅผ ๋ณด์ผ๋ฌ ํ๋ ์ดํธ
๋ผ๊ณ ํ๋ค.
README.md
- ๊นํ๋ธ์์ ์ด ์ฌ์ดํธ๋ ์ด๋ค ์ฌ์ดํธ๋ผ๊ณ ์๊ฐํ๋ ์ค๋ช
์์yarn.lock
- ์ค์น๋ ๋น์์ ๋ฒ์ ์ ์ ๊ธํด๋๋ ํ์ผ(๋์ค์๋ผ๋ ๊ฐ์ ๋ฒ์ ์ ๊น์์ฃผ๋๋ก ํจ)๊ธฐ์กด(HTML)์๋ script ํ๊ทธ๋ก Javascript ํ์ผ์ ๋ถ๋ฌ์์๋ค๋ฉด
<script src='game.js'></script>
React์์๋ export๋ก js๋ฅผ ๋ด๋ณด๋ด๊ณ import๋ก ๋ถ๋ฌ์จ๋ค.
export const apple = 10
import {apple, banana} from 'game.js'
๊ธฐ์กด์๋ link ํ๊ทธ๋ฅผ ์ฌ์ฉํด์ cssํ์ผ์ ๋ถ๋ฌ์์๋ค๋ฉด
<link href='./styles/game.css' rel='stylesheet'/>
React์์๋ import๋ก ๋ถ๋ฌ์ฌ ์ ์๋ค.
import styles from '../styles/Home.css'
๋จผ์ package.json
์ ๋ณด์.
ํฌ๊ฒ script, dependencies, devDependencies๊ฐ ์๋ค.
dependencies
, devDependencies
๋ ์ค์น ๋ชฉ๋ก๋ค์ด๋ค.
์ด ๋ชฉ๋ก๋ค์ node_modules
์์ ์ค์ ๋ก ์ค์น๊ฐ ๋์ด์๋ค.
๊ทธ๋์ ์ค์น๋ฅผ ์ฒ์๋ถํฐ ๋ค์ํ๊ณ ์ถ๋ค๋ฉด node_modules๋ฅผ ์ง์ฐ๊ณ package.json
์ด ์๋ ์์น์์ yarn install
์ ๋ค์ํ๋ฉด ์ปดํจํฐ๊ฐ ์๋์ผ๋ก ์ค์น ๋ชฉ๋ก๋ค์ node_modules์ ๋ง๋ ๋ค.
script
๋ ์ฌ์ฉ์ค๋ช
์ ๋ถ๋ถ์ด๋ค. ์คํ ๋ช
๋ น์ด๋ค์ด ์งํฉ๋์ด์๋ค.
dev - ํ๋ก๊ทธ๋จ ์คํ ์ํค๋ ๋ช
๋ น์ด (yarn dev๋ก ์คํ)
build - ๋ฐฐํฌ ์ ํ์
start - ๋ฐฐํฌ์ ํ์
lint - ์์ค์ฝ๋์ ๋ฌธ์ ๊ฐ ์๋์ง ์ฒดํฌํด์ฃผ๋ ๋ช
๋ น์ด
index.js
: ํ์ด์ง
_app.js
: ๋ชจ๋ ํ์ด์ง์ ๋ํ ์ด๊ธฐ ์
ํ
( ํ์ด์ง๊ฐ ์๋ )
์ด์ package.json
์ด ์๋ class ํด๋ ์์น์์ yarn dev
๋ช
๋ น์ด๋ฅผ ์คํ์์ผ์ค๋ค. ์๋์ ์ฃผ์๊ฐ ๋จ๋ฉด ๋๋ค.
์ด์ Next.js
์ ์ด๊ธฐํ๋ฉด์ ๋ณผ ์ ์๋ค.
(Next.js๋ React๊ฐ ์ด๋ฏธ ์๋ ์ํ์์ ์คํ์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ React์ ์
๊ทธ๋ ์ด๋ ๋ฒ์ ์ด๋ผ๊ณ ํ ์ ์์)
stylesheet๋ ์ด๋ ๊ฒ import ํด์ ์ฌ์ฉํ๋ค.
return ์์ชฝ์ด javascript์ด๊ณ return ์๋์ชฝ์ด html์ด๋ค.
์ด์ ๊ทธ๋ ๋ค๋ฉด ์ด {์ค๊ดํธ}
๋ค์ ๋ฌด์์ผ๊น.
React์์๋ HTML ๋์ React ์ ์ฉ HTML์ธ JSX๋ฅผ ์ฌ์ฉํ๋ค.
๊ธฐ์กด HTML์์๋ class, onclick๋ผ๊ณ ํ๋ ๊ฒ์ JSX์์๋ className, onClick์ผ๋ก ์ฌ์ฉํ๋ค.
CSS ๋ํ CSS-IN-JS ๋ฐฉ์์ ์ฌ์ฉํ๋ค.
css๊ฐ ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ณ์๋ ์์์ ๋ค์ด๊ฐ์ ์ฌ์ฉ๋๋ค.
์์ ์ฝ๋๋ css ์ฝ๋๊ฐ ๋ง์ง๋ง class ์ ํ์๋ id ์ ํ์ ๋ง๊ณ ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ค.
๊ธฐ์กด์ ์ฌ์ฉํ๋ CSS ๋ฐฉ์์ div๊ฐ ๋ญํ๋ ๋์ธ์ง ์๊ธฐ๊ฐ ์ด๋ ค์ ๋ค.
๊ทธ๋์ ๋ณ์๋ช
์ ์ฌ์ฉํ๋๊น ์ด๊ฒ ์ด๋ฆ์ด ๋ถ์ ํ๊ทธ๋ก ๋ญํ๋ ๋์ธ์ง ์ ์ ์๊ฒ ๋์๋ค. ํ๊ทธ์ ๋๋ง์ ์๋ฏธ๋ฅผ ๋ถ์ฌํ ์ ์๊ฒ ๋์๊ณ ์ฝ๋์ ๊ธธ์ด๊ฐ ํจ์ฌ ์งง์์ก๋ค๋ ์ฅ์ ์ด ์๊ฒจ๋๊ฒ ๋์๋ค. ๊ทธ๋์ ์ ์ CSS๊ฐ ์์ด์ง๊ณ JS๋ก ํตํฉ๋๊ณ ์๋ค.
์ ์ฒด์ ์ธ ์ฝ๋๋ก ๋ดค์ ๋๋ค.
๊ธฐ์กด์ CSS๋ณด๋ค ํจ์ฌ ๊ธธ์ด๋ ์งง์์ก๊ณ ๋ญํ๋ ํ๊ทธ์ธ์ง ํ๋์ ๋ค์ด์จ๋ค.
๋ ๋ณ์๋ฅผ ํ๋ฒ ๋ง๋ค์ด๋จ๊ธฐ ๋๋ฌธ์ ๊ทธ ๋ณ์๋ฅผ ์ฌ์ฌ์ฉํ ์ ์์ด ๊ต์ฅํ ํจ์จ์ ์ผ๋ก ๋ณํ๋ค.
CSS-IN-JS ๋ฅผ ์ฌ์ฉํ์ ๋์ ์ฅ์
- ๊ฐ๊ฒฐํ ์ฝ๋
- ํ๊ทธ์ ์๋ฏธ ๋ถ์ฌ
- ์ฝ๋ ์ฌ์ฌ์ฉ์ฑ ์ฆ๊ฐ
์ด์ CSS-IN-JS์ ์ข
๋ฅ ์ค ํ๋์ธ Emotion์ ์ฌ์ฉํด๋ณด์.
(CSS-IN-JS์ ๋ฐฉ์์๋ styled-components, emotion ๋ฑ์ด ์๋ค.)
1. emotion์ import ํด์ค๋ค.
2. css๋ฅผ ์์๋ก ์ง์ ํด์ค๋ค.
3. JSX์ ํ๊ทธ๋ฅผ ์ง์ ํด์ค ์์๋ก ๋ณ๊ฒฝํด์ค๋ค.