๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
IT/React

[ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ] - React.js ๊ฐœ๋ก 

by YeonBu 2024. 11. 15.
728x90

 



๊ฐ•์˜ - Section 4 : React.js ๊ฐœ๋ก 

์œ ๋ฐ๋ฏธ : https://www.udemy.com/course/winterlood-react-basic/

์ธํ”„๋Ÿฐ : 

 

[2024] ํ•œ์ž… ํฌ๊ธฐ๋กœ ์ž˜๋ผ ๋จน๋Š” ๋ฆฌ์•กํŠธ(React.js) : ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์‹ค์ „๊นŒ์ง€ ๊ฐ•์˜ | ์ด์ •ํ™˜ Winterlood - ์ธํ”„๋Ÿฐ

์ด์ •ํ™˜ Winterlood | ๊ฐœ๋…๋ถ€ํ„ฐ ๋…ํŠนํ•œ ํ”„๋กœ์ ํŠธ๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ค๋ค„๋ณด๋ฉฐ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์™€ ๋ฆฌ์•กํŠธ๋ฅผ ์ด ๊ฐ•์˜๋กœ ํ•œ ๋ฒˆ์— ๋๋‚ด์š”. ํ•™์Šต์€ ์งง๊ฒŒ, ์‘์šฉ์€ ๊ธธ๊ฒŒ 17์‹œ๊ฐ„ ๋ถ„๋Ÿ‰์˜ All-in-one ๊ฐ•์˜!, ๋ฆฌ์•กํŠธ, ํ•œ ๊ฐ•์˜๋กœ

www.inflearn.com


 

React.js ๊ฐœ๋ก 

1. React.js ์†Œ๊ฐœ

 

* React์˜ ํŠน์ง•

1. ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ UI๋ฅผ ํ‘œํ˜„ํ•œ๋‹ค

 : ๋ฆฌ์•กํŠธ๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ์•„ํ‚คํ…์ณ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ž‘์€(๋˜๋Š” ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ) ์ปดํฌ๋„ŒํŠธ๋“ค๋กœ ๋‚˜๋ˆ„์–ด์„œ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ฐ ์ปดํฌ๋„ŒํŠธ๋Š” ๋…๋ฆฝ์ ์ด๋ฉฐ, ์ž์‹ ๋งŒ์˜ ์ƒํƒœ์™€ ๋กœ์ง์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

2. ํ™”๋ฉด ์—…๋ฐ์ดํŠธ ๊ตฌํ˜„์ด ์‰ฝ๋‹ค

 : ๋ฆฌ์•กํŠธ๋Š” ์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” UI๊ฐ€ ํŠน์ • ์ƒํƒœ์—์„œ ์–ด๋–ป๊ฒŒ ๋ณด์—ฌ์•ผ ํ•˜๋Š”์ง€๋งŒ ์„ ์–ธํ•˜๋ฉด, React๊ฐ€ ์ƒํƒœ ๋ณ€ํ™”์— ๋”ฐ๋ผ UI๋ฅผ ์ž๋™์œผ๋กœ ์—…๋ฐ์ดํŠธ ํ•ด์ค€๋‹ค.

(์„ ์–ธํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๊ณผ์ •์€ ์ƒ๋žตํ•˜๊ณ  ๋ชฉ์ ๋งŒ ๊ฐ„๊ฒฐํžˆ ๋ช…์‹œํ•˜๋Š” ๋ฐฉ๋ฒ• ↔ ๋ช…๋ นํ˜• ํ”„๋กœ๊ทธ๋ž˜๋ฐ : ๋ชฉ์ ์„ ์ด๋ฃจ๊ธฐ ์œ„ํ•œ ๋ชจ๋“  ๊ณผ์ •์„ ์„ค๋ช… )

3. ํ™”๋ฉด ์—…๋ฐ์ดํŠธ๊ฐ€ ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌ๋œ๋‹ค

 : ๋ฆฌ์•กํŠธ๋Š” ๊ฐ€์ƒ DOM(Virtual DOM) ๊ธฐ์ˆ ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น ๋ฅธ ํ™”๋ฉด ์—…๋ฐ์ดํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. ์‹ค์ œ DOM ์กฐ์ž‘์€ ์„ฑ๋Šฅ์ ์œผ๋กœ ๋น„์šฉ์ด ๋งŽ์ด ๋“œ๋Š” ์ง์—…์ด์ง€๋งŒ, React๋Š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ€์ƒ DOM์— ๋จผ์ € ๋ฐ˜์˜ํ•˜๊ณ , ๊ทธ ์ฐจ์ด์ ์„ ์‹ค์ œ DOM์— ์ตœ์†Œํ•œ์˜ ๋ณ€๊ฒฝ์œผ๋กœ ๋ฐ˜์˜ํ•œ๋‹ค.

 

 

 

 

 

 

