--- id: P-REINFORCE-AUTO-87DB97 category: "10_Wiki/๐Ÿ’ก Topics/Graphics & Performance" confidence_score: 0.90 tags: [auto-reinforced] last_reinforced: 2026-04-20 github_commit: "[P-Reinforce] Continuous Worker - ๊ณ ์„ฑ๋Šฅ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ React ์•ฑ ์•„ํ‚คํ…์ฒ˜" --- # [[แ„€แ…ฉแ„‰แ…ฅแ†ผแ„‚แ…ณแ†ผ แ„†แ…ฅแ†ฏแ„แ…ตแ„‰แ…ณแ„…แ…ฆแ„ƒแ…ณ React แ„‹แ…ขแ†ธ แ„‹แ…กแ„แ…ตแ„แ…ฆแ†จแ„Žแ…ฅ|๊ณ ์„ฑ๋Šฅ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ React ์•ฑ ์•„ํ‚คํ…์ฒ˜]] ## ๐Ÿ“Œ ํ•œ ์ค„ ํ†ต์ฐฐ (The Karpathy Summary) > ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋‹จ์ผ ์Šค๋ ˆ๋“œ(Single-thread) ์ œ์•ฝ์„ ๊ทน๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์›น ์›Œ์ปค(Web Worker)์™€ OffscreenCanvas๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฌด๊ฑฐ์šด CPU ์—ฐ์‚ฐ์ด๋‚˜ 3D ๊ทธ๋ž˜ํ”ฝ ๋ Œ๋”๋ง์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ๋ถ„๋ฆฌํ•˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์™€ ๊ณ ํšจ์œจ๋กœ ์ƒํƒœ๋ฅผ ๋™๊ธฐํ™”ํ•˜์—ฌ ์ดˆ๋‹น 60ํ”„๋ ˆ์ž„(FPS)์˜ ๋งค๋„๋Ÿฌ์šด ๋ฐ˜์‘์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ง„๋ณด๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ## ๐Ÿ“– ๊ตฌ์กฐํ™”๋œ ์ง€์‹ (Synthesized Content) **1. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์˜ ํ•„์š”์„ฑ๊ณผ Web Worker ๋ถ„๋ฆฌ** ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด๋ฏ€๋กœ ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ์ •๋ ฌ, ์ด๋ฏธ์ง€/๋น„๋””์˜ค ์ฒ˜๋ฆฌ, ๋ฌผ๋ฆฌ ์—ฐ์‚ฐ ๋“ฑ ๋ฌด๊ฑฐ์šด ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ธ”๋กœํ‚น๋˜์–ด UI๊ฐ€ ๋ฉˆ์ถ”๋Š” ํ˜„์ƒ(Freezing)์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฌด๊ฑฐ์šด ์—ฐ์‚ฐ์„ ์›น ์›Œ์ปค(Web Worker)๋กœ ์˜คํ”„๋กœ๋”ฉ(Offloading)ํ•˜๋ฉด, UI ์ƒํ˜ธ์ž‘์šฉ์€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ๋ฐฉํ•ด ์—†์ด 60FPS๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์—ฐ์‚ฐ์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์Šค๋ ˆ๋“œ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. React ์•ฑ์—์„œ๋Š” `@koale/useworker`์™€ ๊ฐ™์€ ํ›… ๊ธฐ๋ฐ˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ํ†ตํ•ด ์›Œ์ปค ์„ค์ •์„ ๋‹จ์ˆœํ™”ํ•˜์—ฌ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. **2. OffscreenCanvas์™€ WebGL/R3F ๋ Œ๋”๋ง ๋ถ„๋ฆฌ** ๋ณต์žกํ•œ 3D ์”ฌ์„ ๋‹ค๋ฃจ๋Š” WebGL ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ฒฝ์šฐ ๋ Œ๋”๋ง ์ž์ฒด๊ฐ€ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ํฌ๊ฒŒ ์†Œ๋ชจํ•ฉ๋‹ˆ๋‹ค. `@react-three/offscreen` ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋‚˜ ๋„ค์ดํ‹ฐ๋ธŒ API๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์บ”๋ฒ„์Šค์˜ ์ œ์–ด๊ถŒ์„ `OffscreenCanvas`๋กœ ๋„˜๊ฒจ ์›น ์›Œ์ปค ํ™˜๊ฒฝ์—์„œ React Three Fiber(R3F) ํ˜น์€ Three.js๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ตฌ์กฐ์—์„œ๋Š” ๋ Œ๋”๋ง๊ณผ DOM ์กฐ์ž‘์ด ๋ฌผ๋ฆฌ์ ์œผ๋กœ ๋ถ„๋ฆฌ๋˜์–ด ์„œ๋กœ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. **3. ๋Œ€๋ฆฌ ์ธํ„ฐ๋ž™์…˜(Event Forwarding) ์‹œ์Šคํ…œ** ์›น ์›Œ์ปค ๋‚ด๋ถ€์—๋Š” DOM์ด๋‚˜ `window` ๊ฐ์ฒด๊ฐ€ ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ์‚ฌ์šฉ์ž์˜ ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ„ฐ์น˜ ๋“ฑ์˜ ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ์ˆ˜์‹ ํ•  ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ์บก์ฒ˜ํ•œ ๋’ค, ํฌ์ธํ„ฐ ์ขŒํ‘œ ๋“ฑ์˜ ํ•„์ˆ˜ ๋ฐ์ดํ„ฐ๋งŒ ์›Œ์ปค๋กœ ์ „๋‹ฌ(postMessage)ํ•˜์—ฌ ์›Œ์ปค ๋‚ด๋ถ€์—์„œ ์ƒํ˜ธ์ž‘์šฉ์„ ์ฒ˜๋ฆฌํ•˜๋„๋ก ํ•˜๋Š” ์ด๋ฒคํŠธ ํฌ์›Œ๋”ฉ ํŒŒ์ดํ”„๋ผ์ธ ๊ตฌ์ถ•์ด ํ•„์ˆ˜์ ์ž…๋‹ˆ๋‹ค. **4. ๊ณ ํšจ์œจ ์ƒํƒœ ๋™๊ธฐํ™” (State Synchronization)** ๋ฉ”์ธ ์Šค๋ ˆ๋“œ(React DOM UI)์™€ ์›Œ์ปค(WebGL ์”ฌ ๋˜๋Š” ์—ฐ์‚ฐ ๋กœ์ง) ์–‘์ชฝ์—์„œ ๋™์ผํ•œ ์•ฑ ์ƒํƒœ๋ฅผ ์ฝ๊ณ  ์จ์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ, ์Šค๋ ˆ๋“œ ๊ฐ„ ์ƒํƒœ ๋™๊ธฐํ™”๊ฐ€ ๊ฐ€์žฅ ํฐ ๊ณผ์ œ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. - **ํ”„๋ก์‹œ ๋ฐ ๋ธํƒ€ ๋™๊ธฐํ™”:** Valtio์™€ ๊ฐ™์€ ํ”„๋ก์‹œ ๊ธฐ๋ฐ˜ ์ƒํƒœ ๊ด€๋ฆฌ ๋„๊ตฌ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋กœ์ปฌ ์ €์žฅ์†Œ๋ฅผ ๊ตฌ์ถ•ํ•œ ๋’ค, ์ƒํƒœ๊ฐ€ ๋ณ€ํ•  ๋•Œ๋งˆ๋‹ค ๋ณ€๊ฒฝ๋œ ์ž‘์—… ๋‚ด์šฉ(Operations/Delta)๋งŒ Broadcast Channel API๋ฅผ ํ†ตํ•ด ์ƒ๋Œ€ ์Šค๋ ˆ๋“œ์— ์ „๋‹ฌํ•˜์—ฌ ๋™๊ธฐํ™”ํ•ฉ๋‹ˆ๋‹ค. - **SharedArrayBuffer:** ์—”ํ‹ฐํ‹ฐ ์ปดํฌ๋„ŒํŠธ ์‹œ์Šคํ…œ(ECS) ๊ธฐ๋ฐ˜์˜ ๊ฒŒ์ž„์ด๋‚˜ ์ง€์—ฐ ์‹œ๊ฐ„์ด ๊ทน๋„๋กœ ๋‚ฎ์•„์•ผ ํ•˜๋Š” ํ™˜๊ฒฝ์—์„œ๋Š” ์Šค๋ ˆ๋“œ ๊ฐ„ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์ง์ ‘ ๊ณต์œ ํ•˜๋Š” `SharedArrayBuffer`๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ง๋ ฌํ™”(Serialization)/๋ณต์‚ฌ ๋น„์šฉ ์—†์ด ์›์ž์ (Atomic) ์—ฐ์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. **5. ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ ์˜คํ”„๋กœ๋”ฉ (Partytown)** ์• ๋„๋ฆฌํ‹ฑ์Šค, ๊ด‘๊ณ , ์ฑ—๋ด‡ ๋“ฑ ์™ธ๋ถ€ ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ๋Š” ํ†ต์ œํ•  ์ˆ˜ ์—†๋Š” ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ธ”๋กœํ‚น์˜ ์ฃผ์š” ์›์ธ์ž…๋‹ˆ๋‹ค. `Partytown`๊ณผ ๊ฐ™์€ ๋„๊ตฌ๋ฅผ ๋„์ž…ํ•˜๋ฉด ์ด๋Ÿฌํ•œ ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ์˜ ์‹คํ–‰์„ ์›น ์›Œ์ปค๋กœ ์˜ฎ๊ฒจ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ ๋ถ€ํ•˜๋ฅผ ์›์ฒœ์ ์œผ๋กœ ์ฐจ๋‹จํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ## โš ๏ธ ๋ชจ์ˆœ ๋ฐ ์—…๋ฐ์ดํŠธ (Contradictions & RL Update) - **๊ณผ๊ฑฐ ๋ฐ์ดํ„ฐ์™€์˜ ์ถฉ๋Œ:** ์ž๋™ํ™” ์—”์ง„์— ์˜ํ•ด ๋งคํ•‘๋œ ์ง€์‹์œผ๋กœ, ์ถ”ํ›„ ์ •๋ฐ€ ๊ฒ€์ฆ ํ•„์š”. - **์ •์ฑ… ๋ณ€ํ™”:** Graphics & Performance ๋ถ„์•ผ์˜ ์ž๋™ ์ž์‚ฐํ™” ์ˆ˜ํ–‰. ## ๐Ÿ”— ์ง€์‹ ์—ฐ๊ฒฐ (Graph) - **Related Topics:** [[Web Worker (แ„‹แ…ฐแ†ธ แ„‹แ…ฏแ„แ…ฅ)|Web Worker (์›น ์›Œ์ปค)]], [[OffscreenCanvas|OffscreenCanvas]], [[SharedArrayBuffer|SharedArrayBuffer]], Valtio (Proxy State ๊ด€๋ฆฌ), Event Forwarding (์ด๋ฒคํŠธ ํฌ์›Œ๋”ฉ) - **Projects/Contexts:** ๋Œ€๊ทœ๋ชจ ๋ฐ์ดํ„ฐ ๋ถ„์„ ๋ฐ ์‹œ๊ฐํ™” ๋Œ€์‹œ๋ณด๋“œ, ๊ณ ์„ฑ๋Šฅ ์‹ค์‹œ๊ฐ„ WebGL ๊ฒŒ์ž„ ์—”์ง„, ์„œ๋“œํŒŒํ‹ฐ ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋งŽ์€ ์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์•ฑ ์„ฑ๋Šฅ ๊ฐœ์„  - **Contradictions/Notes:** ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ์ด ๋ฌด์กฐ๊ฑด์ ์ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ์„ ๊ฐ€์ ธ์˜ค์ง€๋Š” ์•Š์Šต๋‹ˆ๋‹ค. ์Šค๋ ˆ๋“œ ๊ฐ„์— ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ณผ์ •(Message passing)์—๋Š” ์ง๋ ฌํ™”๋กœ ์ธํ•œ ์˜ค๋ฒ„ํ—ค๋“œ(์•ฝ 5~10ms)๊ฐ€ ์ˆ˜๋ฐ˜๋ฉ๋‹ˆ๋‹ค. ์—ฐ์‚ฐ ์‹œ๊ฐ„์ด 50ms ๋ฏธ๋งŒ์ธ ๋น„๊ต์  ๊ฐ€๋ฒผ์šด ์ž‘์—…์„ ์›Œ์ปค๋กœ ๋ถ„๋ฆฌํ•˜๋ฉด ์˜คํžˆ๋ ค ํ†ต์‹  ๋น„์šฉ์ด ์—ฐ์‚ฐ ์‹œ๊ฐ„๋ณด๋‹ค ์ปค์ ธ ์„ฑ๋Šฅ์ด ํ•˜๋ฝํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์ฒ ์ €ํ•œ ํ”„๋กœํŒŒ์ผ๋ง์„ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณ‘๋ชฉ ๊ตฌ๊ฐ„์—๋งŒ ์„ ํƒ์ ์œผ๋กœ ์ ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. --- _Last updated: 2026-04-15_ - Raw Source: 00_Raw/2026-04-20/๊ณ ์„ฑ๋Šฅ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ React ์•ฑ ์•„ํ‚คํ…์ฒ˜.md ---