์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- ํ์ด์ฌ
- ์๋ฐ์ด๋ณด
- ์น๋์๋ณด๋ ๊ธฐ์ด
- ํ์ด์ฌ๊ณต๋ถ
- Android
- ์๋ฐ๊ธฐ์ด
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ์น๋์๋ณด๋ ์ ์
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ
- Pandas
- MySQL
- serverless
- ์๋๋ก์ด๋ ์คํ๋์ค
- ์คํธ๋ฆผ๋ฆฟ
- Streamlit๊ธฐ์ด
- ํ๋ค์ค๊ณต๋ถ
- Flutter
- java
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- streamlit
- ์๋ฐ๊ณต๋ถ
- ํ๋ค์ค
- REACT
- ์๋ฐ
- db
- RESTful API
- JavaScript
- Today
- Total
ruriruriya
[React] ๋ฆฌ์กํธ - DOM(Document Object Model) ๊ฐ๋ ๋ณธ๋ฌธ
[React] ๋ฆฌ์กํธ - DOM(Document Object Model) ๊ฐ๋
๋ฃจ๋ฆฌ์ผใ 2025. 3. 10. 19:04React๋ฅผ ์ฌ์ฉํ๋ค ๋ณด๋ฉด DOM(Document Object Model)์ด๋ผ๋ ๊ฐ๋
์ด ์์ฃผ ๋ฑ์ฅํ๋ค.
React๋ ์ผ๋ฐ DOM๊ณผ ๋ค๋ฅด๊ฒ ๊ฐ์ DOM(Virtual DOM)์ ์ฌ์ฉํ๋ค.
๊ทธ๋ ๋ค๋ฉด ์ผ๋ฐ DOM๊ณผ ๊ฐ์ DOM์ ์ฐจ์ด์ , ๊ทธ๋ฆฌ๊ณ React์์ DOM์ด ์ด๋ป๊ฒ ๋์ํ๋์ง ์ ๋ฆฌํด๋ณด์.
1๏ธโฃ DOM์ด๋?
โ DOM (๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ, Document Object Model)
- HTML ๋ฌธ์๋ฅผ ๋ธ๋ผ์ฐ์ ๊ฐ ์ดํดํ ์ ์๋๋ก ๊ฐ์ฒด ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณํํ ๊ฒ์ด๋ค.
- ์ฆ, ์นํ์ด์ง์ ๊ตฌ์กฐ๋ฅผ ๋ํ๋ด๋ ํ๋ก๊ทธ๋๋ฐ ์ธํฐํ์ด์ค๋ผ๊ณ ํ ์ ์๋ค.
๐ DOM์ ์์
HTML์ด ๋ค์๊ณผ ๊ฐ๋ค๊ณ ๊ฐ์ ํ์.
<div id="app">
<h1>์๋
, React!</h1>
<button>ํด๋ฆญ</button>
</div>
โก๏ธ ๋ธ๋ผ์ฐ์ ๋ ์ด HTML์ DOM ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณํํ๋ค.
Document
โโโ <html>
โโโ <body>
โโโ <div id="app">
โโโ <h1>์๋
, React!</h1>
โโโ <button>ํด๋ฆญ</button>
JavaScript๋ฅผ ์ฌ์ฉํ๋ฉด DOM์ ์ง์ ์กฐ์ํ ์ ์๋ค.
document.getElementById("app").innerHTML = "<h1>์๋
, Vue!</h1>";
โ DOM์ ์ง์ ๋ณ๊ฒฝํ๋ฉด ์ด๋ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊น?
- ์ง์ ๋ณ๊ฒฝํ๋ฉด ์นํ์ด์ง๊ฐ ๊น๋นก์ด๊ฑฐ๋, ์ฑ๋ฅ์ด ์ ํ๋ ๊ฐ๋ฅ์ฑ์ด ์๋ค.
- ํนํ, DOM ์กฐ์์ด ๋ง์์ง์๋ก ์น ์ฑ๋ฅ์ด ๋๋ ค์ง ์ ์๋ค.
๐ก DOM ์ ๋ฐ์ดํธ๋ ๋ฌด๊ฒ๋ค!
- HTML ์์๊ฐ ๋ง์์ง์๋ก DOM์ ์ง์ ์กฐ์ํ๋ ๋น์ฉ์ด ์ปค์ง๋ค.
- ์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด React๋ “๊ฐ์ DOM(Virtual DOM)”์ ๋์ ํ๋ค.
2๏ธโฃ Virtual DOM (๊ฐ์ DOM)์ด๋?
โ ๊ฐ์ DOM์ด๋?
- React์์ ์ฌ์ฉํ๋ ๊ฐ๋ ์ผ๋ก, ์ค์ DOM์ ์ง์ ์์ ํ์ง ์๊ณ ๋ฉ๋ชจ๋ฆฌ ์์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค.
- ์ฝ๊ฒ ๋งํ๋ฉด, “DOM์ ๊ฐ๋ฒผ์ด ๋ณต์ฌ๋ณธ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅํด๋๊ณ , ๋ณ๊ฒฝ ์ฌํญ์ ๋น๊ตํด์ ํ์ํ ๋ถ๋ถ๋ง ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์”์ด๋ค.
๐ ๊ฐ์ DOM์ด ๋์ํ๋ ๊ณผ์
- React๊ฐ ๊ฐ์ DOM์ ์์ฑ (๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ๋ DOM ํธ๋ฆฌ)
- ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋๋ฉด ์๋ก์ด ๊ฐ์ DOM์ ์์ฑ
- ๊ธฐ์กด ๊ฐ์ DOM๊ณผ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ต (Diff ์๊ณ ๋ฆฌ์ฆ)
- ์ฐจ์ด๊ฐ ์๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ์ฉ (์ ๋ฐ์ดํธ)
- ํ๋ฉด์ด ๋ณ๊ฒฝ๋จ (๋ฆฌ๋ ๋๋ง)
โ ์ผ๋ฐ DOM vs ๊ฐ์ DOM ๋น๊ต
ํน์ง | ์ผ๋ฐ DOM | ๊ฐ์ DOM(React) |
์ ๋ฐ์ดํธ ๋ฐฉ์ | ์ง์ ์์ | ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์์ |
์ฑ๋ฅ | ๋ณ๊ฒฝ ๋ง์ผ๋ฉด ๋๋ฆผ | ํจ์จ์ (์ต์ํ์ ๋ณ๊ฒฝ๋ง ์ ์ฉ) |
์ฌ์ฉ ๋ฐฉ์ | document.getElementById() ์ฌ์ฉ | setState()๋ก ๊ด๋ฆฌ |
๋ ๋๋ง ์ต์ ํ | ์์ | ์์ (Diff ์๊ณ ๋ฆฌ์ฆ) |
3๏ธโฃ React์์ DOM์ ์ด๋ป๊ฒ ๋ค๋ฃฐ๊น?
โ React์์๋ useState๋ฅผ ํตํด ์ํ(state)๋ฅผ ๋ณ๊ฒฝํ๋ฉด UI๊ฐ ์๋์ผ๋ก ์ ๋ฐ์ดํธ๋๋ค.
import { useState } from "react";
function Counter() {
const [count, setCount] = useState(0);
function increase() {
setCount(count + 1); // ์ํ ๋ณ๊ฒฝ
}
return (
<div>
<p>์นด์ดํธ: {count}</p>
<button onClick={increase}>+1 ์ฆ๊ฐ</button>
</div>
);
}
๐ React์์ DOM ์ ๋ฐ์ดํธ๊ฐ ์ด๋ป๊ฒ ๋์ํ๋์ง ์ดํด๋ณด์.
- setCount(count + 1); ์คํ → ์ํ ๋ณ๊ฒฝ (count๊ฐ 1 ์ฆ๊ฐ)
- React๋ ์๋ก์ด ๊ฐ์ DOM์ ์์ฑํ์ฌ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธ
- ๊ธฐ์กด ๊ฐ์ DOM๊ณผ ์๋ก์ด ๊ฐ์ DOM์ ๋น๊ตํด์ <p> ํ๊ทธ ๋ด์ฉ(์นด์ดํธ: X)๋ง ๋ณ๊ฒฝ
- ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ๋ฐ์ดํธ! (ํ๋ฉด์ด ๋ถ๋๋ฝ๊ฒ ๋ณํจ)
React์์๋ setState()๋ useState()๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๋ฉด React๊ฐ ์๋์ผ๋ก ๊ฐ์ DOM์ ์ ๋ฐ์ดํธํ๊ณ , ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ๋ฐ์ํ๋ค.
4๏ธโฃ React์์ ์ง์ DOM์ ์กฐ์ํ๋ฉด ์ ๋๋ ์ด์
์ผ๋ฐ์ ์ผ๋ก React์์๋ document.getElementById() ๊ฐ์ ์ง์ ์ ์ธ DOM ์กฐ์์ ํผํด์ผ ํ๋ค.
โ ์๋ชป๋ ์์ (์ง์ DOM ์กฐ์)
function App() {
function changeText() {
document.getElementById("title").innerText = "React๋ ์ข์!";
}
return (
<div>
<h1 id="title">์๋
, React!</h1>
<button onClick={changeText}>ํ
์คํธ ๋ณ๊ฒฝ</button>
</div>
);
}
๐ก ์ด ์ฝ๋์ ๋ฌธ์ ์
- document.getElementById("title").innerText = "React๋ ์ข์!"; → React์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์๊ณผ ์ถฉ๋ํ ์ ์์.
- React๋ ์ํ(useState)๋ฅผ ํตํด UI๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ๋๋ฐ, ์ง์ DOM์ ์์ ํ๋ฉด React๊ฐ ๋ณ๊ฒฝ ์ฌํญ์ ๋ชจ๋ฅผ ์ ์์.
โ ์ฌ๋ฐ๋ฅธ ๋ฐฉ์ (React์ ์ํ ์ฌ์ฉ)
import { useState } from "react";
function App() {
const [text, setText] = useState("์๋
, React!");
return (
<div>
<h1>{text}</h1>
<button onClick={() => setText("React๋ ์ข์!")}>ํ
์คํธ ๋ณ๊ฒฝ</button>
</div>
);
}
React์ ์ํ(state)๋ฅผ ๋ณ๊ฒฝํ๋ฉด React๊ฐ ๊ฐ์ DOM์ ํตํด UI๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํด์ค๋ค.
๊ฐ๋ ์ค๋ช
DOM | ๋ธ๋ผ์ฐ์ ๊ฐ HTML์ ํธ๋ฆฌ ๊ตฌ์กฐ๋ก ๋ณํํ ๊ฒ |
Virtual DOM (๊ฐ์ DOM) | ์ค์ DOM์ ์ง์ ์์ ํ์ง ์๊ณ , ๋ฉ๋ชจ๋ฆฌ์์ ๋ณ๊ฒฝ์ ๋จผ์ ๊ฐ์งํ ํ ์ต์ํ์ ๋ณ๊ฒฝ๋ง ๋ฐ์ํ๋ React์ ์ต์ ํ ๊ธฐ๋ฒ |
React๊ฐ DOM์ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์ | ์ํ(state)๊ฐ ๋ณ๊ฒฝ๋๋ฉด → ์๋ก์ด ๊ฐ์ DOM ์์ฑ → ์ด์ ๊ฐ์ DOM๊ณผ ๋น๊ต → ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ์ค์ DOM์ ์ ๋ฐ์ดํธ |
React์์ ์ง์ DOM ์กฐ์์ ํผํด์ผ ํ๋ ์ด์ | useState ๊ฐ์ React์ ์ํ ๊ด๋ฆฌ ๋ฐฉ์๊ณผ ์ถฉ๋ํ ์ ์์ด์ |
ํ๋ง๋๋ก ์์ฝํ๋ฉด “React๋ Virtual DOM์ ์ฌ์ฉํด์ ๋ณ๊ฒฝ๋ ๋ถ๋ถ๋ง ํจ์จ์ ์ผ๋ก ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์์ผ๋ก ๋์ํ๋ค!