์ด ๋ฌธ์„œ์˜ ์›๋ณธ์€ ์™ธ๋ถ€ ์œ„ํ‚ค์—์„œ ๊ฐ€์ ธ์™”์Šต๋‹ˆ๋‹ค.
1. ๊ฐœ์š”2. ๋น„์Šทํ•œ ๋ชฉ์ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค3. ํŒŒ์ƒ ํ”„๋กœ์ ํŠธ


๊ณต์‹ ํ™ˆํŽ˜์ด์ง€

1. ๊ฐœ์š”[ํŽธ์ง‘]

SQLite๋Š” ํด๋ผ์ด์–ธํŠธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— ์ž„๋ฒ ๋””๋“œ๋˜์–ด ๋™์ž‘ํ•˜๋Š” ์˜คํ”ˆ ์†Œ์Šค DBMS์˜ ์ผ์ข…์ด๋‹ค. ์•ˆ๋“œ๋กœ์ด๋“œ, iOS, macOS์— ๊ธฐ๋ณธ์ ์œผ๋กœ ํฌํ•จ๋˜์–ด ์žˆ๋‹ค. ๊ณต์‹์ ์ธ ์•ฝ์นญ์€ ์•„๋‹ˆ์ง€๋งŒ ์•ฝ์นญ์€ SQL + Lite(Light).[1]

๊ทธ๋ž˜์„œ SQL์—์„œ ํ•˜๋Š” ๊ธฐ๋Šฅ์ด SQLite์—์„  '๊ฒฝ๋Ÿ‰ํ™”'์˜ ์ด์œ ๋กœ ์ œํ•œ๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์ž๋ฉด, ํ”„๋กœํ† ์ฝœ ์กฐ์ž‘์„ ํ†ตํ•ด ๋„คํŠธ์›Œํฌ์— ์ ‘๊ทผํ•  ์ˆ˜๋Š” ์žˆ์ง€๋งŒ, ๋™์‹œ ์ ‘๊ทผ์€ ์ œํ•œ๋œ๋‹ค. ๋˜ํ•œ ๋ณต์žกํ•˜๊ฑฐ๋‚˜ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ด€ํ•˜๋Š” ๋ฐ์—๋Š” ์ ์ ˆํ•˜์ง€ ์•Š๋‹ค. ์ธ์ฝ”๋”ฉ ์—ญ์‹œ ์œ ๋‹ˆ์ฝ”๋“œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ์‚ฌ์šฉ ์ธ์ฝ”๋”ฉ์ด ์œ ๋‹ˆ์ฝ”๋“œ๊ฐ€ ์•„๋‹Œ ๊ฒฝ์šฐ์—๋Š” ๅ ์™์˜™์„ ์ž”๋œฉ ๋ง›๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์‚ฌ์‹ค ๊ฐœ๋ฐœ ๋‹น์‹œ๋ถ€ํ„ฐ ์ด์ง€์Šคํ•จ์—์„œ ๊ตฌ๋™๋˜๋˜ ํƒ“[2]์— ์ž์งˆ๊ตฌ๋ ˆํ•œ ๊ธฐ๋Šฅ์€ ์›๋ž˜๋ถ€ํ„ฐ ์ œ๊ฑฐ๋˜์–ด ์žˆ์—ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๋Ÿฐ์ง€ ํ˜„์žฌ๋Š” ํผ๋ธ”๋ฆญ ๋„๋ฉ”์ธ์œผ๋กœ ํ’€๋ฆฐ ์ƒํƒœ.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ „์ฒด๋ฅผ ํŒŒ์ผ ํ•˜๋‚˜์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ํŒŒ์ผ์„ ํ†ต์งธ๋กœ ๋ณต์‚ฌํ•˜๋ฉด ๋ฐฑ์—…์ด ๋๋‚œ๋‹ค. ๋˜ํ•œ ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด์—์„œ ๊ตฌ๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๋”ฐ๋กœ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์“ฐ์ง€ ์•Š์•„๋„ ํ”„๋กœ๊ทธ๋žจ์— ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋งŒ ํฌํ•จ์‹œ์ผœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํ‘œ์ค€ SQL ๋ฌธ๋ฒ•์„ ์ง€์›ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋”ฐ๋กœ ํ•™์Šตํ•ด์•ผ ํ•˜๋Š” ๊ฒƒ๋„ ๋ณ„๋กœ ์—†๋‹ค. ๋‹ค๋งŒ ์„ฑ๋Šฅ์€ '๋ผ์ดํŠธ'์— ๋งž๊ฒŒ ์—ดํ™”๋˜์—ˆ์œผ๋ฏ€๋กœ, ๊ทธ๋ฆฌ ํฐ ๊ธฐ๋Œ€๋Š” ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹๋‹ค.