React.js ๊ฐœ๋ก 

2. React App ์ƒ์„ฑํ•˜๊ธฐ

 

* Vite๋กœ ๋ฆฌ์•กํŠธ ์•ฑ ์ƒ์„ฑ

(Vite? ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ ์ตœ์‹  ๋นŒ๋“œ ๋„๊ตฌ, ๊ฐœ๋ฐœ ํˆด. ๊ธฐ๋ณธ ์„ค์ •์ด ์ ์šฉ๋œ React App ์ƒ์„ฑ ๊ฐ€๋Šฅ)

 

1. ํด๋” ํ™•์ธ ํ›„ ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜ ์ฝ”๋“œ ์‹คํ–‰

npm create vite@latest

 

2. create-vite ์ƒ์„ฑ ํ™•์ธ : y ์ž…๋ ฅ

 

3. ํ”„๋กœ์ ํŠธ ์ด๋ฆ„ ์„ค์ • 

 

4. ํ”„๋ ˆ์ž„์›Œํฌ ์„ ํƒ : React → JavaScript

 

5. ์ƒ์„ฑ์™„๋ฃŒ

 

ํ™•์ธํ•ด๋ณด๋ฉด node_modules์™€ package-lock.json์ด ์„ค์น˜๊ฐ€ ์•ˆ๋œ ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

์•ž ์‹œ๊ฐ„์— ๋ฐฐ์› ๋˜ ๊ฒƒ์ฒ˜๋Ÿผ ํ„ฐ๋ฏธ๋„์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ž…๋ ฅํ•ด์ค€๋‹ค.

npm i

 

6. ์ธ์Šคํ†จ ์™„๋ฃŒ

 

 

* ์ƒ์„ฑ๋œ ํด๋”, ํŒŒ์ผ ์„ค๋ช…

1. public : ์ •์  ํŒŒ์ผ์„ ์ €์žฅํ•˜๋Š” ํด๋”. ์—ฌ๊ธฐ์— ์žˆ๋Š” ํŒŒ์ผ์„ ๋ณ„๋„์˜ ์ฒ˜๋ฆฌ ์—†์ด ๊ทธ๋Œ€๋กœ ๋นŒ๋“œ ๊ฒฐ๊ณผ์— ํฌํ•จ๋œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ์ด๋ฏธ์ง€๋‚˜ pavicon๋“ฑ์ด ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ๋‹ค

2. src : ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์†Œ์Šค ์ฝ”๋“œ๊ฐ€ ํฌํ•จ๋œ ํด๋”. React ์•ฑ์˜ ์ปดํฌ๋„ŒํŠธ, ์Šคํƒ€์ผ, ๋กœ์ง ๋“ฑ์„ ์ž‘์„ฑํ•˜๋Š” ๋ฉ”์ธ ํด๋”

(์—ฌ๊ธฐ ์•ˆ์—๋„ svgํŒŒ์ผ์ด ์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์— ๋“ค์–ด๊ฐ„ ์ด๋ฏธ์ง€๋Š” ์†Œ์Šค์ฝ”๋“œ ๋‚ด์—์„œ import๋กœ ๋ถˆ๋Ÿฌ์™€ ๋ชจ๋“ˆ์ฒ˜๋Ÿผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์œผ๋ฉฐ public์— ๋“ค์–ด๊ฐ€์žˆ๋Š” ์ด๋ฏธ์ง€๋Š” URL์„ ํ†ตํ•ด ์ ‘๊ทผํ•˜๋ฉฐ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ง์ ‘ ๋กœ๋“œํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ฐจ์ด์ ์ด ์žˆ๋‹ค)

3. eslint.config : ESLint์˜ ์„ค์ • ํŒŒ์ผ๋กœ, ์ฝ”๋“œ ํ’ˆ์งˆ๊ณผ ์Šคํƒ€์ผ์„ ๊ฒ€์‚ฌํ•˜๊ธฐ ์œ„ํ•œ ๊ทœ์น™๋“ค์„ ์ •์˜ํ•˜๋Š” ํŒŒ์ผ

4. gitignore : Git์— ํฌํ•จ๋˜์ง€ ์•Š์•„์•ผ ํ•  ํŒŒ์ผ์ด๋‚˜ ํด๋”๋ฅผ ๋ช…์‹œํ•˜๋Š” ํŒŒ์ผ

