
ํ ์
ํฌ๊ธฐ๋ก ์๋ผ ๋จน๋ ๋ฆฌ์กํธ(React.js) : ๊ธฐ์ด๋ถํฐ ์ค์ ๊น์ง by ์ด์ ํ
๋ชจ๋ ๋ด์ฉ์ ์๋ฒฝํ ์ดํดํ ํ์ ์๊ณ , ์๊ฐ ํ ๋ค์ ๋ณด๋ ๊ฑธ ์ถ์ฒํ๋ค ํจ
๋๋ ๋ฆฌ์กํธ ๊ณต๋ถ 2ํ์ฐจ(?)์ด๋๊น ์ด์ฌํ ๋ณด๋ ค๊ณ ํจ
ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๊ฐ์ฅ ์์ UI ์กฐ๊ฐ
์ปดํฌ๋ํธ๋ก ์ธํด ํ๋ฉด์ ๊ตฌ์ฑ ์์, ๊ฐ๊ฐ์ ์์ญ์ ๋ชจ๋ํํด์ ๋ณด๊ด ๊ฐ๋ฅ
โก๏ธ ์ค๋ณต ์ฝ๋ ์ ๊ฑฐ(์์ฃผ ํฐ ์ฅ์ )
๋ง์ฝ, ๋ฉ์ธ ํ์ด์ง, ์ํ ์์ธ ํ์ด์ง, ์ฃผ๋ฌธ ํ์ด์ง ๋ฑ์์ ๋ชจ๋ ๊ฐ์ ํค๋ ๋ฉ๋ด๋ฅผ ๊ฐ๊ณ ์๋ค๋ฉด ๊ฐ ํ์ด์ง๊ฐ ๋ชจ๋ ํค๋ ๋ฉ๋ด ์ฝ๋๋ฅผ ๊ฐ๊ณ ์์ ๊ฒ์
์ด๋, ํค๋ ๋ฉ๋ด์ ์์ ์ด ์๊ธธ ๊ฒฝ์ฐ ํค๋ ๋ฉ๋ด๋ฅผ ๊ฐ์ง ๋ชจ๋ ํ์ด์ง์ ์ฝ๋๋ฅผ ์์ ํด์ผ ํจ
๊ทธ๋ฌ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฐ๋ฉด,
ํค๋ ๋ด์ ์์ ์ด ์๊ฒจ๋ ํด๋น ์ปดํฌ๋ํธ๋ง ์์ ํ๊ณ
๊ฐ ํ์ด์ง๋ ๊ทธ ์ปดํฌ๋ํธ๋ฅผ ๊ฐ์ ธ์ค๋ฉด ๋จ
โก๏ธ ์ ์ง๋ณด์์ ์ฉ์ด
์ฌ์ฉ์์ ํ๋(ํด๋ฆญ, ๋๋๊ทธ)์ ๋ฐ๋ผ ์น ํ์ด์ง๊ฐ ์ค์ค๋ก ๋ชจ์ต์ ๋ฐ๊ฟ ์ํธ์์ฉํ๋ ๊ฒ
๋ฆฌ์กํธ๋ ํ๋ฉด ์
๋ฐ์ดํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ฝ๋ค
์ ์ธํ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋์ํ๊ธฐ ๋๋ฌธ
๊ณผ์ ์ ์๋ตํ๊ณ ์ด๋ฃจ๊ณ ์ ํ๋ ๋ชฉ์ ๋ง ๊ฐ๊ฒฐํ ๋ช
์
์๋ฅผ ๋ค๋ฉด,
์๋น์์ ์์์ ์ฃผ๋ฌธํ ๋
"ํ ๋งํ ํ์คํ ํ๋ ์ฃผ์ธ์."
๊ทธ๋ฌ๋ ์ด๋, ํ ๋งํ ํ์คํ๋ฅผ ๋ง๋๋ ๊ณผ์ ์ ์ ํ์๊ฐ ์์
์ด์ ๋ฐ๋๋ก ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ์ด ์์
๋ชฉ์ ์ ์ด๋ฃจ๊ธฐ ์ํ ๋ชจ๋ ์ผ๋ จ์ ๊ณผ์ ์ค๋ช
์ฃผ๋ฐฉ์ผ๋ก ๊ฐ์ ๋ฉด 100g์ ๊บผ๋ด์ธ์. ๊ทธ๋ฆฌ๊ณ ๋ฌผ์ 9๋ถ๊ฐ ์ถ์ผ์ธ์.
ํ๋ผ์ดํฌ์ ๊บผ๋ด ๋ถ์ ์ฌ๋ฆฌ๊ณ ํ ๋งํ ์์ค์ ํจ๊ป ๋ณถ์ผ์ธ์. ๋งํ
๊น๋ ํ์์
๋๋ค.
(์ง์ ์๋์ธ๊ฐ?)
๊ทผ๋ฐ ์๋ ํ๋ก๊ทธ๋๋ฐ์ ์ด๋ฐ ์์
๋ฆฌ์กํธ๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์๋ฐ์คํฌ๋ฆฝํธ๋ง์ผ๋ก ์
๋ฐ์ดํธ๋ฅผ ๊ตฌํํ๋ฉด
ํน๋ณํ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ง ์์ ๋
๋๋ถ๋ถ ๋ช
๋ นํ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ๋ชจ๋ ๊ธฐ๋ฅ์ ๊ตฌํํด์ผ ํจ
๋ฆฌ์กํธ๋ก ๋ง๋ ๊ฐ๊ฐ์ ์ปดํฌ๋ํธ๋ state๋ผ๋,
์ปดํฌ๋ํธ์ ์ํ๋ฅผ ์ ์ฅํ๋ ํน์ํ ๋ณ์๊ฐ ์์
์ด state ๊ฐ์ด ๋ฐ๋๋ฉด,
์ปดํฌ๋ํธ๊ฐ ๋ฐ๋ state ๊ฐ์ ๋ฐ๋ผ์
๊ฐ๊ฐ ๋ค๋ฅธ UI๋ฅผ ํ๋ฉด์ ๋ ๋๋งํ๋๋ก ์ค์ ๊ฐ๋ฅ
C์ปดํฌ๋ํธ๋ state ๋ณ์์ ๊ฐ์ ๋ฐ๋ผ์
๊ฐ์ด 1์ผ ๋๋ 1๋ฒ UI๋ฅผ ๋ ๋๋ง,
๊ฐ์ด 2์ผ ๋๋ 2๋ฒ UI๋ฅผ ๋ ๋๋งํ๋๋ก ํจ
์ฆ, ํ๋ฉด ์
๋ฐ์ดํธ๊ฐ ํ์ํ ๋, ์ปดํฌ๋ํธ๊ฐ ๊ฐ์ง state ๋ณ์๋ง ๋ฐ๊พธ๋ฉด
UI๋ฅผ ๋ ๋๋งํ๊ธฐ ํธํจ
์
๋ฐ์ดํธ๋ฅผ ์ํ ๋ณต์กํ ๋์์ ์ง์ ์ ์ํ ํ์ ์์ด
ํน์ ๋ณ์์ ๊ฐ์ ๋ฐ๊พธ๋ ๊ฒ๋ง์ผ๋ก๋ ํ๋ฉด ์
๋ฐ์ดํธ ๊ฐ๋ฅ
ํ๋ฉด ์ ๋ฐ์ดํธ๋ฅผ ์ฝ๊ฒ ๊ตฌํํ ๋ฟ๋ง ์๋๋ผ ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ๋ ๊ฐ๋ฅ
์
๋ฐ์ดํธ๋, ๊ฒฐ๊ตญ ๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋งํ๋ ํ์
๋ฒํผ์ ํด๋ฆญํ์ ๋ ๋ฒํผ์ ์์์ ํ๋์์์ ๋นจ๊ฐ์์ผ๋ก ๋ฐ๊พธ๋ ค๋ฉด,
๋ธ๋ผ์ฐ์ ๊ฐ ํ์ด์ง๋ฅผ ๋ค์ ๋ ๋๋ง
๊ทธ๋ฌ๋๊น ๋ฆฌ์กํธ๊ฐ ์ด๋ป๊ฒ ๋น ๋ฅด๊ฒ ์
๋ฐ์ดํธํด์ผํ๋์ง ์๋ ค๋ฉด,
๋ธ๋ผ์ฐ์ ์ ๋ ๋๋ง ๊ณผ์ ์ ๋จผ์ ์ดํดํด์ผ ํจ
๋ธ๋ผ์ฐ์ ๋ ์ด๋ป๊ฒ ๋์ํ๋๊ฐ?
Critical Rendering Path
: ๋ฐ๋์ ๊ผญ ๊ฑฐ์ณ์ผ๋ง ํ๋ ์ค์ํ ๊ฒฝ๋ก
HTML ์ฝ๋๋ฅผ ํด์ํด ๋์ผ๋ก ๋ณํ
CSS์ฝ๋๋ ํด์ํด์ CSSOM(CSS Object Model, ์คํ์ผ ๊ท์น)์ผ๋ก ๋ณํ
ํ์ด์ง์ ์ด๋ค ์์๊ฐ ์๊ณ , ์ด๋์ ์๋์ง๋ฅผ ์๋ DOM๊ณผ DOM ๊ฐ๊ฐ์ ์์์ ์คํ์ผ์ ์ ์ํ๋ ์คํ์ผ ๊ท์น์ ํฉ์ณ ๋ ๋ ํธ๋ฆฌ(Render Tree)๋ฅผ ๋ง๋ฆ = ์น ํ์ด์ง์ ์ฒญ์ฌ์ง/์ค๊ณ๋
(๋ = ์์๋ค์ ์์น, ๋ฐฐ์น, ๋ชจ์์ ๋ํ ์ ๋ณด)
๋ ๋ ํธ๋ฆฌ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์์์ ์์น๋ฅผ ํฝ์
๋จ์๋ก ๊ณ์ฐ
= ์์์ ๋ฐฐ์น๋ฅผ ์ก๋ ์์
๋ ๋๋ง ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ ์ฐ์ฐ์ ์๊ตฌ
๋ ์ด์์ ์์
์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ์ผ๋ก ์์๋ฅผ ์ค์ ๋ก ํ์ด์ง์ ๊ทธ๋ฆผ
ํ์ธํ
์ญ์ ๋ ๋๋ง ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ ์ฐ์ฐ์ ์๊ตฌ
๋ธ๋ผ์ฐ์ ๋ ์ ๋ฐ์ดํธ๋ฅผ ์ํด ๋ ๋๋ง ๊ณผ์ ์ ๋ค์ ๋ฐ๋ณต
์๋ฐ์คํฌ๋ฆฝํธ๊ฐ ๋์ 3,000๋ฒ ์์ ํ๋ฉด,
๋ ๋๋ง ๊ณผ์ ์ด 3,000๋ฒ ์ผ์ด๋จ
์์์ ์ธ๊ธํ๋ฏ, ๋ ์ด์์(Reflow)๊ณผ ํ์ธํ
(Repaint) ๊ณผ์ ์ ๋ง์ ์ฐ์ฐ์ ๋๋ฐ
โก๏ธ ๋์ ์
๋ฐ์ดํธ๊ฐ ํ์ ์ด์์ผ๋ก ๋ง์์ง๋ฉด ๋ธ๋ผ์ฐ์ ์ฑ๋ฅ ์ ํ
๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ์ด ๋จ์ด์ง๋ฉด ์๋ต์ด ๋๋ ค์ง๊ฑฐ๋, ์๋ต ๋ถ๋ฅ ์ํ์ ๋น ์ง
[๋ฆฌ์คํธ ์ถ๊ฐํ๊ธฐ] ๋ฒํผ์ ํด๋ฆญํ๋ฉด, 3000๊ฐ์ ๋ชฉ๋ก์ ์ถ๊ฐํ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋
๋ฒํผ์ ํด๋ฆญํ๋ฉด, onClick ํจ์ ์คํ
$ul์ ul์์ด๋๋ฅผ ๊ฐ์ ธ์จ ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ ์ ์ฅ,
๊ทธ ํ๊ทธ์ innerHTML ๊ฐ์ ๋ณตํฉ ๋์
์ฐ์ฐ์๋ก, liํ๊ทธ๋ฅผ ํ๋์ฉ ๋ ์ถ๊ฐ
๊ทธ๋ฐ๋ฐ innerHTML์ ๊ฐ์ ์์ ํ๋ค๋ ๊ฑด,
๋์ ์์ ํ๋ ๊ฒ๊ณผ ๊ฐ์
โก๏ธ 3,000๋ฒ ๋ ์์
๋งํ๋ฏ์ด
์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋์ ์ง์ ์์ ํด์ ์
๋ฐ์ดํธ๋ฅผ ๊ตฌํํ ๋๋ ๋ ์์ ํ์๋ฅผ ์ต์ํํ๋ ๊ฒ ์ข์
์์ ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ฝ๋ ๊ฐ์
ul ํ๊ทธ๋ฅผ ๊ฐ์ ธ์ $ul์ ์ ์ฅํ๋ ๊ฑด ๋์ผ
๊ทธ๋ฌ๋ ๊ทธ ๋ค์ list ๋ณ์์ li ํ๊ทธ๋ฅผ 3000๊ฐ ์ถ๊ฐ
โก๏ธ ๋ฐ๋ณต๋ฌธ ๋ด์์๋ innerHTML์ ๋ฐ๋ก ์์ ํ์ง ์์(DOM์ ์์ ํ์ง ์์)
๋ฐ๋ณต๋ฌธ์ด ์ข
๋ฃ๋๊ณ ๋งจ ๋ง์ง๋ง์ ํ ๋ฒ๋ง DOM ์์ ํด์ list ์ถ๊ฐ
๊ทธ๋ฌ๋ ์ด๋ฌํ ์ฝ๋ ๊ฐ์ ์ด ์ฌ์ด ๊ฑด ์๋
๋จ์ํ๊ณ ๊ฐ๋จํ ์น ์๋น์ค๋ผ๋ฉด ๊ทธ๋ด ์ ์์ง๋ง
๋๊ท๋ชจ ์๋น์ค์์๋ ๋ค๋ค์ผ ํ๋ ์
๋ฐ์ดํธ๋ ๋์์ ๋ฐ์ํ๋ ์
๋ฐ์ดํธ๋ ๋ง์
๋ฆฌ์กํธ๋ ์ด๋ฌํ ์ ๋ฐ์ดํธ๋ฅผ ์๋์ผ๋ก ์งํํด์ค
์ด๋ป๊ฒ?
๋ฒ์ถ์ผ ๋(Virtual DOM)์ ์ด์ฉ
๊ฐ์์ ๋, ์ค์ ๋์ ์ฌ๋ณธ
๋ฆฌ์กํธ์์๋ ํ์ด์ง์์ ๋ณ๊ฒฝ ์ฌํญ์ด ๋ฐ์ํ๋ฉด ๋จผ์ ๋ฒ์ถ์ผ ๋์ ์
๋ฐ์ดํธ
โก๏ธ ๋ฒ์ถ์ผ ๋์, ์ผ์ข
์ ๋ฒํผ์ฒ๋ผ ๋ณ๊ฒฝ์ฌํญ์ ๋ชจ์๋ค๊ฐ ํ ๋ฒ์ ์ค์ ๋ ์
๋ฐ์ดํธ
๋ง์ฝ ์ ๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ค๋ฉด,
๋ฒ์ถ์ผ ๋์ 3๋ฒ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ ์
๋ฐ์ดํธ
๊ทธ๋ฆฌ๊ณ ์ด ๋์ ์ค์ ๋์ ์๋ฌด๋ฐ ๋ณํ๊ฐ ์์
๋ณ๊ฒฝ ์์ ์ด ๋ชจ๋ ์ข ๋ฃ๋๋ฉด, ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ์๋ค๊ฐ ํ ๋ฒ์ ์ค์ ๋ ์ ๋ฐ์ดํธ
๊ฒฐ๊ณผ์ ์ผ๋ก ๋ฆฌ์กํธ์์๋ ์ฌ๋ฌ ๋ฒ์ ์ ๋ฐ์ดํธ๋ฅผ ๋ชจ์ ํ ๋ฒ์ ์ํํ๋ฏ๋ก ์ ๋ฐ์ดํธ๊ฐ ์ฆ์๋, ๋ธ๋ผ์ฐ์ ์ ์ฑ๋ฅ์ด ์ ํ๋์ง ์์
npm create vite@latest
npm ๋ ์ง์คํธ๋ฆฌ์์ create-vite ํจํค์ง๋ฅผ ๊ฐ์ ธ์ ์คํ
create-vite : Vite ํ๋ก์ ํธ๋ฅผ ๋น ๋ฅด๊ฒ ์์ฑํ๋ ๋๊ตฌ
@latest : ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ฌ์ฉ
React, JavaScript ์ ํํ์ฌ ํ๋ก์ ํธ ์์ฑ
๊ธฐ๋ณธ ์ค์ ์ด ์๋ฃ๋ ๋ฆฌ์กํธ ์ฑ ์์ฑ
Node.js ํจํค์ง๋ฅผ ๊ตฌ์ฑํ๋ ํต์ฌ ํ์ผ
{
"name": "section06",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "vite build",
"lint": "eslint .",
"preview": "vite preview"
},
"dependencies": {
"react": "^19.1.1",
"react-dom": "^19.1.1"
},
"devDependencies": {
"@eslint/js": "^9.36.0",
"@types/react": "^19.1.16",
"@types/react-dom": "^19.1.9",
"@vitejs/plugin-react": "^5.0.4",
"eslint": "^9.36.0",
"eslint-plugin-react-hooks": "^5.2.0",
"eslint-plugin-react-refresh": "^0.4.22",
"globals": "^16.4.0",
"vite": "^7.1.7"
}
}
"type": "module"
: Node ํ๊ฒฝ์์ ES Modules ๋ฐฉ์์ ์ฌ์ฉ
"scripts":~ : scripts ํญ๋ชฉ๋ ๋ฏธ๋ฆฌ ์ค์
"dependencies":~
: ํ๋ก๋์
(์ค์ ์๋น์ค ํ๊ฒฝ)์์๋ ํ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ชฉ๋ก
"devDependencies":~
: ๊ฐ๋ฐํ ๋๋ ์ฌ์ฉ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
๊ฐ๋ฐ ์ ์ฌ์ฉํ ๋ฌธ๋ฒ ์ฒดํฌ ๋๊ตฌ๋ ํ์ฉํ ํ
์คํธ ๋๊ตฌ
๋ฆฌ์กํธ ์ฑ์ ๋ฐฐํฌํ ๋ ๊ฐ๋ฐ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ฏธํฌํจ
ํ์ฌ node_modules ํด๋๋, package-lock.json ํ์ผ์ ์์ ์๋๋ฐ
์ด๋ ํฐ๋ฏธ๋ ์์
npm i
๋ฅผ ์ ๋ ฅํ๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ค์นํ ์ ์์
โก๏ธ ์ด๋ฏธ์ง๋ ํฐํธ ๋ฑ์ ์ด ํด๋์ ์ถ๊ฐ
๋จ, ๋ธ๋๋ ๋ก๊ณ ์ฒ๋ผ ์ด๋ฆ์ด ์ ๋ ๋ฐ๋๋ฉด ์ ๋๋ ํ์ผ
์ธ๋ถ์์ ์ง์ ์ ๊ทผํด์ผ ํ๋ ์ ์ ํ์ผ
โก๏ธ ์ค์ ์์ฑํ ๋ฆฌ์กํธ๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ ์ด ํด๋์ ์ถ๊ฐ
eslint๋ผ๋ ๋๊ตฌ์ ์ค์ ํ์ผ
์ฝ๋ ์คํ์ผ์ ํต์ผํ๋ ๋ฐ์ ๋์์ ์ฃผ๋ ๋๊ตฌ
๋ฆฌ์กํธ ์ฑ์ ๊นํ๋ธ์ ์ฌ๋ฆด ๋, ์ ์ธํ ํ์ผ ๋ช ์
package.json์ scripts ํญ๋ชฉ ์์ ๋ฆฌ์กํธ ์ฑ์ ์คํ์ํฌ ์ ์๋ 4๊ฐ์ง์ ๋ช ๋ น์ด๊ฐ ๋ฏธ๋ฆฌ ์ค์
| ๋ช ๋ น์ด | ํ๋ ์ผ | ์ธ์ ์ฌ์ฉ? |
|---|---|---|
| npm run dev | ๊ฐ๋ฐ ์๋ฒ ์คํ | ๊ฐ๋ฐํ ๋ |
| npm run build | ๋ฐฐํฌ์ฉ ํ์ผ ์์ฑ | ์๋น์ค ์ถ์ ์ค๋นํ ๋ |
| npm run preview | ๋น๋ ๊ฒฐ๊ณผ๋ฌผ ๋ฏธ๋ฆฌ๋ณด๊ธฐ | ๋ฐฐํฌ ์ ์ ์ต์ข ์ ๊ฒ |
| npm run lint | ์ฝ๋ ์คํ์ผ ๋ฐ ์ค๋ฅ ๊ฒ์ฌ | ์ฝ๋ ํ์ง ์ฒดํฌํ ๋ |
npm run dev
๋ก์ปฌ ํ๊ฒฝ์์ ๋ฆฌ์กํธ ์ฑ ์๋
index.html ํ์ผ์ ์ดํด๋ณด๋ฉด
<body> ํ๊ทธ๊ฐ ํ
ํ
๋น์ด์์
๊ทธ๋ผ ๋ธ๋ผ์ฐ์ ์์ ๋ํ๋ ์ ์ด๋ฏธ์ง์ ํ ์คํฐ์ ์นด์ดํฐ๋ ๋ญ๊น?
์์๋ ๋ชจ๋ <script> ํ๊ทธ๋ก ๋ถ๋ฌ์ค๊ณ ,
src/main.jsx๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ด ์คํ๋์์ ๋
์ข
์ ์ผ๋ก ์ถ๊ฐ๋๋ ์์
๋ฐ๋ผ์ index.html์ ์๋ฌด๊ฒ๋ ์์ด๋
main.jsx๊ฐ ํ๋ฉด์ ์์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์
๋ฆฌ์กํธ๊ฐ ์ ๊ณตํ๋ ๋ด๋ถ ๋ฉ์๋๋ฅผ ์ฌ์ฉ
ReactDOM์ createRoot๋ผ๋ ๋ฉ์๋๋
์ธ์๋ก ์ ๋ฌ๋ฐ์ html์์๋ฅผ
๋ฆฌ์กํธ์ ๋ฃจํธ, ์ฆ ๋ฟ๋ฆฌ๋ก ๋ง๋ค์ด์ฃผ๋ ์ญํ
document.getElementById(root)
์ธ์๋ก ์ ๋ฌํ๊ณ ์๋ ์์
โก๏ธ index.html ํ์ผ ์์ ์๋ root๋ฅผ id๋ก ๊ฐ๋ ์์๋ฅผ ๋ถ๋ฌ์ค๋ ์ค
๋ฐ๋ผ์ ์ ์์๊ฐ main.jsx์ ์ธ์๋ก ์ ๋ฌ๋๋ ์ค
โก๏ธ ๋ฆฌ์กํธ๋ ์ด ์์๋ฅผ ๋ฆฌ์กํธ์ ๋ฃจํธ๋ก ๋ณํ์ค
๊ทธ ๋ค์ render๋ผ๋ ๋ฉ์๋๋ฅผ ํธ์ถํด์ ๋ฃจํธ ์๋์ ๋ฌด์ธ๊ฐ ๋ ๋๋งํ ๊ฒ
<React.StrictMode> ๋ ์ ์ ๋ฌด์
<App />
App ์ปดํฌ๋ํธ ๋ ๋๋ง
โก๏ธ ์ฆ, App ์ปดํฌ๋ํธ ๋ ๋๋ง
์ด App ์ปดํฌ๋ํธ๋ ์ด๋์ ๊ฐ์ ธ์ค๋?
๋งจ ์์์ import ์ค
App.jsx๋ฅผ ์ดํด๋ณด๋ฉด
html ํ๊ทธ๋ฅผ ๋ฆฌํด ์ค
๋ฆฌ์กํธ์์๋ ํจ์๊ฐ html ํ๊ทธ๋ฅผ ๋ฆฌํดํ๊ณ ์์ผ๋ฉด, ์ด ํจ์๋ฅผ ์ปดํฌ๋ํธ๋ผ๊ณ ํจ
App.jsx๋ฅผ ๋ณด๋ฉด, App ์ปดํฌ๋ํธ๊ฐ ๋ฆฌํดํ๊ณ ์๋ html ์์๋ฅผ ๋ณด๋ฉด ์ด๋ฏธ์ง๋ ๋ฆฌํดํ๊ณ , h1 ํ๊ทธ๋ฅผ ํตํด ํ ์คํธ๋ ๋ ๋๋งํ๊ณ , ๋ฒํผ๋ ๋ ๋๋งํ๊ณ ์์
๋ฐ๋ผ์ App ์ปดํฌ๋ํธ๊ฐ ๋ฆฌํดํ๊ณ ์๋ ์ด html ํ๊ทธ๊ฐ main.jsx๋ก ๋ถ๋ฌ์์ ธ์ render ๋ฉ์๋๋ฅผ ํตํด ๋ ๋๋ง๋๊ณ ์์
main.jsx ํ์ผ์ index.html์์ <script> ํ๊ทธ๋ก ๋ถ๋ฌ์ ์คํ
๊ทธ๋์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ๋ณด๋ฉด,
App.jsx์์ ํจ์๋ก ๋ง๋ ์ปดํฌ๋ํธ์ ์์๋ค์ด ์ ๋ ๋๋ง๋๊ณ ์์
๋ค์ ๋งํด, ํด๋น ๋ฆฌํด๋๋ ์์๋ค์ ์ญ์ ํ๋ฉด ์๋ฌด๊ฒ๋ ๋ ๋๋ง๋์ง ์์ ๊ฒ
๋ฆฌ์กํธ ์ฑ์ index.html์์ main.jsx๋ผ๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ์คํํ๋๋ฐ,
์ด ํ์ผ์์๋ App.jsxํ์ผ์ ์ ์ฅ๋์ด ์๋ App ํจ์๊ฐ ๋ฆฌํดํ๋ html ์์๋ฅผ ํ๋ฉด์ ๋ ๋๋ง ์ค