SQLite ๊ธฐ๋ฐ˜ ๋ถ„์‚ฐ ๋‚ด๊ฒฐํ•จ์„ฑ DBMS์ธ rqlite 7.0 ์ถœ์‹œ

SQLite๋ฅผ ์Šคํ† ๋ฆฌ์ง€ ์—”์ง„์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ  ์„œ๋กœ ๋™๊ธฐํ™”๋œ ์Šคํ† ๋ฆฌ์ง€์—์„œ ํด๋Ÿฌ์Šคํ„ฐ ์ž‘์—…์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„์‚ฐ DBMS rqlite 7.0์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. rqlite์˜ ๊ธฐ๋Šฅ ์ค‘ ํ•˜๋‚˜๋Š” etcd ๋ฐ Consul๊ณผ ๋‹ค์†Œ ์œ ์‚ฌํ•˜์ง€๋งŒ ํ‚ค/๊ฐ’ ํ˜•์‹ ๋Œ€์‹  ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ„์‚ฐ ๋‚ด๊ฒฐํ•จ์„ฑ ์Šคํ† ๋ฆฌ์ง€์˜ ์„ค์น˜, ๋ฐฐํฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๊ฐ€ ์‰ฝ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ์ฝ”๋“œ๋Š” Go๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ MIT ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค.

๋ชจ๋“  ๋…ธ๋“œ๋ฅผ ๋™๊ธฐํ™”๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด Raft ํ•ฉ์˜ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. Rqlite๋Š” ์›๋ณธ SQLite ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์™€ go-sqlite3 ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์‚ฌ์šฉํ•˜๋ฉฐ, ๊ทธ ์œ„์— ํด๋ผ์ด์–ธํŠธ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ๋‹ค๋ฅธ ๋…ธ๋“œ์— ๋Œ€ํ•œ ๋ณต์ œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉฐ ์„ ๋‘ ๋…ธ๋“œ ์„ ํƒ์— ๋Œ€ํ•œ ํ•ฉ์˜ ๋‹ฌ์„ฑ์„ ๋ชจ๋‹ˆํ„ฐ๋งํ•˜๋Š” ๊ณ„์ธต์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์€ ๋ฆฌ๋”๋กœ ์„ ํƒ๋œ ๋…ธ๋“œ์— ์˜ํ•ด์„œ๋งŒ ์ด๋ฃจ์–ด์งˆ ์ˆ˜ ์žˆ์ง€๋งŒ ์“ฐ๊ธฐ ์ž‘์—…์ด ํฌํ•จ๋œ ์—ฐ๊ฒฐ์€ ํด๋Ÿฌ์Šคํ„ฐ์˜ ๋‹ค๋ฅธ ๋…ธ๋“œ๋กœ ์ „์†ก๋  ์ˆ˜๋„ ์žˆ์œผ๋ฉฐ, ์ด๋Š” ์š”์ฒญ์„ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ๋ฆฌ๋”์˜ ์ฃผ์†Œ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค(๋‹ค์Œ ๋ฒ„์ „์—์„œ๋Š” ๋ฆฌ๋”์—๊ฒŒ ์š”์ฒญ ์ž๋™ ์ „๋‹ฌ์„ ์ถ”๊ฐ€ํ•˜๊ฒ ๋‹ค๊ณ  ์•ฝ์†ํ•ฉ๋‹ˆ๋‹ค). ๋‚ด๊ฒฐํ•จ์„ฑ์— ์ค‘์ ์„ ๋‘๋ฏ€๋กœ DBMS๋Š” ์ฝ๊ธฐ ์ž‘์—…์œผ๋กœ๋งŒ ํ™•์žฅ๋˜๊ณ  ์“ฐ๊ธฐ ์ž‘์—…์€ ๋ณ‘๋ชฉ ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ๋‹จ์ผ ๋…ธ๋“œ์—์„œ rqlite ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ด ์†”๋ฃจ์…˜์„ ์‚ฌ์šฉํ•˜๋ฉด ๋‚ด๊ฒฐํ•จ์„ฑ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๊ณ  HTTP๋ฅผ ํ†ตํ•ด SQLite์— ๋Œ€ํ•œ ์•ก์„ธ์Šค๋ฅผ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ฐ ๋…ธ๋“œ์˜ SQLite ๋ฐ์ดํ„ฐ๋Š” ํŒŒ์ผ์ด ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅ๋ฉ๋‹ˆ๋‹ค. Raft ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋Š” ๋ ˆ์ด์–ด ์ˆ˜์ค€์—์„œ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋ณ€๊ฒฝ์œผ๋กœ ์ด์–ด์ง€๋Š” ๋ชจ๋“  SQLite ๋ช…๋ น์˜ ๋กœ๊ทธ๊ฐ€ ์œ ์ง€๋ฉ๋‹ˆ๋‹ค. ์ด ๋กœ๊ทธ๋Š” ๋ณต์ œ(๋‹ค๋ฅธ ๋…ธ๋“œ์—์„œ ์š”์ฒญ์„ ์žฌ์ƒ์‚ฐํ•˜๋Š” ์ˆ˜์ค€์˜ ๋ณต์ œ) ์ค‘์—, ์ƒˆ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•  ๋•Œ, ์—ฐ๊ฒฐ์ด ๋Š์–ด์ง„ ๊ฒฝ์šฐ ๋ณต๊ตฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ๋กœ๊ทธ ํฌ๊ธฐ๋ฅผ ์ค„์ด๊ธฐ ์œ„ํ•ด ์ž๋™ ํŒจํ‚น์ด ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค. ์ด ํŒจํ‚น์€ ์ง€์ •๋œ ํšŸ์ˆ˜์˜ ๋ณ€๊ฒฝ ํ›„์— ์‹œ์ž‘๋˜์–ด ์Šค๋ƒ…์ƒท์„ ๊ณ ์ •ํ•˜๊ณ  ์ƒˆ ๋กœ๊ทธ๊ฐ€ ์œ ์ง€๋˜๊ธฐ ์‹œ์ž‘ํ•ฉ๋‹ˆ๋‹ค(๋ฉ”๋ชจ๋ฆฌ์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ƒํƒœ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค). ์Šค๋ƒ…์ƒท + ๋ˆ„์  ๋ณ€๊ฒฝ ๋กœ๊ทธ์™€ ๋™์ผ)