ํ•œ ๋ฒˆ์— ํ•œ ๋ช…์˜ ์‚ฌ์šฉ์ž๋งŒ์ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ฉ€ํ‹ฐ ์œ ์ €๋ฅผ ์ง€์›ํ•˜๋ ค๋ฉด ํ”„๋ก์‹œ ๊ณ„์ธต์„ ๋„์ž…ํ•ด์•ผ ํ•œ๋‹ค. ๋ฉ€ํ‹ฐํ…Œ๋„ŒํŠธ ๋ถ„์‚ฐ๋„ ์ง€์›ํ•˜์ง€ ์•Š๊ณ  ๊ธฐ๊ฐ€ ๋‹จ์œ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๊ธฐ์—๋„ ์˜ ์ข‹์ง€ ์•Š๋‹ค. ์ด ์ •๋„๋กœ ํฌ๊ณ  ๋ฌด๊ฑฐ์šด ํ™˜๊ฒฝ์—๋Š” ๋‹ค๋ฅธ DBMS ์ œํ’ˆ(MariaDB ๋“ฑ)์„ ์„ ํƒํ•ด์•ผ ํ•œ๋‹ค. SQLite๋Š” '์ž„๋ฒ ๋””๋“œ SQL ์ง€์› ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค'์— ํŠนํ™”๋ผ์žˆ๋‹ค. ๊ฐ„๋‹จํ•œ ๋ฃฉ์—… ํ…Œ์ด๋ธ” ๊ตฌํ˜„์œผ๋กœ ๋ฒ„ํ‹ฐ๊ธฐ์—๋Š” ๋ฌด๋ฆฌ๊ฐ€ ์žˆ์ง€๋งŒ ๊ทธ๋ ‡๋‹ค๊ณ  ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋„์ž…ํ•ด์•ผ ํ•  ์ •๋„๋กœ ๊ฑฐ๋Œ€ํ•˜์ง€๋Š” ์•Š์€, ์–ด์ค‘๊ฐ„ํ•˜๊ฒŒ ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค๋ฃจ๋Š” ๋ฐ์— ์“ฐ๊ธฐ ์ข‹๋‹ค. ๋งŒ์•ฝ ํ…Œ์ด๋ธ” ์กฐ์ธ(Join)์„ ์ž์ฃผ ์จ์•ผ ํ•œ๋‹ค๊ฑฐ๋‚˜ ๋‘ ๊ฐœ ์ด์ƒ์˜ ํ•„๋“œ์— ๋Œ€ํ•ด ๋น ๋ฅธ ๊ฒ€์ƒ‰์ด ํ•„์š”ํ•˜๋ฉด ๋ฃฉ์—… ํ…Œ์ด๋ธ” ๊ตฌํ˜„[3]์œผ๋กœ ๊ณจ์น˜์ฉ์ง€ ๋ง๊ณ  SQLite๋ฅผ ๋„์ž…ํ•˜๋Š” ๊ฒŒ ๋‚˜์„ ์ˆ˜๋„ ์žˆ๋‹ค.