5. index.html : ๋ฆฌ์•กํŠธ ์•ฑ์˜ ๊ธฐ๋ณธ ํ‹€ ์—ญํ• ์„ ํ•˜๋Š” HTML ํŒŒ์ผ. main.js ํŒŒ์ผ์ด ์ด๊ณณ์— ์‚ฝ์ž…๋˜์–ด React๊ฐ€ ๋žœ๋”๋ง ๋œ๋‹ค

6. vite.config : Vite์˜ ์„ค์ • ํŒŒ์ผ

 

 

* React App ์‹คํ–‰(๊ฐœ๋ฐœ ๋ชจ๋“œ๋กœ ์‹คํ–‰)

npm run dev

 

 

* ๊ทธ ์™ธ Vite ๋ช…๋ น์–ด

r + enter : ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ Vite ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ ํ•จ
u + enter : ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ Vite ์„œ๋ฒ„์˜ URL์„ ์ฝ˜์†”์— ํ‘œ์‹œํ•จ
o + enter : ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ Vite ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์—ด์–ด์คŒ
c + enter : ์ฝ˜์†” ์ฐฝ ํด๋ฆฌ์–ด
q + enter : ํ˜„์žฌ ์‹คํ–‰์ค‘์ธ Vite ์„œ๋ฒ„ ์ข…๋ฃŒ

 

 

 

 

 

 


React.js ๊ฐœ๋ก 


3. React App ๊ตฌ๋™์›๋ฆฌ ์‚ดํŽด๋ณด๊ธฐ

 

 


* React App ์‹คํ–‰ํ•˜๋ฉด ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜จ๋‹ค. ๊ตฌ๋™์›๋ฆฌ๋ฅผ ์‚ดํŽด๋ณด์ž

1. HTML ๋กœ๋“œ (index.html)

<!doctype html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <link rel="icon" type="image/svg+xml" href="/vite.svg" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vite + React</title>
  </head>
  <body>
    <div id="root"></div>
    <script type="module" src="/src/main.jsx"></script>
  </body>
</html>

 

๋ธŒ๋ผ์šฐ์ €๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ index.html ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค. ์ด index.html ํŒŒ์ผ์€ ๋ฆฌ์•กํŠธ ์•ฑ์˜ ๋ผˆ๋Œ€๋ฅผ ์ œ๊ณตํ•œ๋‹ค.

<body>์•ˆ์—๋Š” <div id = "root"></div>๋ผ๋Š” ๋‹จ์ˆœํ•œ ํƒœ๊ทธ๊ฐ€ ์žˆ๋Š”๋ฐ ์ด ํƒœ๊ทธ๋Š” ๋ฆฌ์•กํŠธ๊ฐ€ UI๋ฅผ ๊ทธ๋ฆด ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด ์ค€๋‹ค.

์ด์™ธ์— <script>ํƒœ๊ทธ๋Š” ๋ฆฌ์•กํŠธ๊ฐ€ ๋™์ž‘ํ•  JS ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜จ๋‹ค.

 

 

2. JavaScript ๋ชจ๋“ˆ ๋กœ๋“œ (main.jsx)

import { StrictMode } from 'react'
import { createRoot } from 'react-dom/client'
import './index.css'
import App from './App.jsx'

createRoot(document.getElementById('root')).render(
  <StrictMode>
    <App />
  </StrictMode>,
)

 

index.html์•ˆ <script> ํƒœ๊ทธ๋กœ ๋ถˆ๋Ÿฌ์˜จ ๋ถˆ๋Ÿฌ์˜จ main.jsx ํŒŒ์ผ์ด ๋ฆฌ์•กํŠธ ์•ฑ์˜ ์‹œ์ž‘์ ์ด๋‹ค.

์—ฌ๊ธฐ์„œ createRoot๋ผ๋Š” ํ•จ์ˆ˜๊ฐ€ id๊ฐ€ root๋ผ๋Š” ์š”์†Œ๋ฅผ ์ฐพ์•„์„œ App ์ปดํฌ๋„ŒํŠธ๋ฅผ ๋ Œ๋”๋งํ•œ๋‹ค.

* <StrictMode> ๋Š” ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•ด์„œ ๊ฐœ๋ฐœ ์ค‘ ๋ฌธ์ œ๋ฅผ ๋ฏธ๋ฆฌ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐœ๋ฐœ ๋„๊ตฌ์ด๋‹ค.

 

 

๊ฒฐ๊ณผ์ ์œผ๋กœ! ๋™์ ์ธ ํ™”๋ฉด ์ƒ์„ฑ

๋ฆฌ์•กํŠธ๊ฐ€ JS๋กœ ํ•„์š”ํ•œ HTML์„ ๋งŒ๋“ค์–ด์„œ ๋„ฃ์–ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ๋™์ ์ธ ์›นํŽ˜์ด์ง€๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•