rqlite์˜ ํŠน์ง•:

  • ๋ณ„๋„์˜ SQLite ์„ค์น˜ ์—†์ด ํด๋Ÿฌ์Šคํ„ฐ ๋ฐฐํฌ๊ฐ€ ์‰ฝ์Šต๋‹ˆ๋‹ค.
  • ๋ณต์ œ๋œ SQL ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๋น ๋ฅด๊ฒŒ ํ™•๋ณดํ•˜๋Š” ๊ธฐ๋Šฅ.
  • ํ”„๋กœ๋•์…˜ ํ”„๋กœ์ ํŠธ(ํ”„๋กœ๋•์…˜ ๋“ฑ๊ธ‰)์— ์‚ฌ์šฉํ•  ์ค€๋น„๊ฐ€ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ์ผ๊ด„ ๋ชจ๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  ํด๋Ÿฌ์Šคํ„ฐ์˜ ์„ ๋‘ ๋…ธ๋“œ๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋Š” HTTP(S) API๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด์— ๋Œ€ํ•œ ๋ช…๋ น์ค„ ์ธํ„ฐํŽ˜์ด์Šค์™€ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋„ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
  • ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์‹๋ณ„ํ•˜๋Š” ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ๋™์ ์œผ๋กœ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋…ธ๋“œ ๊ฐ„ ๋ฐ์ดํ„ฐ ๊ตํ™˜ ์•”ํ˜ธํ™”๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์ฝ์„ ๋•Œ ๋ฐ์ดํ„ฐ์˜ ๊ด€๋ จ์„ฑ๊ณผ ์ผ๊ด€์„ฑ์„ ํ™•์ธํ•˜๋Š” ์ˆ˜์ค€์„ ๊ตฌ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ํ•ฉ์˜ ๊ฒฐ์ •์— ์ฐธ์—ฌํ•˜์ง€ ์•Š๊ณ  ์ฝ๊ธฐ ์ž‘์—…์„ ์œ„ํ•œ ํด๋Ÿฌ์Šคํ„ฐ์˜ ํ™•์žฅ์„ฑ์„ ๋†’์ด๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ์ฝ๊ธฐ ์ „์šฉ ๋ชจ๋“œ์—์„œ ๋…ธ๋“œ๋ฅผ ์—ฐ๊ฒฐํ•˜๋Š” ์„ ํƒ์  ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค.
  • ํ•˜๋‚˜์˜ ์š”์ฒญ์— ๋ช…๋ น์„ ๊ฒฐํ•ฉํ•˜์—ฌ ๊ณ ์œ ํ•œ ํ˜•ํƒœ์˜ ํŠธ๋žœ์žญ์…˜์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค(BEGIN, COMMIT, ROLLBACK, SAVEPOINT ๋ฐ RELEASE ๊ธฐ๋ฐ˜ ํŠธ๋žœ์žญ์…˜์€ ์ง€์›๋˜์ง€ ์•Š์Œ).
  • ํ•ซ ๋ฐฑ์—… ์ƒ์„ฑ์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ ๋ฆด๋ฆฌ์Šค์—์„œ:

  • Consul ๋ฐ etcd ๋ถ„์‚ฐ ์Šคํ† ๋ฆฌ์ง€๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋Š” ์ƒˆ๋กœ์šด ๋…ธ๋“œ ๊ฐ์ง€ ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ž๋™ rqlite ํด๋Ÿฌ์Šคํ„ฐ๋ง์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด rqlite ๋…ธ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์„œ๋กœ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ด€๋ฆฌ์ž๋Š” ๊ณตํ†ต Consul ๋˜๋Š” etcd ํด๋Ÿฌ์Šคํ„ฐ ์ฃผ์†Œ(์˜ˆ: "example.com:8500")๋ฅผ ์ง€์ •ํ•˜์—ฌ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„์—์„œ ์—ฌ๋Ÿฌ ๋…ธ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ๋งŒ ํ•˜๋ฉด ๋…ธ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ๊ฒ€์ƒ‰๋ฉ๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ๋กœ ๊ฒฐํ•ฉ๋ฉ๋‹ˆ๋‹ค. ์„ ๋‘ ๋…ธ๋“œ๋Š” Consul ๋˜๋Š” etcd ์Šคํ† ๋ฆฌ์ง€์˜ ์ฃผ์†Œ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ธฐ์ ์œผ๋กœ ์—…๋ฐ์ดํŠธํ•˜๋ฏ€๋กœ ๋‹ค๋ฅธ ๋…ธ๋“œ๋ฅผ ์žฌ๊ตฌ์„ฑํ•  ํ•„์š” ์—†์ด ์ดํ›„์— ๋ฆฌ๋”๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์„ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋ฆฌ๋”๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„์—๋„ ์ƒˆ ๋…ธ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. AWS Lambda์—์„œ ์‹คํ–‰๋˜๋Š” ๋ ˆ๊ฑฐ์‹œ ๊ฒ€์ƒ‰ ๋ชจ๋“œ ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • CLI ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ ๋…ธ๋“œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์œผ๋ฉด ๋‹ค์Œ ํ˜ธ์ŠคํŠธ์— ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.
  • rqlited ๋ช…๋ น์ค„ ์ธ์ˆ˜๋ฅผ ๊ตฌ๋ฌธ ๋ถ„์„ํ•˜๋Š” ์ฝ”๋“œ๊ฐ€ ์žฌ์ž‘์—…๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๋” ์ด์ƒ ์‚ฌ์šฉ๋˜์ง€ ์•Š๋Š” protobuf ํŒจํ‚ค์ง€๊ฐ€ ์ค‘๋‹จ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Raft ํ”„๋กœํ† ์ฝœ ๊ตฌํ˜„์— ์‚ฌ์šฉ๋˜๋Š” BoltDB ์Šคํ† ๋ฆฌ์ง€๋Š” etcd ํ”„๋กœ์ ํŠธ์˜ ํฌํฌ์ธ bbolt๋กœ ๋Œ€์ฒด๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

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