๋‹ค๋งŒ ๋ฃฉ์—… ํ…Œ์ด๋ธ” ๊ตฌํ˜„๋ณด๋‹ค ์„ฑ๋Šฅ์ด ๋งŽ์ด ์ €ํ•˜๋˜๋Š”๋ฐ SQLํŒŒ์„œ๊ฐ€ ๊นŒ๋จน๋Š” ์„ฑ๋Šฅ์ด ์ œ๋ฒ• ๋œ๋‹ค. ์ธ๋ฑ์Šค ๊ฒ€์ƒ‰ ์†๋„ ์—ญ์‹œ ๋ฃฉ์—… ํ…Œ์ด๋ธ”์€ ๋ณดํ†ต ํ•ด์‹œ ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์‚ฌ์šฉํ•ด์„œ O(1)์ด์ง€๋งŒ SQLite์˜ ์ธ๋ฑ์Šค๋Š” B-Tree ํƒ์ƒ‰ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋ผ O(log n)์˜ ์„ฑ๋Šฅ์œผ๋กœ ๋–จ์–ด์ง„๋‹ค.[4] ๋˜ํ•œ ๋ฃฉ์—… ํ…Œ์ด๋ธ”์€ ์ „์ฒด๊ฐ€ ๋ฉ”๋ชจ๋ฆฌ์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š” ๋ฐ˜๋ฉด์— SQLite๋Š” ํŒŒ์ผ ์ž‘์—…์ด ๋“ค์–ด๊ฐ€๋ฏ€๋กœ ์—ฌ๊ธฐ์„œ ์„ฑ๋Šฅ์„ ๋˜ ๋Œ€ํญ ๊นŒ๋จน๋Š”๋‹ค. ๋”ฐ๋ผ์„œ ๋Œ€๊ทœ๋ชจ ๋ฐฐ์น˜ ์žก(Batch job)์— SQLite๋Š” ์ข‹์€ ์„ ํƒ์ด ์•„๋‹ˆ๋‹ค.[5]

๊ตฌํ˜„ ์ž์ฒด๋Š” C/C++๋กœ ๋˜์–ด ์žˆ์œผ๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ด๋ฏธ ์ˆ˜๋งŽ์€ ์–ธ์–ด๋กœ ๋‚˜์™”๊ธฐ ๋•Œ๋ฌธ์—, C# ๋“ฑ ์ธ์ง€๋„๊ฐ€ ์žˆ๋Š” ์–ธ์–ด๋กœ ๊ตฌํ˜„ํ•  ๋•Œ์—๋Š” ์„œ๋“œํŒŒํ‹ฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒฝ๋Ÿ‰ ๊ตฌํ˜„์ธ ํƒ“์— ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์˜์กด๋„๊ฐ€ ๋‚ฎ์•„ ๊ฑฐ์˜ C ์ปดํŒŒ์ผ๋Ÿฌ๋งŒ ์žˆ์œผ๋ฉด ๋นŒ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•œ ์ˆ˜์ค€์ด๋‹ค.[6] ๋˜ํ•œ SQLite ํ™ˆํŽ˜์ด์ง€์— ๊ฐ€๋ฉด ์•„๋ง๊ฐ๋ฒ„์ „์ด ์žˆ๋Š”๋ฐ ๋‹ค์šด๋ฐ›์•„ ์—ด์–ด๋ณด๋ฉด ์†Œ์Šค ์ฝ”๋“œ 2๊ฐœ์™€ ํ—ค๋” ํŒŒ์ผ 2๊ฐœ๋งŒ ๋‹ฌ๋ž‘ ์žˆ๋Š” ์‹ฌํ”Œํ•œ ๊ตฌ์„ฑ์„ ์ž๋ž‘ํ•œ๋‹ค. ๊ทธ ์ค‘ ํ•˜๋‚˜๋Š” ์‰˜ ์ฝ”๋“œ์ด๋ฏ€๋กœ ์ฝ”์–ด ํŒŒ์ผ๋งŒ ํ•„์š”ํ•˜๋ฉด sqlite3.c ์™€ sqlite3.h ํŒŒ์ผ ๋‘ ๊ฐœ๋งŒ ํ”„๋กœ์ ํŠธ์— ๋ณต์‚ฌํ•ด ๋†“์œผ๋ฉด ๋์ด๋‹ค. ๋ฌผ๋ก  ์•„๋ง๊ฐ ๋ฒ„์ „์€ ์ฝ”๋“œ๋ฅผ ๋ฒˆ๋“ค๋งํ•ด๋†“์€ ๊ฒƒ์ด๊ณ  ์‹ค์ œ ๊ฐœ๋ฐœ์šฉ ์†Œ์Šค ์ฝ”๋“œ๋Š” ๋งŽ์€ ์ˆ˜์˜ ํŒŒ์ผ๋กœ ๋˜์–ด ์žˆ๋‹ค.[7] ๋‹คํ–‰ํžˆ ๋ฒˆ๋“ค๋งํ•˜๋ฉด์„œ ๋‚œ๋…ํ™”๋ฅผ ํ•˜์ง€๋Š” ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฃผ์„๋„ ์ œ๋Œ€๋กœ ๋‹ฌ๋ ค ์žˆ๊ณ  ๋“ค์—ฌ์“ฐ๊ธฐ๋„ ์ •์ƒ์ ์œผ๋กœ ๋˜์–ด ์žˆ๋‹ค.

