SQLite๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ DBMS๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ WASM ์ง€์›์„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€