๐ ๋ชฉ์ฐจ
๋น๋๊ธฐ๋ก ๋ฉํฐ ์ค๋ ๋๋ฅผ ๊ตฌํํ๋ค?
๋ง์ด๋ค async/await๋ง ์ฐ๋ฉด ์์
์ด โ๋์์โ ๋๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ๋น๋๊ธฐ๋ ํ๋์ ๋ฉ์ธ ์ค๋ ๋๊ฐ ์ผ์ ์๊ฒ ์ชผ๊ฐ ์์ ์์ด ์ฒ๋ฆฌํด ๋ณด์ด๋ ๊ธฐ๋ฒ์ด์ง, ์ค์ ๋ก ์ฌ๋ฌ ์ค๋ ๋๊ฐ ๋ณ๋ ฌ๋ก ๊ณ์ฐํ๋ ๊ฑด ์๋๋๋ค.
UI๊ฐ ๋ฉ์ถ์ง ์๊ฒ ํ๋ ๋ฐ๋ ๋น๋๊ธฐ๋ก๋ ์ถฉ๋ถํ์ง๋ง, ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ๋ ์ด๋ฏธ์ง/์์ ๋ณํ์ฒ๋ผ CPU๋ฅผ ์ก์๋จน๋ ์์
์ ๊ฒฐ๊ตญ ๋ฉ์ธ ์ค๋ ๋๋ฅผ ๋ฌถ์ด๋ฒ๋ฆฝ๋๋ค.
1. ๋ฉํฐ ์ค๋ ๋๊ฐ ํ์ํ ์ด์
์๋ฐ์คํฌ๋ฆฝํธ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฑ๊ธ ์ค๋ ๋ ์ธ์ด์ ๋๋ค. ์ฆ, ํ ๋ฒ์ ํ๋์ ์์ ๋ง ์ฒ๋ฆฌํ ์ ์์ต๋๋ค. ํ์ง๋ง ๋ณต์กํ ๊ณ์ฐ, ๋๊ท๋ชจ ๋ฐ์ดํฐ ์ฒ๋ฆฌ, ์ด๋ฏธ์ง ๋ณํ ๊ฐ์ ์์ ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค UI๊ฐ ๋ฉ์ถ ์๋ ์์ต๋๋ค. ์ด๋ฐ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ๋ฉํฐ ์ค๋ ๋ ๊ฐ๋ ์ ํ์ฉํ ์ ์๋๋ฐ์.
2. Web Worker๋ก ๋์์ฑ ๊ตฌํ
Web Worker๋ ๋ณ๋์ ์ค๋ ๋์์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์คํํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ ๋๋ค. ๋ฉ์ธ ์ค๋ ๋(UI)์ ๋ ๋ฆฝ์ ์ผ๋ก ๋์ํ๋ฏ๋ก ๋ฌด๊ฑฐ์ด ์ฐ์ฐ์ ๋งก๊ธฐ๊ธฐ ์ข์ต๋๋ค.
// worker.js (๋ณ๋์ ํ์ผ)
self.onmessage = function(event) {
let num = event.data;
let result = 0;
for (let i = 0; i < num; i++) {
result += i;
}
self.postMessage(result);
};
// main.js
const worker = new Worker("worker.js");
worker.postMessage(1000000); // Worker์๊ฒ ์์
์์ฒญ
worker.onmessage = (e) => {
console.log("๊ฒฐ๊ณผ:", e.data);
};
Web Worker๋ฅผ ์ฌ์ฉํ๋ฉด UI ๋ฉ์ถค ์์ด ๋ฌด๊ฑฐ์ด ๊ณ์ฐ์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
3. WebAssembly๋ฅผ ํ์ฉํ ๋ฉํฐ ์ค๋ ๋
WebAssembly(WASM)๋ ๋ธ๋ผ์ฐ์ ์์ ๋์ํ๋ ์ ์์ค ์ด์ง ์ฝ๋ ํฌ๋งท์ ๋๋ค. ์ฑ๋ฅ์ด ์ค์ํ ์ฐ์ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋์ C/C++/Rust ๊ฐ์ ์ธ์ด๋ก ์์ฑํ ๋ค, WebAssembly๋ก ์ปดํ์ผํด์ ์คํํ ์ ์์ต๋๋ค.
// ์์: C ์ฝ๋ (sum.c)
int sum(int n) {
int result = 0;
for (int i = 0; i < n; i++) {
result += i;
}
return result;
}
์ด ์ฝ๋๋ฅผ emscripten ๊ฐ์ ๋๊ตฌ๋ก WebAssembly๋ก ์ปดํ์ผํ๋ฉด ์๋ฐ์คํฌ๋ฆฝํธ์์ ๊ณ ์ฑ๋ฅ์ผ๋ก ์คํํ ์ ์์ต๋๋ค.
4. Web Worker vs WebAssembly ๋น๊ต
| ๊ตฌ๋ถ | Web Worker | WebAssembly |
| ์ฃผ์ ๋ชฉ์ | UI์ ๋ถ๋ฆฌ๋ ๋น๋๊ธฐ ์คํ | ๊ณ ์ฑ๋ฅ ์ฐ์ฐ (C/C++/Rust ํ์ฉ) |
| ์ฅ์ | JS๋ง์ผ๋ก ๋ฉํฐ ์ค๋ ๋ ๊ฐ๋ฅ | ๋ค์ดํฐ๋ธ์ ๊ฐ๊น์ด ์ฑ๋ฅ |
| ๋จ์ | ์ฑ๋ฅ์ JS ํ๊ณ ๋ด | ํ์ต/๋น๋ ๊ณผ์ ์ด ํ์ |
์น ํ๊ฒฝ์์๋ ๋ฉํฐ ์ค๋ ๋๋ฅผ ํ์ฉํ ์ ์๋ ๋ฐฉ๋ฒ์ ๋ค์ํฉ๋๋ค. ๊ฐ๋จํ ๋์์ฑ ์ฒ๋ฆฌ๋ Web Worker, ๊ณ ์ฑ๋ฅ ์ฐ์ฐ์ WebAssembly๋ฅผ ์ ํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ํ๋ก์ ํธ ์ฑ๊ฒฉ์ ๋ง์ถฐ ๋ ๊ธฐ์ ์ ์ ์ ํ ์กฐํฉํ๋ฉด ์ฌ์ฉ์ ๊ฒฝํ์ ํฌ๊ฒ ๊ฐ์ ํ ์ ์์ต๋๋ค.
'Developing๐ฉโ๐ป > Front-end' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [์๋ฌธ ๋ฒ์ญ] useCallback์ ์ธ๋ชจ์์ - tkdodo (0) | 2025.10.07 |
|---|---|
| [Next.js] nuqs์ useQueryState (0) | 2025.10.06 |
| [FE] Webpack, Rollup.js, ๊ทธ๋ฆฌ๊ณ Vite (0) | 2025.08.22 |
| SPA๋ก UX๋ฅผ ๊ฐ์ ํ๋ ํจ๊ณผ์ ์ธ ์ ๋ต๋ค- ์๋ฌธ ๋ฒ์ญ (1) | 2025.08.19 |
| [์ํ๊ด๋ฆฌ] ํ๋ก ํธ์๋ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ zustand ์ดํด๋ณด๊ธฐ, ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์์ ์ฐจ์ด์ (4) | 2025.08.15 |