์•”ํ˜ธํ™” ๋ชจ๋“ˆ์ธ SEE(SQLite Encryption Extension)๊ฐ€ ๊ณต์‹ SQLite ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์ธ๋ฐ ์ด๊ฒƒ์€ ์ƒ์šฉ ํ”„๋กœ๊ทธ๋žจ์ด๋ผ ๋ฌด๋ฃŒ ์„œ๋“œํŒŒํ‹ฐ ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์ด ๋‚˜์™€ ์žˆ๋‹ค. ๋‹ค๋งŒ ์•”ํ˜ธํ™”๋ฅผ ์ ์šฉํ•œ ์ฝ”๋“œ๋ฅผ ๋ฐฐํฌํ•˜๋Š” ๊ฒƒ์€ ๋ผ์ด์„ผ์Šค ์œ„๋ฐ˜์ด๋ฏ€๋กœ ํ•ด๋‹น ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์˜ ํ™ˆํŽ˜์ด์ง€์—๋Š” ์ฝ”๋“œ ํŒจ์น˜ ๋ฐ ๋นŒ๋“œ ๋ฐฉ๋ฒ•์„ ๋ฌธ์„œ๋กœ ์•ˆ๋‚ดํ•˜๊ณ  ์žˆ๋‹ค. ์ตœ์ข… ์‚ฌ์šฉ์ž๊ฐ€ ์ง์ ‘ ์ฝ”๋“œ๋ฅผ ํŒจ์น˜ํ•ด์„œ ๋นŒ๋“œํ•˜๋Š” ๊ฒƒ์€ ํ•ฉ๋ฒ•์ด๋‹ค. ํŒจ์น˜ ๋ฐฉ๋ฒ•๋„ ๊ฐ„๋‹จํ•œ ํŽธ์ธ๋ฐ sqlite3์˜ ์†Œ์Šค ์ฝ”๋“œ์— ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์„ ์œ„ํ•œ ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ๋…ธ์ถœ๋ผ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ฐ„๋‹จํžˆ ์•”ํ˜ธํ™” ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•œ๋‹ค๋Š” ์Šค์œ„์น˜๋ฅผ ์ผœ ์ฃผ๊ณ  ํ•„์š”ํ•œ ํ•จ์ˆ˜๋“ค(5๊ฐœ ์ •๋„)์„ ๊ตฌํ˜„ํ•ด ์ฃผ๋ฉด ์•”ํ˜ธํ™”๊ฐ€ ์ ์šฉ๋œ๋‹ค. ๋‹ค์„ฏ ๊ฐœ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค๊ณ  ํ–ˆ์ง€ ๊ทธ ๋‹ค์„ฏ ๊ฐœ ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒŒ ์‰ฝ๋‹ค๊ณ ๋Š” ์•ˆ ํ–ˆ๋‹ค

