๋ฌธ์ ์ํฉ
ํ๋ฌํฐ ์น์ ๊ตฌํํ๋ ๋์ค ์ ๋๋ฉ์ด์ ํจ๊ณผ๊ฐ ๋๋ฌด ๋ฌด๊ฑฐ์ ๋ค. iOS์ ๊ฒฝ์ฐ animation์ ์ค ๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๊ณ์ฐ์ ์ฒ๋ฆฌํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์ ์์ด๋์ด๋ฅผ ์ป์ด isolated ๋ฅผ ์จ์ ๋ค๋ฅธ ์ค๋ ๋์์ ์์ ์ ๋๋ฆฌ๋ ค๊ณ ํ๋ค. ํ์ง๋ง ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ ์์ํ ๋ํ๋์ง ์์๊ณ ๋๋ฒ๊ทธ ๋ชจ๋๋ก ๋ค์ ์คํ์์ผ๋ณด๋...
ํ๋ฌํฐ ์น์ isolated๋ฅผ ์ง์ํ์ง ์๋๋ค๊ณ ํ๋ค....;;;;
์๋ฌด๋ฆฌ ๋ชจ๋ฐ์ผ๋ณด๋ค๋ ๋ ์ฌ์ฉํ๋ ํ๋ฌํฐ ์น์ด์ง๋ง ๋๋ถ๋ถ ํ๋ ์์ํฌ์์ ๊ฑฐ์ ํ์์ ์ผ๋ก ๋ค์ด๊ฐ๋ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ด ์๋๋ค๋๊ฒ ๋๋ฌด ์ด์ํด์ ๊ตฌ๊ธ๋ง์ ํด๋ณด์๋ค. ๋คํํ isolate๊ฐ ์๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ผ๋ก ๋ฉํฐํ๋ก์ธ์ฑ์ ๊ตฌํํ ์ ์์๋ค.
Flutter Web์์ ๋ฉํฐ ํ๋ก์ธ์ฑํ๊ธฐ
Flutter ์น์์ Isolate ์์ด ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ํ๊ณ ์ถ๋ค๋ฉด dart:html ํจํค์ง๋ฅผ ํตํด ํ ์ ์๋ค. ์๋ฐ์คํฌ๋ฆฝํธ์์๋ ๋ฉํฐ ํ๋ก์ธ์ฑ์ ์ํด Web Worker ๋ฅผ ์ฐ๊ณ ์๋๋ฐ html ํจํค์ง๋ ์ด๋ฌํ ์๋ฐ์คํฌ๋ฆฝํธ์ Webworker ๊ธฐ๋ฅ์ ํฌ์ฅํ์ฌ ๋คํธ๋ก ์ธ ์ ์๊ฒ ํด์ค๋ค. ์ฌ์ค์ ์์ค์ ์น์์ปค ๊ธฐ๋ฅ์ ์ฌ์ฉํ๋๊ฑฐ๋ ๊ฐ๊ธฐ ๋๋ฌธ์ ์๋์๋ฆฌ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋ ์๋ฐ์คํฌ๋ฆฝํธ์ ์น์์ปค๋ฅผ ์์์ผํ๋ค.
Swift ์ธ์ด์ฒ๋ผ ํ๋์ ์ฝ์ด์์ ๋ฉํฐ์ค๋ ๋ฉ์ ์ง์ํ๋ ๊ฒ๊ณผ ๋ฌ๋ฆฌ ๋คํธ์ ์์ค๋ ๋ ๋ค๋ฅธ ์ค๋ ๋๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋๋ฆฌ๊ธฐ ์ํด์๋ ์ด์ฉ ์ ์์ด ์ฝ์ด ํ๋๋ฅผ ๋ ์ฐ๊ฒ ๋๋ค. ๋ฉ์ธ ์ฝ์ด์ ๋ค๋ฅธ ์ฝ์ด ์ฌ์ด์ ํต์ ์ ์ด๋ฒคํธ ๋ฃจํ์ ์ํด ์ฒ๋ฆฌ๋๊ณ ๊ฐ ์ฝ์ด์ ์ค๋ ๋๋ ์์ปค๋ฅผ ํตํด ๋ง๋ค์ด์ง๋ค. ๊ทธ๋ฆฌ๊ณ ์์ปค๊ฐ์ ๋ฉ์ธ์ง ๊ตํ์ postMessage() ์ onMessage() ๋ฉ์๋๋ฅผ ํตํด ์ด๋ฃจ์ด์ง๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ Worker๋ฅผ ํ๋ฌํฐ์์ ๋์์ํค๊ธฐ ์ํด์๋ ๋คํธ์ Blob์ด๋ ๊ฐ์ฒด๊ฐ ํ์ํ๋ค. Blob(Binary Large Object)์ ์ด์์ ์ดํด๋ณด์๋ฉด ์น์์ ์ด์ง ๋ฐ์ดํฐ์ ํฐ ๋ฉ์ด๋ฆฌ๋ฅผ ํํํ๋ ๊ฐ์ฒด๋ก ๋ฉ๋ชจ๋ฆฌ ์์ ์ ์ฅ๋ ๋ฐ์ดํฐ์ ๋ฉ์ด๋ฆฌ ๊ทธ์์ฒด์ด๋ค.
Blob ๊ฐ์ฒด ๋ด๋ถ๋ฅผ ๋ค์ฌ๋ค๋ณด๋ฉด ์์ ๊ฐ์๋ฐ. ํ๋์ฉ ์ดํด๋ณด์๋ฉด ๋จผ์ Native("Blob") ์ด๋ ธํ ์ด์ ์ Dart๊ฐ JavaScript์ Worker ๊ฐ์ฒด์ ์ฐ๊ฒฐ๋๋๋ก ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ Blob ํด๋์ค๋ JavaScriptObject๋ฅผ ์์ํ์ฌ JavaScript์ ๊ธฐ๋ฅ์ ์ฐ๊ฒ ๋๋ค.
๋์ฌ๊ฒจ ๋ณผ์ ์ ์์ฑ์๋ก ํฉํ ๋ฆฌ๋ฅผ ์ด์ฉํด ์ฑ๊ธํค ์ฒ๋ฆฌ๋ฅผ ํด์ฃผ๊ณ ์๋ค๋ ์ ์ด๋ค. ๋ฐ๋ผ์ (revokeObjectUrl() ๋ฉ์๋๋ฅผ ํตํด) blob์ ๋ง๋ ๋ค๋ฉด ์ดํ ๋ฉ๋ชจ๋ฆฌ ํด์ ๊ฐ ์ค์ํ๋ค๋ ๊ฒ์ ์ ์ ์์๋ค.
์ ์ฝ๋๋ฅผ ํตํด ๊ฐ๋จํ ํ๋ฌํฐ์น ๋์์ฑ ๊ตฌํ์ ํด๋ณด์๋ค. ๋จผ์ Blob ์ ์์ฑํ๊ณ workerCode ๋ฌธ์์ด์ Web Worker์ ๊ธฐ๋ฅ์ ์ ์ํ๋ค. ์์ Blob์ด ๋ฉ๋ชจ๋ฆฌ ๋ฐ์ดํฐ ๋ฉ์ด๋ฆฌ ๊ทธ์์ฒด๋ผ๊ณ ํ๋๋ฐ ์๋ฐ์คํฌ๋ฆฝํธ๋ก ์์ฑํ ๋ก์ง์ ๋ด๊ณ ๋์ค์ ์ด ๋ก์ง์ ์คํฌ๋ฆฝํธ์ฒ๋ผ ๋์์ํค๋ ๋ฐฉ์์ผ๋ก ์งํ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ ๋ฌธ๋ฒ์ผ๋ก ์์ฑ๋ "๋ฐ์ดํฐ"๋ฅผ ์คํ์ํค๊ธฐ ์ํด์๋ ์ด๋์๋ ๋ฐ์ดํฐ์ธ์ง ์ฐพ๊ธฐ ์ํด ์์น๋ฅผ ์์์ผํ๋๋ฐ ์ด๋ฅผ URL์ด ๋งก๋๋ค. URL์ ์์ฑํ๋ฉด, ํด๋น ๋ฐ์ดํฐ์ ์ ๊ทผํ ์ ์๋ ์ฃผ์๋ฅผ ์์๋ก ์์ฑํ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. URL์ ์น ํ์ด์ง๋ ๋ค๋ฅธ ์ฝ๋์์ Blob ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ์ฐ๊ฒฐํ๋ ๋ค๋ฆฌ ์ญํ ์ ํ๋ค.
๊ฒฐ๊ณผ์ ์ผ๋ก JavaScript ์ฝ๋๋ฅผ Blob์ ์ ์ฅํ๊ณ URL.createObjectURL๋ก URL์ ์์ฑํ๋ฉด, Worker๊ฐ ์ธ๋ถ ํ์ผ ๋์ ์ด URL์ ํตํด Blob ๋ฐ์ดํฐ๋ฅผ ์คํฌ๋ฆฝํธ์ฒ๋ผ ๋ถ๋ฌ์ ๋ค๋ฅธ ์ค๋ ๋์์ ์์ ์ ํ๊ฒ๋๋ ๊ตฌ์กฐ์ธ ๊ฒ์ด๋ค..
์ฌ์ฉํ์๋ URL.revokeObjectURL ๋ฉ์๋๋ฅผ ํตํด ๋ ์ด์ ์ฌ์ฉํ์ง ์๋ Blob URL์ ํด์ ํ์ฌ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ๋ค.
์ ์ฝ๋๋ฅผ ์คํ์ํค๋ฉด Hello from Worker: Hello Worker! ๋ก ์ฐํ ๋์์ฑ ํ๋ก๊ทธ๋๋ฐ์ ํ์ธํ ์ ์๋ค.