React
React is the library for web and native user interfaces. Build user interfaces out of individual pieces called components written in JavaScript. React is designed to let you seamlessly combine components written by independent people, teams, and organizati
ko.react.dev
๐ก๋ฆฌ์กํธ(React)๋?
๋ฆฌ์กํธ(React)๋ ํ์ด์ค๋ถ์์ ๊ฐ๋ฐํ ์๋ฐ์คํฌ๋ฆฝํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก, ์ฌ์ฉ์ ์ธํฐํ์ด์ค(UI)๋ฅผ ๊ตฌ์ถํ๊ธฐ ์ํด ์ฌ์ฉ๋ฉ๋๋ค. ๋ฆฌ์กํธ๋ MVC(Model-View-Controller), MVVM(Model-View-ViewModel)๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ๋ ์์ํฌ์๋ ๋ฌ๋ฆฌ View๋ง์ ์ง์ค์ ์ผ๋ก ์ฒ๋ฆฌํฉ๋๋ค. ๋ฆฌ์กํธ๋ SPA(Single Page Application) ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ฅด๋ฉฐ, ํ๋์ HTML ํ์ผ(index.html)๋ก ๋ชจ๋ ํ๋ฉด์ ๊ตฌ์ฑํฉ๋๋ค.
๐ก๋ฆฌ์กํธ์ ์ฃผ์ ๊ฐ๋
โ๏ธ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ ์ฒ
๋ฆฌ์กํธ๋ ์ปดํฌ๋ํธ๋ผ๋ ์์ ๋จ์๋ก UI๋ฅผ ๊ตฌ์ฑํฉ๋๋ค. ๊ฐ ์ปดํฌ๋ํธ๋ ๋ ๋ฆฝ์ ์ด๋ฉฐ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ฝ๋ ๋ธ๋ก์ผ๋ก, ์๋ฐ์คํฌ๋ฆฝํธ์ HTML์ ๊ฒฐํฉํ JSX ๋ฌธ๋ฒ์ ์ฌ์ฉํ์ฌ ํ๋ฉด์ ํน์ ๋ถ๋ถ์ ์ ์ํฉ๋๋ค. ์ด๋ฌํ ์ปดํฌ๋ํธ๋ ๋ค๋ฅธ ์ปดํฌ๋ํธ์ ๊ฒฐํฉํ์ฌ ๋ณต์กํ UI๋ฅผ ๊ตฌ์ฑํ ์ ์์ต๋๋ค.
โ๏ธ Virtual DOM
์ผ๋ฐ์ ์ผ๋ก ์น ๋ธ๋ผ์ฐ์ ๋ DOM(Document Object Model)์ ์ฌ์ฉํ์ฌ HTML ๋ฌธ์๋ฅผ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ํํํ๊ณ , ์ด๋ฅผ ํตํด ํ๋ฉด์ ๋ ๋๋งํฉ๋๋ค. ํ์ง๋ง DOM์ ์ง์ ์กฐ์ํ๋ ๊ฒ์ ์ฑ๋ฅ์ ๋ถ๋ด์ ์ค ์ ์์ต๋๋ค.
Virtual DOM์ ์ค์ DOM์ ๊ฐ์์ผ๋ก ๋ณต์ ํ ์๋ฐ์คํฌ๋ฆฝํธ ๊ฐ์ฒด์ ๋๋ค. ์ํ๊ฐ ๋ณ๊ฒฝ๋๋ฉด, ๋ฆฌ์กํธ๋ ์๋ก์ด Virtual DOM์ ์์ฑํ๊ณ ์ด์ Virtual DOM๊ณผ ๋น๊ตํ์ฌ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ์ฑ๋ฅ์ ์ต์ ํํ ์ ์์ต๋๋ค.
โ๏ธ ๋ฐ์ดํฐ ํ๋ฆ: ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ
๋ฆฌ์กํธ๋ ๋จ๋ฐฉํฅ ๋ฐ์ดํฐ ๋ฐ์ธ๋ฉ์ ์ฌ์ฉํฉ๋๋ค. ๋ฐ์ดํฐ๋ ๋ถ๋ชจ ์ปดํฌ๋ํธ์์ ์์ ์ปดํฌ๋ํธ๋ก๋ง ํ๋ฅด๋ฉฐ, ์ด๋ก ์ธํด ๋ฐ์ดํฐ์ ํ๋ฆ์ ์์ธกํ๊ธฐ ์ฝ๊ณ ๋๋ฒ๊น ์ด ์ฉ์ดํฉ๋๋ค. ์ํ(state)์์์ฑ(props)์ ํตํด ์ปดํฌ๋ํธ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๊ณ , ์ด๋ฅผ ํตํด ์ปดํฌ๋ํธ์ UI๋ฅผ ๋์ ์ผ๋ก ์ ๋ฐ์ดํธํฉ๋๋ค.
โ๏ธ Webpack๊ณผ ๋ฒ๋ค๋ง
๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์์๋ Webpack๊ณผ ๊ฐ์ ๋ฒ๋ค๋ฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค. Webpack์ ์๋ฐ์คํฌ๋ฆฝํธ, CSS, ์ด๋ฏธ์ง ๋ฑ์ ์์์ ํ๋์ ํ์ผ๋ก ๋ฌถ์ด์ฃผ๋ ๋๊ตฌ๋ก, ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ก๋ฉ ์๋์ ์ฑ๋ฅ์ ํฅ์์ํต๋๋ค. ๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก Webpack ์ค์ ์ด ํฌํจ๋๋ฉฐ, ์ด๋ฅผ ํตํด ํ๋ก์ ํธ๋ฅผ ๋ณด๋ค ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
๐ก๋ฆฌ์กํธ ํ๊ฒฝ์ค์
1๏ธโฃ Node.js ์ค์น
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ํ๋ ค๋ฉด Node.js๊ฐ ํ์ํฉ๋๋ค. Node.js๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ์๋ฒ์ฒ๋ผ ๋์ํ ์ ์๋ ํ๊ฒฝ์ ์ ๊ณตํฉ๋๋ค. Node.js๋ ๊ณต์ ์น์ฌ์ดํธ(https://nodejs.org/en)์์ ๋ค์ด๋ก๋ํ์ฌ ์ค์นํฉ๋๋ค.
Node.js๋ฅผ ์ค์นํ๋ฉด, npm(Node Package Manager)๋ ์๋์ผ๋ก ํจ๊ป ์ค์น๋ฉ๋๋ค. npm์ ์๋ฐ์คํฌ๋ฆฝํธ ํจํค์ง๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ๋ ๋๊ตฌ๋ก, Node.js ํ๊ฒฝ์์ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํจํค์ง๋ฅผ ์ฝ๊ฒ ์ค์นํ๊ณ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ๋์์ค๋๋ค. ๋ฐ๋ผ์ Node.js ์ค์น ํ npm ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํด ๋ฆฌ์กํธ ๊ด๋ จ ํจํค์ง๋ ๋ค๋ฅธ ๊ฐ๋ฐ ๋๊ตฌ๋ฅผ ์ค์นํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
ํจํค์ง ๊ด๋ฆฌ์ ๋ช ๋ น๋ฌธ(npm, npx, yarn)
npm์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ด๋ฉฐ, npx๋ npm ํจํค์ง ์คํ ๋๊ตฌ๋ก ์ฌ์ฉ๋ฉ๋๋ค. yarn์ ์์ ์ฑ๊ณผ ๋ณด์์ฑ์์ ์ฐจ๋ณํ๋ ๋ค๋ฅธ ํจํค์ง ๊ด๋ฆฌ์์ ๋๋ค. ์ด๋ค ๋๊ตฌ๋ ๋ชจ๋ ํ๋ก์ ํธ ์์กด์ฑ ๊ด๋ฆฌ์ ํจํค์ง ์ค์น์ ์ฌ์ฉ๋ฉ๋๋ค.
2๏ธโฃ ์๋ํฐ ์ค์ (VSCode)
๋ฆฌ์กํธ ๊ฐ๋ฐ์๋ VSCode(Visual Studio Code)๊ฐ ๊ถ์ฅ๋ฉ๋๋ค. ์ฝ๋ ๊ฐ๋ ์ฑ์ ์ํด ์ธ๋ดํธ ์ค์ ์ 2์นธ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์ข์ต๋๋ค. (File > Settings)
3๏ธโฃ ํ๋ก์ ํธ ์์ฑ (npm create react-app)
๋ฆฌ์กํธ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ ค๋ฉด npm ๋ช ๋ น์ด๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์ด ๋ ํ๋ก์ ํธ๋ช ์ ์๋ฌธ์์ ํ์ดํ(-)๋ง ์ฌ์ฉํด์ผ ํฉ๋๋ค.
์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด, ์๋ก์ด ๋ฆฌ์กํธ ํ๋ก์ ํธ๊ฐ ์์ฑ๋๊ณ ๊ธฐ๋ณธ์ ์ธ ์ค์ ์ด ์๋ฃ๋ฉ๋๋ค.
npm create react-app ํ๋ก์ ํธ๋ช
4๏ธโฃ ํ๋ก์ ํธ ์คํ (npm start)
์์ฑํ ํ๋ก์ ํธ์ ๋๋ ํ ๋ฆฌ๋ก ์ด๋ํ๋ค์, npm ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ์์ํฉ๋๋ค. ์ด ๋ช ๋ น์ด๋ฅผ ์คํํ๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์๋์ผ๋ก ์ด๋ฆฌ๋ฉฐ, ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋ก๋๋ฉ๋๋ค. ์ด์ ๋ก์ปฌ ํ๊ฒฝ์์ ์ฝ๋๋ฅผ ์์ ํ๋ฉด ์ค์๊ฐ์ผ๋ก ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ ์ ์์ต๋๋ค.
cd ํ๋ก์ ํธ๋ช
npm start
๐ก๋ฆฌ์กํธ ํ๋ก์ ํธ ๊ธฐ๋ณธ ๊ตฌ์กฐ
my-react-app/
โโโ node_modules/ # ๐ ํ๋ก์ ํธ ์์กด์ฑ ํจํค์ง๊ฐ ์ค์น๋๋ ํด๋ (์๋ ์์ฑ)
โโโ public/ # ๐ ์ ์ ํ์ผ๋ค์ด ์์นํ๋ ํด๋
โ โโโ index.html # ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์
์ HTML ํ์ผ
โ โโโ ... # ๊ธฐํ ์ ์ ์์ฐ (์ด๋ฏธ์ง, ์์ด์ฝ ๋ฑ)
โโโ src/ # ๐ ์ ํ๋ฆฌ์ผ์ด์
์ ์์ค ํ์ผ๋ค์ด ์์นํ๋ ํด๋
โ โโโ components/ # ๐ UI๋ฅผ ๊ตฌ์ฑํ๋ ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ๋ค์ด ์์นํ๋ ํด๋
โ โ โโโ App.js # ์ฃผ์ App ์ปดํฌ๋ํธ ํ์ผโจ
โ โ โโโ App.css # App ์ปดํฌ๋ํธ์ ์คํ์ผ ํ์ผ
โ โ โโโ ... # ์ถ๊ฐ์ ์ธ ์ปดํฌ๋ํธ ํ์ผ๋ค
โ โโโ index.js # ์ ํ๋ฆฌ์ผ์ด์
์ ์ง์
์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผโจ
โ โโโ index.css # ์ ์ญ ์คํ์ผ ํ์ผ
โ โโโ App.test.js # App ์ปดํฌ๋ํธ์ ๋ํ ํ
์คํธ ํ์ผ
โ โโโ ... # ์ถ๊ฐ์ ์ธ ์์ค ํ์ผ๋ค (์: ์ ํธ๋ฆฌํฐ, ์๋น์ค ํ์ผ ๋ฑ)
โโโ .gitignore # Git ๋ฒ์ ๊ด๋ฆฌ์์ ์ ์ธํ ํ์ผ/ํด๋๋ฅผ ๋ช
์ํ๋ ํ์ผ
โโโ package.json # ํ๋ก์ ํธ ๋ฉํ๋ฐ์ดํฐ์ ์์กด์ฑ ์ ๋ณด๊ฐ ํฌํจ๋ ํ์ผโจ
โโโ README.md # ํ๋ก์ ํธ์ ๋ํ ์ค๋ช
, ์ค์น ๋ฐฉ๋ฒ ๋ฑ์ ํฌํจํ ํ์ผ
โโโ yarn.lock / package-lock.json # ์์กด์ฑ ๊ด๋ฆฌ ํ์ผ (Yarn ๋๋ NPM ์ฌ์ฉ์ ๋ฐ๋ผ ์์ฑ)
โ๏ธ index.js์ App.js์ ์ญํ
- index.js๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ง์ ์ (Entry Point)์ ๋๋ค. ์ด ํ์ผ์ ReactDOM ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ App ์ปดํฌ๋ํธ๋ฅผ ๋ฃจํธ DOM ๋ ธ๋์ ๋ ๋๋งํฉ๋๋ค.
- App.js๋ ๋ฆฌ์กํธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ณธ ์ปดํฌ๋ํธ์ ๋๋ค. create-react-app์ผ๋ก ์์ฑ๋ ํ๋ก์ ํธ์ ๊ธฐ๋ณธ ์ฝ๋๋ ๊ฐ๋จํ JSX ์ฝ๋๋ฅผ ๋ฐํํ์ฌ ๋ฆฌ์กํธ์ ๊ตฌ์กฐ๋ฅผ ์ค๋ช ํ๋ ์ญํ ์ ํฉ๋๋ค.
โ๏ธ Git์์ ํ๋ก์ ํธ ํด๋ก ํ ๋ฌธ์ ํด๊ฒฐ (npm install)
Git์์ ํด๋ก ํ ํ๋ก์ ํธ์ ๊ฒฝ์ฐ node_modules ํด๋๊ฐ ๋๋ฝ๋ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, ํ๋ก์ ํธ์ ์ต์์ ๋๋ ํ ๋ฆฌ์์ npm install ๋ช ๋ น์ด๋ฅผ ์คํํ์ฌ `package.json`์ ๋ช ์๋ ๋ฒ์ ์ผ๋ก ํ์ํ ๋ชจ๋์ ์ค์นํ ์ ์์ต๋๋ค.
npm install
'๐งฉFront-End' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] ES6 ๋ฌธ๋ฒ 8๊ฐ์ง ์์ ๋ก ์ดํด๋ณด๊ธฐ (1) | 2024.09.06 |
---|---|
[๋ชฉ์ฐจ] ๋ฆฌ์กํธ๋ฅผ ๋ค๋ฃจ๋ ๊ธฐ์ (๊ฐ์ ํ) (2) | 2024.08.31 |
[Front-End] React, Angular, Vue.js ๊ฐ๋จ ๋น๊ต (0) | 2024.08.23 |
[JS] ์ฆ์ ์คํ ํจ์ ํํ์ (IIFE) vs jQuery ready() ๋ฉ์๋(์ถ์ฝํ) (0) | 2024.08.22 |