SQLite 3.40 ๋ฆด๋ฆฌ์Šค

ํ”Œ๋Ÿฌ๊ทธ์ธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ์„ค๊ณ„๋œ ๊ฒฝ๋Ÿ‰ DBMS์ธ SQLite 3.40์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. SQLite ์ฝ”๋“œ๋Š” ๊ณต๊ฐœ ๋„๋ฉ”์ธ์— ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์–ด๋–ค ๋ชฉ์ ์œผ๋กœ๋“  ์ œํ•œ ์—†์ด ๋ฌด๋ฃŒ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. SQLite ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์žฌ์ •์  ์ง€์›์€ Adobe, Oracle, Mozilla, Bentley ๋ฐ Bloomberg์™€ ๊ฐ™์€ ํšŒ์‚ฌ๋ฅผ ํฌํ•จํ•˜๋Š” ํŠน๋ณ„ํžˆ ๊ตฌ์„ฑ๋œ ์ปจ์†Œ์‹œ์—„์—์„œ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ฃผ์š” ๋ณ€๊ฒฝ ์‚ฌํ•ญ :

  • SQLite๋ฅผ ์›น ๋ธŒ๋ผ์šฐ์ €์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  JavaScript ์–ธ์–ด๋กœ ๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ๊ตฌ์„ฑํ•˜๋Š” ๋ฐ ์ ํ•ฉํ•œ ์ค‘๊ฐ„ WebAssembly ์ฝ”๋“œ๋กœ ์ปดํŒŒ์ผํ•˜๋Š” ์‹คํ—˜์  ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค. ์›น ๊ฐœ๋ฐœ์ž์—๊ฒŒ๋Š” sql.js ๋˜๋Š” Node.js ์Šคํƒ€์ผ์˜ ๋ฐ์ดํ„ฐ ์ž‘์—…์„ ์œ„ํ•œ ๊ณ ์ˆ˜์ค€ ๊ฐ์ฒด ์ง€ํ–ฅ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ ์ €์ˆ˜์ค€ C API ๋ฐ Web Worker ๋ฉ”์ปค๋‹ˆ์ฆ˜์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋Š” API๋ฅผ ๋ž˜ํ•‘ํ•˜์—ฌ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์—์„œ ์‹คํ–‰๋˜๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ธฐ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด SQLite์˜ WASM ๋ฒ„์ „์— ์ €์žฅํ•˜๋Š” ๋ฐ์ดํ„ฐ๋Š” OPFS(Origin-Private FileSystem) ๋˜๋Š” window.localStorage API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก์— ์ €์žฅํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์†์ƒ๋œ ํŒŒ์ผ์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณต๊ตฌํ•˜๋„๋ก ์„ค๊ณ„๋œ ๋ณต๊ตฌ ํ™•์žฅ ํ”„๋กœ๊ทธ๋žจ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค๋Š” ".recover" ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฟผ๋ฆฌ ํ”Œ๋ž˜๋„ˆ ์„ฑ๋Šฅ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์—ด์ด 63๊ฐœ ์ด์ƒ์ธ ํ…Œ์ด๋ธ”์ด ์žˆ๋Š” ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ œํ•œ์ด ์ œ๊ฑฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ด์ „์—๋Š” ์„œ์ˆ˜๊ฐ€ 63์„ ์ดˆ๊ณผํ•˜๋Š” ์—ด์ด ์žˆ๋Š” ์ž‘์—…์— ์ธ๋ฑ์‹ฑ์ด ์ ์šฉ๋˜์ง€ ์•Š์Œ). ํ‘œํ˜„์‹์— ์‚ฌ์šฉ๋˜๋Š” ๊ฐ’์˜ ์ธ๋ฑ์‹ฑ์ด ํ–ฅ์ƒ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. NOT NULL ๋ฐ IS NULL ์—ฐ์‚ฐ์ž๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋””์Šคํฌ์—์„œ ํฐ ๋ฌธ์ž์—ด ๋ฐ BLOB ๋กœ๋“œ๋ฅผ ์ค‘์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. ์ „์ฒด ์Šค์บ”์ด ํ•œ ๋ฒˆ๋งŒ ์ˆ˜ํ–‰๋˜๋Š” ๋ทฐ์˜ ๊ตฌ์ฒดํ™”๋Š” ์ œ์™ธ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ฝ”๋“œ๋ฒ ์ด์Šค์—์„œ "char *" ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜๋Š” ๋Œ€์‹  ๋ณ„๋„์˜ sqlite3_filename ์œ ํ˜•์„ ์‚ฌ์šฉํ•˜์—ฌ ํŒŒ์ผ ์ด๋ฆ„์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.
  • sqlite3_value_encoding() ๋‚ด๋ถ€ ํ•จ์ˆ˜๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ์ง€ ์Šคํ‚ค๋งˆ ๋ฒ„์ „ ๋ณ€๊ฒฝ์„ ๊ธˆ์ง€ํ•˜๋Š” SQLITE_DBCONFIG_DEFENSIVE ๋ชจ๋“œ๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • "PRAGMA integrity_check" ๋งค๊ฐœ๋ณ€์ˆ˜์˜ ๊ตฌํ˜„์— ์ถ”๊ฐ€ ๊ฒ€์‚ฌ๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด STRICT ์†์„ฑ์ด ์—†๋Š” ํ…Œ์ด๋ธ”์€ TEXT ์—ด์˜ ์ˆซ์ž ๊ฐ’๊ณผ NUMERIC ์—ด์˜ ์ˆซ์ž๊ฐ€ ์žˆ๋Š” ๋ฌธ์ž์—ด ๊ฐ’์„ ํฌํ•จํ•ด์„œ๋Š” ์•ˆ ๋ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ "WITHOUT ROWID" ์†์„ฑ์ด ์žˆ๋Š” ํ…Œ์ด๋ธ”์˜ ํ–‰ ์ˆœ์„œ์˜ ์ •ํ™•์„ฑ์„ ํ™•์ธํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • "VACUUM INTO" ํ‘œํ˜„์€ "PRAGMA ๋™๊ธฐ์‹" ์„ค์ •์„ ๋”ฐ๋ฆ…๋‹ˆ๋‹ค.
  • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•  ๋•Œ ๋ธ”๋ก ํฌ๊ธฐ๋ฅผ ์ œํ•œํ•˜๋Š” ๋นŒ๋“œ ์˜ต์…˜ SQLITE_MAX_ALLOCATION_SIZE๋ฅผ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.
  • SQLite์— ๋‚ด์žฅ๋œ ์˜์‚ฌ ๋‚œ์ˆ˜ ์ƒ์„ฑ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด RC4 ์ŠคํŠธ๋ฆผ ์•”ํ˜ธ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์—์„œ Chacha20์œผ๋กœ ์ด๋™๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋ฐ์ดํ„ฐ ์Šคํ‚ค๋งˆ์—์„œ ๋™์ผํ•œ ์ด๋ฆ„์˜ ์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๋ฐ˜์ ์ธ ํ™œ๋™ ์ค‘์— CPU์˜ ๋ถ€ํ•˜๋ฅผ ์•ฝ 1% ์ค„์ด๊ธฐ ์œ„ํ•ด ์„ฑ๋Šฅ ์ตœ์ ํ™”๊ฐ€ ์ด๋ฃจ์–ด์กŒ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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