SQLite ๊ฐ๋ฐ์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์น ๋ธ๋ผ์ฐ์ ์์ ์คํํ ์ ์๊ณ JavaScript์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์์ ์ ๊ตฌ์ฑํ๋ ๋ฐ ์ ํฉํ WebAssembly ์ค๊ฐ ์ฝ๋๋ก ์ปดํ์ผํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๊ณ ์์ต๋๋ค. WebAssembly๋ฅผ ์ง์ํ๋ ์ฝ๋๊ฐ ๊ธฐ๋ณธ ํ๋ก์ ํธ ์ ์ฅ์์ ์ถ๊ฐ๋์์ต๋๋ค. SQLite๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋ WebSQL API์ ๋ฌ๋ฆฌ WASM SQLite๋ ๋ธ๋ผ์ฐ์ ์์ ์์ ํ ๊ฒฉ๋ฆฌ๋์ด ๋ณด์์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค. (Google์ SQLite์ ์ฌ๋ฌ ์ทจ์ฝ์ ์ด WebSQL์ ํตํด ์ ์ฉ๋์ด ๋ธ๋ผ์ฐ์ ๋ฅผ ๊ณต๊ฒฉํ ์ ์์ผ๋ฏ๋ก Chrome์์ WebSQL์ ๋ํ ์ง์์ ์ค๋จํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.) .
์ด ํ๋ก์ ํธ์ ๋ชฉํ๋ SQLite API์ ๊ธฐ๋ฅ์ด ๋์ผํ๊ฒ ์๋ํ๋ JavaScript ํ๋ ์์ํฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์น ๊ฐ๋ฐ์์๊ฒ๋ sql.js ๋๋ Node.js ์คํ์ผ์ ๋ฐ์ดํฐ ์์ ์ ์ํ ๋์ ์์ค์ ๊ฐ์ฒด ์งํฅ ์ธํฐํ์ด์ค, ๋ฎ์ ์์ค์ C API์ ๋ํ ๋ฐ์ธ๋ฉ ๋ฐ Web Worker ๋ฉ์ปค๋์ฆ ๊ธฐ๋ฐ์ API๊ฐ ์ ๊ณต๋ฉ๋๋ค. ๋ณ๋์ ์ค๋ ๋์์ ์คํ๋๋ ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ธฐ๋ฅผ ๋ง๋ค ์ ์์ต๋๋ค. Web Worker ๊ธฐ๋ฐ API ์์ ์คํธ๋ฆผ์ ์ฌ์ฉํ์ฌ ์์ ์ ๊ตฌ์ฑํ๋ ๋ณต์ก์ฑ์ ์จ๊ธฐ๊ธฐ ์ํด Promise ๋ฉ์ปค๋์ฆ์ ๊ธฐ๋ฐ์ผ๋ก ํ๋ ํ๋ก๊ทธ๋จ ์ธํฐํ์ด์ค ๋ฒ์ ๋ ๊ฐ๋ฐ ์ค์ ๋๋ค.
์น ์ ํ๋ฆฌ์ผ์ด์ ์ด SQLite์ WASM ๋ฒ์ ์ ์ ์ฅํ๋ ๋ฐ์ดํฐ๋ ํ์ฌ ์ธ์ ๋ด์์ ์ง์ญํ๋๊ฑฐ๋(ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ ํ ์์ค๋จ) ํด๋ผ์ด์ธํธ ์ธก์ ์ ์ฅ๋ ์ ์์ต๋๋ค(์ธ์ ๊ฐ์ ์ ์ฅ๋จ). ์๊ตฌ ์ ์ฅ์ ์ํด ๋ฐฑ์๋๋ OPFS(ํ์ผ ์์คํ ์ก์ธ์ค API์ ํ์ฅ์ธ Origin-Private FileSystem, ํ์ฌ WebKit ๋ฐ Chromium ๊ธฐ๋ฐ ๋ธ๋ผ์ฐ์ ์์๋ง ์ฌ์ฉํ ์ ์์)๋ฅผ ์ฌ์ฉํ์ฌ ๋ก์ปฌ ํ์ผ ์์คํ ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์นํ๊ณ ๋ก์ปฌ ๋ธ๋ผ์ฐ์ ์ ์ฅ์ ๊ธฐ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฐ์นํ๊ธฐ ์ํด ์ค๋น๋์์ต๋๋ค. window.localStorage API ๋ฐ window.sessionStorage์์. localStorage/sessionStorage ์ฌ์ฉ ์ ํด๋น ์คํ ์ด์ ํค/๊ฐ ํ์์ผ๋ก ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋๋ฉฐ, OPFS ์ฌ์ฉ ์์๋ WASMFS๋ฅผ ์ด์ฉํ ๊ฐ์ FS ์๋ฎฌ๋ ์ด์ ๊ณผ sqlite3_vfs์ ๋ณ๋ ๊ตฌํ, SQLite VFS ๋ ์ด์ด ๊ธฐ๋ฐ ์ ๊ณต์ด๋ผ๋ ๋ ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค. OPFS์.
SQLite๋ฅผ WASM ๋ณด๊ธฐ๋ก ๋น๋ํ๋ ค๋ฉด Emscripten ์ปดํ์ผ๋ฌ๊ฐ ์ฌ์ฉ๋ฉ๋๋ค(ext/wasm ํ์ฅ์ ๋น๋ํ๋ ๊ฒ์ผ๋ก ์ถฉ๋ถํฉ๋๋ค: "./configure โenable-all; make sqlite3.c; cd ext/wasm; make"). ์ถ๋ ฅ์ JavaScript ํ๋ก์ ํธ(HTML ๋ฐ JavaScript ์์ )์ ํฌํจ๋ ์ ์๋ sqlite3.js ๋ฐ sqlite3.wasm ํ์ผ์
๋๋ค.
์ถ์ฒ : opennet.ru