์น ์ ํ๋ฆฌ์ผ์ด์ ์ฑ๋ฅ ํฅ์์ ์ํ ์น ์์ปค์ ์ํคํ ์ฒ, ์ฅ์ , ํ๊ณ ๋ฐ ์ค์ ๊ตฌํ ๋ฐฉ๋ฒ์ ๋ค๋ฃจ๋ ์ข ํฉ ๊ฐ์ด๋์ ๋๋ค.
์น ์์ปค: ๋ธ๋ผ์ฐ์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฒ๋ฆฌ ๋ฅ๋ ฅ ํ์ฉํ๊ธฐ
์ค๋๋ ์ ์ญ๋์ ์ธ ์น ํ๊ฒฝ์์ ์ฌ์ฉ์๋ ๋งค๋๋ฝ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ธฐ๋ํฉ๋๋ค. ํ์ง๋ง ์๋ฐ์คํฌ๋ฆฝํธ์ ๋จ์ผ ์ค๋ ๋ ํน์ฑ์ ํนํ ๊ณ์ฐ๋์ด ๋ง์ ์์ ์ ์ฒ๋ฆฌํ ๋ ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ์ ๋ฐํ ์ ์์ต๋๋ค. ์น ์์ปค๋ ๋ธ๋ผ์ฐ์ ๋ด์์ ์ง์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํจ์ผ๋ก์จ ํด๊ฒฐ์ฑ ์ ์ ๊ณตํฉ๋๋ค. ์ด ์ข ํฉ ๊ฐ์ด๋์์๋ ์น ์์ปค, ๊ทธ ์ํคํ ์ฒ, ์ฅ์ , ํ๊ณ ๋ฐ ์ค์ ๊ตฌํ ์ ๋ต์ ํ๊ตฌํ์ฌ ๋ ํจ์จ์ ์ด๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ๋ ๋ฐ ๋์์ ๋๋ฆฝ๋๋ค.
์น ์์ปค๋ ๋ฌด์์ธ๊ฐ์?
์น ์์ปค๋ ๋ฉ์ธ ๋ธ๋ผ์ฐ์ ์ค๋ ๋์ ๋ ๋ฆฝ์ ์ผ๋ก ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์๋ฐ์คํฌ๋ฆฝํธ API์ ๋๋ค. ์ฃผ ์น ํ์ด์ง์ ๋ณ๋ ฌ๋ก ์๋ํ๋ ๋ณ๋์ ํ๋ก์ธ์ค๋ผ๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค. ์ด๋ฌํ ๋ถ๋ฆฌ๋ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๋ํ๋ฉด ์ค๋ ์คํ๋๊ฑฐ๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ธ ์์ ์ด ์ฌ์ฉ์ ์ธํฐํ์ด์ค ์ ๋ฐ์ดํธ๋ฅผ ๋ด๋นํ๋ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ๋ ๊ฒ์ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ์์ ์ ์น ์์ปค์ ์คํ๋ก๋ํจ์ผ๋ก์จ ๋ณต์กํ ๊ณ์ฐ์ด ์งํ๋๋ ๋์์๋ ๋ถ๋๋ฝ๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ์งํ ์ ์์ต๋๋ค.
์น ์์ปค์ ์ฃผ์ ํน์ง:
- ๋ณ๋ ฌ ์คํ: ์น ์์ปค๋ ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋์ด ์ง์ ํ ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ฅผ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค.
- ๋น์ฐจ๋จ(Non-Blocking): ์น ์์ปค๊ฐ ์ํํ๋ ์์ ์ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์์ UI ๋ฐ์์ฑ์ ๋ณด์ฅํฉ๋๋ค.
- ๋ฉ์์ง ์ ๋ฌ: ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ํต์ ์
postMessage()
API์onmessage
์ด๋ฒคํธ ํธ๋ค๋ฌ๋ฅผ ํ์ฉํ ๋ฉ์์ง ์ ๋ฌ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. - ์ ์ฉ ์ค์ฝํ: ์น ์์ปค๋ ๋ฉ์ธ window์ ์ค์ฝํ์ ๋ถ๋ฆฌ๋ ์์ฒด ์ ์ฉ ์ ์ญ ์ค์ฝํ๋ฅผ ๊ฐ์ง๋๋ค. ์ด ๊ฒฉ๋ฆฌ๋ ๋ณด์์ ๊ฐํํ๊ณ ์๋ํ์ง ์์ ๋ถ์์ฉ์ ๋ฐฉ์งํฉ๋๋ค.
- DOM ์ ๊ทผ ๋ถ๊ฐ: ์น ์์ปค๋ DOM(๋ฌธ์ ๊ฐ์ฒด ๋ชจ๋ธ)์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ฐ์ดํฐ์ ๋ก์ง์ ์ฒ๋ฆฌํ๊ณ , UI ์ ๋ฐ์ดํธ๋ฅผ ์ํด ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ก ๋ค์ ์ ๋ฌํฉ๋๋ค.
์ ์น ์์ปค๋ฅผ ์ฌ์ฉํด์ผ ํ ๊น์?
์น ์์ปค๋ฅผ ์ฌ์ฉํ๋ ์ฃผ๋ ๋๊ธฐ๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ๊ฐ์ ํ๊ธฐ ์ํจ์ ๋๋ค. ์ฃผ์ ์ด์ ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค:
- ํฅ์๋ UI ๋ฐ์์ฑ: ์ด๋ฏธ์ง ์ฒ๋ฆฌ, ๋ณต์กํ ๊ณ์ฐ ๋๋ ๋ฐ์ดํฐ ๋ถ์๊ณผ ๊ฐ์ด ๊ณ์ฐ๋์ด ๋ง์ ์์ ์ ์น ์์ปค์ ์คํ๋ก๋ํจ์ผ๋ก์จ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํฉ๋๋ค. ์ด๋ ๋ฌด๊ฑฐ์ด ์ฒ๋ฆฌ ์ค์๋ ์ฌ์ฉ์ ์ธํฐํ์ด์ค๊ฐ ๋ฐ์์ฑ์ ์ ์งํ๊ณ ์ํธ์์ฉ ๊ฐ๋ฅํ๋๋ก ๋ณด์ฅํฉ๋๋ค. ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ์ ๋ถ์ํ๋ ์น์ฌ์ดํธ๋ฅผ ์์ํด ๋ณด์ธ์. ์น ์์ปค๊ฐ ์๋ค๋ฉด ๋ถ์์ด ์งํ๋๋ ๋์ ์ ์ฒด ๋ธ๋ผ์ฐ์ ํญ์ด ๋ฉ์ถ ์ ์์ต๋๋ค. ์น ์์ปค๋ฅผ ์ฌ์ฉํ๋ฉด ๋ถ์์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ด๋ฃจ์ด์ง๋ฏ๋ก ์ฌ์ฉ์๋ ํ์ด์ง์ ๊ณ์ ์ํธ์์ฉํ ์ ์์ต๋๋ค.
- ์ฑ๋ฅ ํฅ์: ๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ํน์ ์์ ์ ์ ์ฒด ์คํ ์๊ฐ์ ํฌ๊ฒ ๋จ์ถํ ์ ์์ต๋๋ค. ์ฌ๋ฌ ์ค๋ ๋์ ์์ ์ ๋ถ์ฐํจ์ผ๋ก์จ ์ต์ CPU์ ๋ฉํฐ์ฝ์ด ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ํ์ฉํ ์ ์์ต๋๋ค. ์ด๋ ๋ ๋น ๋ฅธ ์์ ์๋ฃ์ ์์คํ ๋ฆฌ์์ค์ ํจ์จ์ ์ธ ์ฌ์ฉ์ผ๋ก ์ด์ด์ง๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ: ์น ์์ปค๋ ์๋ฒ์์ ์ฃผ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ๋๊ธฐํ์ ๊ฐ์ด ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํด์ผ ํ๋ ์์ ์ ์ ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ์ธ ์ค๋ ๋๋ ์ฌ์ฉ์ ์ํธ์์ฉ์ ์ง์คํ๊ณ , ์น ์์ปค๋ ๋ฐฑ๊ทธ๋ผ์ด๋ ํ๋ก์ธ์ค๋ฅผ ์ฒ๋ฆฌํ์ฌ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ๋ฐ์ดํฐ๊ฐ ํญ์ ์ต์ ์ํ๋ก ์ ์ง๋๋๋ก ๋ณด์ฅํฉ๋๋ค.
- ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ: ์น ์์ปค๋ ์ฌ์ฉ์ ๊ฒฝํ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ๋์ฉ๋ ๋ฐ์ดํฐ์ ์ ์ฒ๋ฆฌํ๋ ๋ฐ ํ์ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋์ฉ๋ ์ด๋ฏธ์ง ํ์ผ ์ฒ๋ฆฌ, ๊ธ์ต ๋ฐ์ดํฐ ๋ถ์ ๋๋ ๋ณต์กํ ์๋ฎฌ๋ ์ด์ ์ํ ๋ฑ์ ๋ชจ๋ ์น ์์ปค์ ์คํ๋ก๋ํ ์ ์์ต๋๋ค.
์น ์์ปค์ ์ฌ์ฉ ์ฌ๋ก
์น ์์ปค๋ ๋ค์๊ณผ ๊ฐ์ ๋ค์ํ ์์ ์ ํนํ ์ ํฉํฉ๋๋ค:
- ์ด๋ฏธ์ง ๋ฐ ๋น๋์ค ์ฒ๋ฆฌ: ํํฐ ์ ์ฉ, ์ด๋ฏธ์ง ํฌ๊ธฐ ์กฐ์ ๋๋ ๋น๋์ค ํ์ ํธ๋์ค์ฝ๋ฉ์ ๊ณ์ฐ ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ์น ์์ปค๋ ์ด๋ฌํ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํ์ฌ UI๊ฐ ๋ฉ์ถ๋ ๊ฒ์ ๋ฐฉ์งํ ์ ์์ต๋๋ค.
- ๋ฐ์ดํฐ ๋ถ์ ๋ฐ ์๊ฐํ: ๋ณต์กํ ๊ณ์ฐ ์ํ, ๋๊ท๋ชจ ๋ฐ์ดํฐ์ ๋ถ์ ๋๋ ์ฐจํธ ๋ฐ ๊ทธ๋ํ ์์ฑ์ ์น ์์ปค์ ์คํ๋ก๋ํ ์ ์์ต๋๋ค.
- ์ํธํ ์์ : ์ํธํ ๋ฐ ๋ณตํธํ๋ ๋ฆฌ์์ค ์ง์ฝ์ ์ผ ์ ์์ต๋๋ค. ์น ์์ปค๋ ์ด๋ฌํ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฒ๋ฆฌํ์ฌ ์ฑ๋ฅ์ ์ํฅ์ ์ฃผ์ง ์์ผ๋ฉด์ ๋ณด์์ ํฅ์์ํฌ ์ ์์ต๋๋ค.
- ๊ฒ์ ๊ฐ๋ฐ: ๊ฒ์ ๋ฌผ๋ฆฌ ๊ณ์ฐ, ๋ณต์กํ ์ฅ๋ฉด ๋ ๋๋ง ๋๋ AI ์ฒ๋ฆฌ๋ ์น ์์ปค์ ์คํ๋ก๋ํ ์ ์์ต๋๋ค.
- ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ์ดํฐ ๋๊ธฐํ: ์๋ฒ์์ ์ ๊ธฐ์ ์ธ ๋ฐ์ดํฐ ๋๊ธฐํ๋ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํํ ์ ์์ต๋๋ค.
- ๋ง์ถค๋ฒ ๊ฒ์ฌ: ๋ง์ถค๋ฒ ๊ฒ์ฌ๊ธฐ๋ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๋น๋๊ธฐ์ ์ผ๋ก ํ ์คํธ๋ฅผ ๊ฒ์ฌํ๊ณ ํ์ํ ๋๋ง UI๋ฅผ ์ ๋ฐ์ดํธํ ์ ์์ต๋๋ค.
- ๋ ์ด ํธ๋ ์ด์ฑ: ๋ณต์กํ ๋ ๋๋ง ๊ธฐ์ ์ธ ๋ ์ด ํธ๋ ์ด์ฑ์ ์น ์์ปค์์ ์ํ๋ ์ ์์ด ๊ทธ๋ํฝ ์ง์ฝ์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์๋ ๋ ๋ถ๋๋ฌ์ด ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์ค์ ์์๋ฅผ ์๊ฐํด ๋ณด๊ฒ ์ต๋๋ค: ์น ๊ธฐ๋ฐ ์ฌ์ง ํธ์ง๊ธฐ. ๊ณ ํด์๋ ์ด๋ฏธ์ง์ ๋ณต์กํ ํํฐ๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ์น ์์ปค ์์ด๋ ๋ช ์ด๊ฐ ๊ฑธ๋ฆฌ๊ณ UI๋ฅผ ์์ ํ ๋ฉ์ถ๊ฒ ํ ์ ์์ต๋๋ค. ํํฐ ์ ์ฉ์ ์น ์์ปค์ ์คํ๋ก๋ํจ์ผ๋ก์จ ์ฌ์ฉ์๋ ํํฐ๊ฐ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ ์ฉ๋๋ ๋์ ํธ์ง๊ธฐ์ ๊ณ์ ์ํธ์์ฉํ ์ ์์ด ํจ์ฌ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํฉ๋๋ค.
์น ์์ปค ๊ตฌํํ๊ธฐ
์น ์์ปค๋ฅผ ๊ตฌํํ๋ ค๋ฉด ์์ปค์ ์ฝ๋๋ฅผ ์ํ ๋ณ๋์ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์ ๋ง๋ค๊ณ , ๋ฉ์ธ ์คํฌ๋ฆฝํธ์์ ์น ์์ปค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ํต์ ์ ์ํด ๋ฉ์์ง ์ ๋ฌ์ ์ฌ์ฉํด์ผ ํฉ๋๋ค.
1. ์น ์์ปค ์คํฌ๋ฆฝํธ ์์ฑ (worker.js):
์น ์์ปค ์คํฌ๋ฆฝํธ์๋ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํ๋ ์ฝ๋๊ฐ ํฌํจ๋ฉ๋๋ค. ์ด ์คํฌ๋ฆฝํธ๋ DOM์ ์ ๊ทผํ ์ ์์ต๋๋ค. ๋ค์์ n๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ๊ณ์ฐํ๋ ๊ฐ๋จํ ์์ ๋๋ค:
// worker.js
function fibonacci(n) {
if (n <= 1) {
return n;
}
return fibonacci(n - 1) + fibonacci(n - 2);
}
self.addEventListener('message', function(e) {
const n = e.data;
const result = fibonacci(n);
self.postMessage(result);
});
์ค๋ช :
fibonacci(n)
ํจ์๋ n๋ฒ์งธ ํผ๋ณด๋์น ์๋ฅผ ์ฌ๊ท์ ์ผ๋ก ๊ณ์ฐํฉ๋๋ค.self.addEventListener('message', function(e) { ... })
๋ ๋ฉ์ธ ์ค๋ ๋๋ก๋ถํฐ ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํฉ๋๋ค.e.data
์์ฑ์๋ ๋ฉ์ธ ์ค๋ ๋์์ ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค.self.postMessage(result)
๋ ๊ณ์ฐ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ธ ์ค๋ ๋๋ก ๋ค์ ๋ณด๋ ๋๋ค.
2. ๋ฉ์ธ ์คํฌ๋ฆฝํธ์์ ์น ์์ปค ์์ฑ ๋ฐ ์ฌ์ฉ:
๋ฉ์ธ ์๋ฐ์คํฌ๋ฆฝํธ ํ์ผ์์๋ ์น ์์ปค ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ๋ฉ์์ง๋ฅผ ๋ณด๋ด๊ณ , ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํด์ผ ํฉ๋๋ค.
// main.js
const worker = new Worker('worker.js');
worker.addEventListener('message', function(e) {
const result = e.data;
console.log('ํผ๋ณด๋์น ๊ฒฐ๊ณผ:', result);
// ๊ฒฐ๊ณผ๋ก UI ์
๋ฐ์ดํธ
document.getElementById('result').textContent = result;
});
worker.addEventListener('error', function(e) {
console.error('์์ปค ์ค๋ฅ:', e.message);
});
document.getElementById('calculate').addEventListener('click', function() {
const n = document.getElementById('number').value;
worker.postMessage(parseInt(n));
});
์ค๋ช :
const worker = new Worker('worker.js');
๋ ์์ปค ์คํฌ๋ฆฝํธ์ ๊ฒฝ๋ก๋ฅผ ์ง์ ํ์ฌ ์๋ก์ด ์น ์์ปค ๊ฐ์ฒด๋ฅผ ์์ฑํฉ๋๋ค.worker.addEventListener('message', function(e) { ... })
๋ ์น ์์ปค๋ก๋ถํฐ ๋ฐ์ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํฉ๋๋ค.e.data
์์ฑ์๋ ์์ปค์์ ๋ณด๋ธ ๋ฐ์ดํฐ๊ฐ ํฌํจ๋ฉ๋๋ค.worker.addEventListener('error', function(e) { ... })
๋ ์น ์์ปค์์ ๋ฐ์ํ๋ ๋ชจ๋ ์ค๋ฅ๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํ ์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ค์ ํฉ๋๋ค.worker.postMessage(parseInt(n))
๋ ์น ์์ปค์ ๋ฉ์์ง๋ฅผ ๋ณด๋ดn
์ ๊ฐ์ ๋ฐ์ดํฐ๋ก ์ ๋ฌํฉ๋๋ค.
3. HTML ๊ตฌ์กฐ:
HTML ํ์ผ์๋ ์ฌ์ฉ์ ์ ๋ ฅ์ ์ํ ์์์ ๊ฒฐ๊ณผ๋ฅผ ํ์ํ ์์๊ฐ ํฌํจ๋์ด์ผ ํฉ๋๋ค.
<!DOCTYPE html>
<html>
<head>
<title>์น ์์ปค ์์ </title>
</head>
<body>
<label for="number">์ซ์๋ฅผ ์
๋ ฅํ์ธ์:</label>
<input type="number" id="number">
<button id="calculate">ํผ๋ณด๋์น ๊ณ์ฐ</button>
<p>๊ฒฐ๊ณผ: <span id="result"></span></p>
<script src="main.js"></script>
</body>
</html>
์ด ๊ฐ๋จํ ์์ ๋ ์น ์์ปค๋ฅผ ์์ฑํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ค๋๋ค. ํผ๋ณด๋์น ๊ณ์ฐ์ ์ง์ ์ํํ ๊ฒฝ์ฐ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ ์ ์๋ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๋๋ค. ์ด๋ฅผ ์น ์์ปค์ ์คํ๋ก๋ํจ์ผ๋ก์จ UI๋ ๋ฐ์์ฑ์ ์ ์งํฉ๋๋ค.
ํ๊ณ์ ์ดํดํ๊ธฐ
์น ์์ปค๋ ์๋นํ ์ด์ ์ ์ ๊ณตํ์ง๋ง, ๊ทธ ํ๊ณ์ ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- DOM ์ ๊ทผ ๋ถ๊ฐ: ์น ์์ปค๋ DOM์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ์ด๋ ์์ปค ์ค๋ ๋์ ๋ฉ์ธ ์ค๋ ๋ ๊ฐ์ ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๋ฅผ ๋ณด์ฅํ๋ ๊ทผ๋ณธ์ ์ธ ํ๊ณ์ ๋๋ค. ๋ชจ๋ UI ์ ๋ฐ์ดํธ๋ ์น ์์ปค๋ก๋ถํฐ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๋ฉ์ธ ์ค๋ ๋์์ ์ํ๋์ด์ผ ํฉ๋๋ค.
- ์ ํ๋ API ์ ๊ทผ: ์น ์์ปค๋ ํน์ ๋ธ๋ผ์ฐ์ API์ ๋ํ ์ ๊ทผ์ด ์ ํ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด,
window
๊ฐ์ฒด๋document
๊ฐ์ฒด์ ์ง์ ์ ๊ทผํ ์ ์์ต๋๋ค. ํ์ง๋งXMLHttpRequest
,setTimeout
,setInterval
๊ณผ ๊ฐ์ API์๋ ์ ๊ทผํ ์ ์์ต๋๋ค. - ๋ฉ์์ง ์ ๋ฌ ์ค๋ฒํค๋: ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ํต์ ์ ๋ฉ์์ง ์ ๋ฌ์ ํตํด ์ด๋ฃจ์ด์ง๋๋ค. ๋ฉ์์ง ์ ๋ฌ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ง๋ ฌํํ๊ณ ์ญ์ง๋ ฌํํ๋ ๊ณผ์ ์ ํนํ ํฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ๊ฒฝ์ฐ ์ฝ๊ฐ์ ์ค๋ฒํค๋๋ฅผ ๋ฐ์์ํฌ ์ ์์ต๋๋ค. ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ ์ ์คํ๊ฒ ๊ณ ๋ คํ๊ณ ํ์ํ ๊ฒฝ์ฐ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ์ต์ ํํด์ผ ํฉ๋๋ค.
- ๋๋ฒ๊น ์ ์ด๋ ค์: ์น ์์ปค๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ์ ์ผ๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ธ ์ ์์ต๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ปค์ ์คํ ํ๊ฒฝ๊ณผ ๋ฉ์์ง๋ฅผ ๊ฒ์ฌํด์ผ ํฉ๋๋ค.
- ๋ธ๋ผ์ฐ์ ํธํ์ฑ: ์น ์์ปค๋ ์ต์ ๋ธ๋ผ์ฐ์ ์์ ๋๋ฆฌ ์ง์๋์ง๋ง, ๊ตฌํ ๋ธ๋ผ์ฐ์ ์์๋ ์์ ํ ์ง์๋์ง ์์ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฌ๋ฐ๋ฅด๊ฒ ์๋ํ๋๋ก ๊ตฌํ ๋ธ๋ผ์ฐ์ ๋ฅผ ์ํ ๋์ฒด ๋ฉ์ปค๋์ฆ์ด๋ ํด๋ฆฌํ์ ์ ๊ณตํ๋ ๊ฒ์ด ํ์์ ์ ๋๋ค.
์น ์์ปค ๊ฐ๋ฐ์ ์ํ ๋ชจ๋ฒ ์ฌ๋ก
์น ์์ปค์ ์ด์ ์ ๊ทน๋ํํ๊ณ ์ ์ฌ์ ์ธ ํจ์ ์ ํผํ๋ ค๋ฉด ๋ค์ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๊ณ ๋ คํ์ญ์์ค:
- ๋ฐ์ดํฐ ์ ์ก ์ต์ํ: ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ์ ์ก๋๋ ๋ฐ์ดํฐ์ ์์ ์ค์ด์ญ์์ค. ๊ผญ ํ์ํ ๋ฐ์ดํฐ๋ง ์ ์กํ์ญ์์ค. ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ์ง ์๊ณ ๊ณต์ ํ๊ธฐ ์ํด ๊ณต์ ๋ฉ๋ชจ๋ฆฌ(์:
SharedArrayBuffer
, ๋จ Spectre/Meltdown ์ทจ์ฝ์ ๊ณผ ๊ฐ์ ๋ณด์ ๋ฌธ์ ๋ฅผ ์ธ์งํด์ผ ํจ)์ ๊ฐ์ ๊ธฐ์ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. - ๋ฐ์ดํฐ ์ง๋ ฌํ ์ต์ ํ: ๋ฉ์์ง ์ ๋ฌ์ ์ค๋ฒํค๋๋ฅผ ์ต์ํํ๊ธฐ ์ํด JSON ๋๋ Protocol Buffers์ ๊ฐ์ ํจ์จ์ ์ธ ๋ฐ์ดํฐ ์ง๋ ฌํ ํ์์ ์ฌ์ฉํ์ญ์์ค.
- ์ ์ก ๊ฐ๋ฅ ๊ฐ์ฒด ์ฌ์ฉ:
ArrayBuffer
,MessagePort
,ImageBitmap
๊ณผ ๊ฐ์ ํน์ ์ ํ์ ๋ฐ์ดํฐ์ ๊ฒฝ์ฐ ์ ์ก ๊ฐ๋ฅ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ ์ก ๊ฐ๋ฅ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ฉด ๊ธฐ๋ณธ ๋ฉ๋ชจ๋ฆฌ ๋ฒํผ์ ์์ ๊ถ์ ์น ์์ปค๋ก ์ด์ ํ์ฌ ๋ณต์ฌํ ํ์๊ฐ ์์ต๋๋ค. ์ด๋ ๋๊ท๋ชจ ๋ฐ์ดํฐ ๊ตฌ์กฐ์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํฌ ์ ์์ต๋๋ค. - ์ฐ์ํ ์ค๋ฅ ์ฒ๋ฆฌ: ๋ฐ์ํ ์ ์๋ ์์ธ๋ฅผ ํฌ์ฐฉํ๊ณ ์ฒ๋ฆฌํ๊ธฐ ์ํด ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๋ชจ๋์ ๊ฒฌ๊ณ ํ ์ค๋ฅ ์ฒ๋ฆฌ ๋ก์ง์ ๊ตฌํํ์ญ์์ค. ์น ์์ปค์ ์ค๋ฅ๋ฅผ ํฌ์ฐฉํ๊ธฐ ์ํด
error
์ด๋ฒคํธ ๋ฆฌ์ค๋๋ฅผ ์ฌ์ฉํ์ญ์์ค. - ์ฝ๋ ๊ตฌ์ฑ์ ์ํ ๋ชจ๋ ์ฌ์ฉ: ์ ์ง๋ณด์์ฑ๊ณผ ์ฌ์ฌ์ฉ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ์น ์์ปค ์ฝ๋๋ฅผ ๋ชจ๋๋ก ๊ตฌ์ฑํ์ญ์์ค.
Worker
์์ฑ์์์{type: "module"}
์ ์ง์ ํ์ฌ ์น ์์ปค์ ํจ๊ป ES ๋ชจ๋์ ์ฌ์ฉํ ์ ์์ต๋๋ค(์:new Worker('worker.js', {type: "module"});
). - ์ฑ๋ฅ ๋ชจ๋ํฐ๋ง: ๋ธ๋ผ์ฐ์ ๊ฐ๋ฐ์ ๋๊ตฌ๋ฅผ ์ฌ์ฉํ์ฌ ์น ์์ปค์ ์ฑ๋ฅ์ ๋ชจ๋ํฐ๋งํ์ญ์์ค. CPU ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์๋น๋, ๋ฉ์์ง ์ ๋ฌ ์ค๋ฒํค๋์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ด์ญ์์ค.
- ์ค๋ ๋ ํ ๊ณ ๋ ค: ์ฌ๋ฌ ์น ์์ปค๊ฐ ํ์ํ ๋ณต์กํ ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฒฝ์ฐ, ์์ปค๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๊ธฐ ์ํด ์ค๋ ๋ ํ ์ฌ์ฉ์ ๊ณ ๋ คํ์ญ์์ค. ์ค๋ ๋ ํ์ ๊ธฐ์กด ์์ปค๋ฅผ ์ฌ์ฌ์ฉํ๊ณ ๊ฐ ์์ ์ ๋ํด ์๋ก์ด ์์ปค๋ฅผ ์์ฑํ๋ ์ค๋ฒํค๋๋ฅผ ํผํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.
๊ณ ๊ธ ์น ์์ปค ๊ธฐ์
๊ธฐ๋ณธ ์ฌํญ์ ๋์ด์, ์น ์์ปค ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๊ธฐ๋ฅ์ ๋์ฑ ํฅ์์ํค๊ธฐ ์ํด ์ฌ์ฉํ ์ ์๋ ๋ช ๊ฐ์ง ๊ณ ๊ธ ๊ธฐ์ ์ด ์์ต๋๋ค:
1. SharedArrayBuffer:
SharedArrayBuffer
๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๋ชจ๋์์ ์ ๊ทผํ ์ ์๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ ์์ญ์ ๋ง๋ค ์ ์์ต๋๋ค. ์ด๋ ํน์ ์ ํ์ ๋ฐ์ดํฐ์ ๋ํ ๋ฉ์์ง ์ ๋ฌ์ ํ์์ฑ์ ์์ ์ฑ๋ฅ์ ํฌ๊ฒ ํฅ์์ํต๋๋ค. ๊ทธ๋ฌ๋ Spectre ๋ฐ Meltdown ์ทจ์ฝ์ ๊ณผ ๊ด๋ จ๋ ๋ณด์ ๊ณ ๋ ค ์ฌํญ์ ์ ์ํด์ผ ํฉ๋๋ค. SharedArrayBuffer
๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํ HTTP ํค๋(์: Cross-Origin-Opener-Policy: same-origin
๋ฐ Cross-Origin-Embedder-Policy: require-corp
) ์ค์ ์ด ํ์ํฉ๋๋ค.
2. Atomics:
Atomics
๋ SharedArrayBuffer
์์
์ ์ํ ์์์ ์ฐ์ฐ์ ์ ๊ณตํฉ๋๋ค. ์ด๋ฌํ ์ฐ์ฐ์ ๋ฐ์ดํฐ๊ฐ ์ค๋ ๋ ์์ ๋ฐฉ์์ผ๋ก ์ ๊ทผ ๋ฐ ์์ ๋๋๋ก ๋ณด์ฅํ์ฌ ๊ฒฝ์ ์กฐ๊ฑด ๋ฐ ๋ฐ์ดํฐ ์์์ ๋ฐฉ์งํฉ๋๋ค. Atomics
๋ ๊ณต์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ ๋์์ฑ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ตฌ์ถํ๋ ๋ฐ ํ์์ ์
๋๋ค.
3. ์น์ด์ ๋ธ๋ฆฌ(Wasm):
์น์ด์ ๋ธ๋ฆฌ๋ C, C++, Rust์ ๊ฐ์ ์ธ์ด๋ก ์์ฑ๋ ์ฝ๋๋ฅผ ๋ธ๋ผ์ฐ์ ์์ ๊ฑฐ์ ๋ค์ดํฐ๋ธ ์๋๋ก ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ์ ์์ค ๋ฐ์ด๋๋ฆฌ ๋ช ๋ น์ด ํ์์ ๋๋ค. ์น ์์ปค์์ ์น์ด์ ๋ธ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ๋ณด๋ค ํจ์ฌ ๋ฐ์ด๋ ์ฑ๋ฅ์ผ๋ก ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ์ํํ ์ ์์ต๋๋ค. ์น์ด์ ๋ธ๋ฆฌ ์ฝ๋๋ ์น ์์ปค ๋ด์์ ๋ก๋ ๋ฐ ์คํ๋ ์ ์์ผ๋ฏ๋ก ๋ฉ์ธ ์ค๋ ๋๋ฅผ ์ฐจ๋จํ์ง ์๊ณ ์น์ด์ ๋ธ๋ฆฌ์ ๊ฐ๋ ฅํ ์ฑ๋ฅ์ ํ์ฉํ ์ ์์ต๋๋ค.
4. Comlink:
Comlink๋ ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ํต์ ์ ๋จ์ํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์น ์์ปค์ ํจ์์ ๊ฐ์ฒด๋ฅผ ๋ง์น ๋ก์ปฌ ๊ฐ์ฒด์ธ ๊ฒ์ฒ๋ผ ๋ฉ์ธ ์ค๋ ๋์ ๋ ธ์ถ์ํฌ ์ ์์ต๋๋ค. Comlink๋ ๋ฐ์ดํฐ์ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํ๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํ์ฌ ๋ณต์กํ ์น ์์ปค ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ ์ฝ๊ฒ ๊ตฌ์ถํ ์ ์๋๋ก ํฉ๋๋ค. Comlink๋ ๋ฉ์์ง ์ ๋ฌ์ ํ์ํ ์์ฉ๊ตฌ ์ฝ๋๋ฅผ ํฌ๊ฒ ์ค์ผ ์ ์์ต๋๋ค.
๋ณด์ ๊ณ ๋ ค์ฌํญ
์น ์์ปค๋ก ์์ ํ ๋๋ ๋ณด์ ๊ณ ๋ ค ์ฌํญ์ ์ธ์งํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค:
- ๊ต์ฐจ ์ถ์ฒ ์ ํ: ์น ์์ปค๋ ๋ค๋ฅธ ์น ๋ฆฌ์์ค์ ๋์ผํ ๊ต์ฐจ ์ถ์ฒ ์ ํ์ ๋ฐ์ต๋๋ค. ์น ์์ปค ์คํฌ๋ฆฝํธ๋ ๋ฉ์ธ ํ์ด์ง์ ๋์ผํ ์ถ์ฒ(ํ๋กํ ์ฝ, ๋๋ฉ์ธ, ํฌํธ)์์๋ง ๋ก๋ํ๊ฑฐ๋, CORS(Cross-Origin Resource Sharing) ํค๋๋ฅผ ํตํด ๊ต์ฐจ ์ถ์ฒ ์ ๊ทผ์ ๋ช ์์ ์ผ๋ก ํ์ฉํ ์ถ์ฒ์์๋ง ๋ก๋ํ ์ ์์ต๋๋ค.
- ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP): ์ฝํ ์ธ ๋ณด์ ์ ์ฑ (CSP)์ ์ฌ์ฉํ์ฌ ์น ์์ปค ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ ์ ์๋ ์์ค๋ฅผ ์ ํํ ์ ์์ต๋๋ค. CSP ์ ์ฑ ์ด ์ ๋ขฐํ ์ ์๋ ์์ค์์ ์น ์์ปค ์คํฌ๋ฆฝํธ๋ฅผ ๋ก๋ํ๋๋ก ํ์ฉํ๋์ง ํ์ธํ์ญ์์ค.
- ๋ฐ์ดํฐ ๋ณด์: ์น ์์ปค์ ์ ๋ฌํ๋ ๋ฐ์ดํฐ, ํนํ ๋ฏผ๊ฐํ ์ ๋ณด๊ฐ ํฌํจ๋ ๊ฒฝ์ฐ ์ฃผ์ํ์ญ์์ค. ๋ฉ์์ง์ ๋ฏผ๊ฐํ ๋ฐ์ดํฐ๋ฅผ ์ง์ ์ ๋ฌํ์ง ๋ง์ญ์์ค. ์น ์์ปค๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ธฐ ์ ์ ๋ฐ์ดํฐ๋ฅผ ์ํธํํ๋ ๊ฒ์ ๊ณ ๋ คํ์ญ์์ค. ํนํ ์น ์์ปค๊ฐ ๋ค๋ฅธ ์ถ์ฒ์์ ๋ก๋๋ ๊ฒฝ์ฐ ๋์ฑ ๊ทธ๋ ์ต๋๋ค.
- Spectre ๋ฐ Meltdown ์ทจ์ฝ์ : ์์ ์ธ๊ธํ๋ฏ์ด
SharedArrayBuffer
๋ฅผ ์ฌ์ฉํ๋ฉด ์ ํ๋ฆฌ์ผ์ด์ ์ด Spectre ๋ฐ Meltdown ์ทจ์ฝ์ ์ ๋ ธ์ถ๋ ์ ์์ต๋๋ค. ์ํ ์ ๋ต์๋ ์ผ๋ฐ์ ์ผ๋ก ์ ์ ํ HTTP ํค๋ ์ค์ (์:Cross-Origin-Opener-Policy: same-origin
๋ฐCross-Origin-Embedder-Policy: require-corp
)๊ณผ ์ ์ฌ์ ์ธ ์ทจ์ฝ์ ์ ๋ํ ์ฝ๋์ ์ ์คํ ๊ฒํ ๊ฐ ํฌํจ๋ฉ๋๋ค.
์น ์์ปค์ ์ต์ ํ๋ ์์ํฌ
React, Angular, Vue.js์ ๊ฐ์ ๋ง์ ์ต์ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ ์์ํฌ๋ ์น ์์ปค ์ฌ์ฉ์ ๋จ์ํํ๋ ์ถ์ํ ๋ฐ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
React:
React์์๋ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ์ปดํฌ๋ํธ ๋ด์์ ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์
์ ์ํํ ์ ์์ต๋๋ค. react-hooks-worker
์ ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ React ํจ์ํ ์ปดํฌ๋ํธ ๋ด์์ ์น ์์ปค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ํ๋ก์ธ์ค๋ฅผ ๋จ์ํํ ์ ์์ต๋๋ค. ๋ํ ์ปค์คํ
ํ
์ ์ฌ์ฉํ์ฌ ์น ์์ปค๋ฅผ ์์ฑํ๊ณ ํต์ ํ๋ ๋ก์ง์ ์บก์ํํ ์ ์์ต๋๋ค.
Angular:
Angular๋ ์น ์์ปค ์ฝ๋๋ฅผ ๊ตฌ์ฑํ๋ ๋ฐ ์ฌ์ฉํ ์ ์๋ ๊ฒฌ๊ณ ํ ๋ชจ๋ ์์คํ ์ ์ ๊ณตํฉ๋๋ค. ์น ์์ปค๋ฅผ ์์ฑํ๊ณ ํต์ ํ๋ ๋ก์ง์ ์บก์ํํ๋ Angular ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Angular CLI๋ ๋ํ ์น ์์ปค ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํ๊ณ ์ ํ๋ฆฌ์ผ์ด์ ์ ํตํฉํ๊ธฐ ์ํ ๋๊ตฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Vue.js:
Vue.js์์๋ ์ปดํฌ๋ํธ ๋ด์์ ์น ์์ปค๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์ ์ ์ํํ ์ ์์ต๋๋ค. Vue์ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Vuex๋ ์น ์์ปค์ ์ํ๋ฅผ ๊ด๋ฆฌํ๊ณ ๋ฉ์ธ ์ค๋ ๋์ ์น ์์ปค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ๋ ๋ฐ ์ฌ์ฉ๋ ์ ์์ต๋๋ค. ๋ํ ์ปค์คํ ๋๋ ํฐ๋ธ๋ฅผ ์ฌ์ฉํ์ฌ ์น ์์ปค๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํ๋ ๋ก์ง์ ์บก์ํํ ์ ์์ต๋๋ค.
๊ฒฐ๋ก
์น ์์ปค๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ๊ณผ ๋ฐ์์ฑ์ ํฅ์์ํค๋ ๊ฐ๋ ฅํ ๋๊ตฌ์ ๋๋ค. ๊ณ์ฐ ์ง์ฝ์ ์ธ ์์ ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ค๋ ๋๋ก ์คํ๋ก๋ํจ์ผ๋ก์จ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ฐจ๋จ๋๋ ๊ฒ์ ๋ฐฉ์งํ๊ณ ๋ถ๋๋ฝ๊ณ ์ํธ์์ฉ์ ์ธ ์ฌ์ฉ์ ๊ฒฝํ์ ๋ณด์ฅํ ์ ์์ต๋๋ค. ์น ์์ปค์๋ DOM์ ์ง์ ์ ๊ทผํ ์ ์๋ ๊ฒ๊ณผ ๊ฐ์ ๋ช ๊ฐ์ง ํ๊ณ๊ฐ ์์ง๋ง, ์ด๋ฌํ ํ๊ณ๋ ์ ์คํ ๊ณํ๊ณผ ๊ตฌํ์ผ๋ก ๊ทน๋ณตํ ์ ์์ต๋๋ค. ์ด ๊ฐ์ด๋์ ์ค๋ช ๋ ๋ชจ๋ฒ ์ฌ๋ก๋ฅผ ๋ฐ๋ฅด๋ฉด ์น ์์ปค๋ฅผ ํจ๊ณผ์ ์ผ๋ก ํ์ฉํ์ฌ ์ค๋๋ ์ฌ์ฉ์์ ์๊ตฌ๋ฅผ ์ถฉ์กฑํ๋ ๋ ํจ์จ์ ์ด๊ณ ๋ฐ์์ด ๋น ๋ฅธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์ถํ ์ ์์ต๋๋ค.
๋ณต์กํ ๋ฐ์ดํฐ ์๊ฐํ ์ ํ๋ฆฌ์ผ์ด์ , ๊ณ ์ฑ๋ฅ ๊ฒ์ ๋๋ ๋ฐ์ํ ์ ์ ์๊ฑฐ๋ ์ฌ์ดํธ๋ฅผ ๊ตฌ์ถํ๋ , ์น ์์ปค๋ ๋ ๋์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. ๋ณ๋ ฌ ์ฒ๋ฆฌ์ ํ์ ๋ฐ์๋ค์ด๊ณ ์น ์์ปค๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ์ฌ๋ ฅ์ ์ต๋ํ ๋ฐํํ์ญ์์ค.