2. ๋น„์Šทํ•œ ๋ชฉ์ ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค[ํŽธ์ง‘]

  • Microsoft SQL Server Compact Edition, Local DB: MFC ๋ฐ .NET ๊ณ„์—ด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ
  • Firebird Embedded Server: Delphi ๋“ฑ ํŒŒ์Šค์นผ ๊ณ„์—ด์˜ ์–ธ์–ด์—์„œ ์ฃผ๋กœ ์‚ฌ์šฉ
  • H2, HSQL, Apache Derby: JVM ํ™˜๊ฒฝ์—์„œ ์‚ฌ์šฉ๊ฐ€๋Šฅํ•œ ๋‹จ์ผ ํŒŒ์ผ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

3. ํŒŒ์ƒ ํ”„๋กœ์ ํŠธ[ํŽธ์ง‘]

[1] ๊ทธ๋ž˜์„œ ๋ณดํ†ต ์—์Šคํ์—˜+๋ผ์ดํŠธ ๋ผ๊ณ  ์ฝ๋Š”๋‹ค.
[2] General Dynamics์—์„œ ๊ทผ๋ฌดํ•˜๋ฉด์„œ ๋ฏธ์‚ฌ์ผ ๊ตฌ์ถ•ํ•จ์—์„œ ์‚ฌ์šฉํ•  ๋ฏธ ํ•ด๊ตฐ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ”„๋กœ์ ํŠธ์— ์ฐธ์—ฌํ•œ ๋ฆฌ์ฐจ๋“œ ํž™(Richard Hipp) ๋ฐ•์‚ฌ๊ฐ€ ์ตœ์ดˆ๋กœ ๊ฐœ๋ฐœํ•˜์˜€๋‹ค.
[3] ์ž๋ฐ”์˜ HashMap, ํŒŒ์ด์ฌ์˜ ๋”•์…”๋„ˆ๋ฆฌ ๋“ฑ
[4] ๋ฃฉ์—… ํ…Œ์ด๋ธ” ๊ตฌํ˜„์ด ๋ฏธ์ˆ™ํ•ด์„œ ์„ ํ˜• ํƒ์ƒ‰(๋ฆฌ๋‹ˆ์–ด ์„œ์น˜) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์“ฐ๊ณ  ์žˆ๋‹ค๋ฉด O(n)์ด๋ผ๋Š” ์ฒ˜์ฐธํ•œ ์„ฑ๋Šฅ์ด ๋‚˜์˜ค๋ฏ€๋กœ ์ด ๊ฒฝ์šฐ์—๋Š” SQLite๊ฐ€ ํ›จ์”ฌ ๋น ๋ฅด๋‹ค.
[5] ๋น… ๋ฐ์ดํ„ฐ ํ”„๋กœ์„ธ์‹ฑ์šฉ ํ…Œ์ด๋ธ” ๋ฃฉ์—… ์ž‘์—…์—๋Š” Redis/Memcached๋ฅผ ๊ณ ๋ คํ•˜์ž.
[6] pthread์™€ dl๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์š”๊ตฌํ•˜๋Š”๋ฐ ์ด ๋‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋Š” ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๊ตฌํ˜„, ๋‹ค์ด๋‚˜๋ฏน ๋ง์ปค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ์„œ ์šด์˜์ฒด์ œ์˜ ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋‹ค.
[7] ์•„๋ง๊ฐ ๋ฒ„์ „์˜ sqlite3.c ํŒŒ์ผ์€ ๋ฌด๋ ค 211,864๋ผ์ธ์ด๋‚˜ ๋œ๋‹ค. ์ƒ์‹์ ์œผ๋กœ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ด๋Ÿฐ ๋ฌด์‹ํ•˜๊ฒŒ ํฐ ํŒŒ์ผ๋กœ ๊ฐœ๋ฐœํ•˜๊ธด ์–ด๋ ต๋‹ค.