๊ด€๊ณ„ํ˜• ๊ทธ๋ž˜ํ”„ DBMS EdgeDB 2.0 ์ถœ์‹œ

๋ณต์žกํ•œ ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ ์ž‘์—…์— ์ตœ์ ํ™”๋œ ๊ด€๊ณ„ํ˜• ๊ทธ๋ž˜ํ”„ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๊ณผ EdgeQL ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” EdgeDB 2.0 DBMS์˜ ๋ฆด๋ฆฌ์Šค๊ฐ€ ๋ฐœํ‘œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์ฝ”๋“œ๋Š” Python ๋ฐ Rust(ํŒŒ์„œ ๋ฐ ์„ฑ๋Šฅ์— ์ค‘์š”ํ•œ ๋ถ€๋ถ„)๋กœ ์ž‘์„ฑ๋˜์—ˆ์œผ๋ฉฐ Apache 2.0 ๋ผ์ด์„ ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์ ํŠธ๋Š” PostgreSQL์šฉ ์ถ”๊ฐ€ ๊ธฐ๋Šฅ์œผ๋กœ ๊ฐœ๋ฐœ๋˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. Python, Go, Rust ๋ฐ TypeScript/Javascript์šฉ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ค€๋น„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. DBMS ๊ด€๋ฆฌ ๋ฐ REPL(๋Œ€ํ™”ํ˜• ์ฟผ๋ฆฌ ์‹คํ–‰)์„ ์œ„ํ•œ ๋ช…๋ น์ค„ ๋„๊ตฌ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

EdgeDB๋Š” ํ…Œ์ด๋ธ” ๊ธฐ๋ฐ˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ๋Œ€์‹  ๊ฐ์ฒด ์œ ํ˜• ๊ธฐ๋ฐ˜์˜ ์„ ์–ธ์  ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์™ธ๋ž˜ ํ‚ค ๋Œ€์‹  ์ฐธ์กฐ์— ์˜ํ•œ ์—ฐ๊ฒฐ์ด ์œ ํ˜• ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์ •์˜ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(ํ•œ ๊ฐ์ฒด๊ฐ€ ๋‹ค๋ฅธ ๊ฐ์ฒด์˜ ์†์„ฑ์œผ๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์Œ).

type Person { ํ•„์ˆ˜ ์†์„ฑ ์ด๋ฆ„ -> str; } type Movie { ํ•„์ˆ˜ ์†์„ฑ ์ œ๋ชฉ -> str; ๋ฉ€ํ‹ฐ๋งํฌ ์•กํ„ฐ -> ์‚ฌ๋žŒ; }

์ธ๋ฑ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ฟผ๋ฆฌ ์ฒ˜๋ฆฌ ์†๋„๋ฅผ ๋†’์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ•๋ ฅํ•œ ์†์„ฑ ์œ ํ˜• ์ง€์ •, ์†์„ฑ ๊ฐ’ ์ œํ•œ, ๊ณ„์‚ฐ ์†์„ฑ ๋ฐ ์ €์žฅ ํ”„๋กœ์‹œ์ €์™€ ๊ฐ™์€ ๊ธฐ๋Šฅ๋„ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ORM์„ ์—ฐ์ƒ์‹œํ‚ค๋Š” EdgeDB ๊ฐ์ฒด ์Šคํ† ๋ฆฌ์ง€ ์ฒด๊ณ„์˜ ๊ธฐ๋Šฅ์—๋Š” ์Šคํ‚ค๋งˆ ํ˜ผํ•ฉ, ๋‹ค์–‘ํ•œ ๊ฐ์ฒด์˜ ์†์„ฑ ์—ฐ๊ฒฐ, ํ†ตํ•ฉ JSON ์ง€์› ๊ธฐ๋Šฅ์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์Šคํ‚ค๋งˆ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜์„ ์ €์žฅํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ๋„๊ตฌ๊ฐ€ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๋ณ„๋„์˜ esdl ํŒŒ์ผ์— ์ง€์ •๋œ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•œ ํ›„ "edgedb migration create" ๋ช…๋ น์„ ์‹คํ–‰ํ•˜๋ฉด DBMS๊ฐ€ ์Šคํ‚ค๋งˆ์˜ ์ฐจ์ด์ ์„ ๋ถ„์„ํ•˜๊ณ  ๋Œ€ํ™”์‹์œผ๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ํ•˜๊ธฐ ์œ„ํ•œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ƒˆ๋กœ์šด ์Šคํ‚ค๋งˆ. ์Šคํ‚ค๋งˆ ๋ณ€๊ฒฝ ๋‚ด์—ญ์ด ์ž๋™์œผ๋กœ ์ถ”์ ๋ฉ๋‹ˆ๋‹ค.

์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด GraphQL ์ฟผ๋ฆฌ ์–ธ์–ด์™€ ๊ณ„์ธต์  ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•œ SQL์„ ์ ์šฉํ•œ ๋…์  EdgeDB ์–ธ์–ด๊ฐ€ ๋ชจ๋‘ ์ง€์›๋ฉ๋‹ˆ๋‹ค. ๋ชฉ๋ก ๋Œ€์‹  ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ€ ๊ตฌ์กฐํ™”๋œ ๋ฐฉ์‹์œผ๋กœ ํ˜•์‹ํ™”๋˜๊ณ , ํ•˜์œ„ ์ฟผ๋ฆฌ ๋ฐ JOIN ๋Œ€์‹  ํ•˜๋‚˜์˜ EdgeQL ์ฟผ๋ฆฌ๋ฅผ ๋‹ค๋ฅธ ์ฟผ๋ฆฌ ๋‚ด์˜ ํ‘œํ˜„์‹์œผ๋กœ ์ง€์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํŠธ๋žœ์žญ์…˜๊ณผ ์ฃผ๊ธฐ๊ฐ€ ์ง€์›๋ฉ๋‹ˆ๋‹ค.

select Movie { title, actor: { ์ด๋ฆ„ } } filter .title = "The Matrix" insert Movie { title := "The Matrix Resurrections", actor := ( select Person filter .name in { 'Keanu Reeves', 'Carrie- Anne Moss', 'Laurence Fishburne' } ) } {0, 1, 2, 3} ์กฐํ•ฉ์˜ ์ˆซ์ž์— ๋Œ€ํ•ด ( { ์ˆซ์ž, ์ˆซ์ž + 0.5 } ์„ ํƒ);

์ƒˆ ๋ฒ„์ „์—์„œ:

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ฆฌ๋ฅผ ์œ„ํ•ด ๋‚ด์žฅ๋œ ์›น ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ถ”๊ฐ€๋˜์–ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๊ณ  ํŽธ์ง‘ํ•˜๊ณ , EdgeQL ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๊ณ , ์‚ฌ์šฉ๋œ ์Šคํ† ๋ฆฌ์ง€ ๊ตฌ์„ฑํ‘œ๋ฅผ ๋ถ„์„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ธํ„ฐํŽ˜์ด์Šค๋Š” "edgedb ui" ๋ช…๋ น์œผ๋กœ ์‹œ์ž‘๋˜๋ฉฐ, ์ดํ›„ localhost์— ์•ก์„ธ์Šคํ•  ๋•Œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.
    ๊ด€๊ณ„ํ˜• ๊ทธ๋ž˜ํ”„ DBMS EdgeDB 2.0 ์ถœ์‹œ
  • "GROUP" ํ‘œํ˜„์‹์ด ๊ตฌํ˜„๋˜์–ด SELECT ์ž‘์—…์˜ ๊ทธ๋ฃนํ™”์™€ ์œ ์‚ฌํ•˜๊ฒŒ ์ž„์˜์˜ EdgeQL ํ‘œํ˜„์‹์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถ„ํ• ํ•˜๊ณ  ์ง‘๊ณ„ํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋ฃนํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ์ฒด ์ˆ˜์ค€์—์„œ ์•ก์„ธ์Šค๋ฅผ ์ œ์–ดํ•˜๋Š” โ€‹โ€‹๊ธฐ๋Šฅ. ์•ก์„ธ์Šค ๊ทœ์น™์€ ์Šคํ† ๋ฆฌ์ง€ ์Šคํ‚ค๋งˆ ์ˆ˜์ค€์—์„œ ์ •์˜๋˜๋ฉฐ ๊ฐ€์ ธ์˜ค๊ธฐ, ์‚ฝ์ž…, ์‚ญ์ œ ๋ฐ ์—…๋ฐ์ดํŠธ ์ž‘์—…์—์„œ ํŠน์ • ๊ฐœ์ฒด ์ง‘ํ•ฉ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œํ•œํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด ์ž‘์„ฑ์ž๋งŒ ์ถœํŒ๋ฌผ์„ ์—…๋ฐ์ดํŠธํ•˜๋„๋ก ํ—ˆ์šฉํ•˜๋Š” ๊ทœ์น™์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์Šคํ† ๋ฆฌ์ง€ ์Šคํ‚ค๋งˆ์— ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž์— ๋ฐ”์ธ๋”ฉํ•˜๊ธฐ ์œ„ํ•ด ์ƒˆ๋กœ์šด ์ „์—ญ ๋ณ€์ˆ˜ current_user๊ฐ€ ์ œ์•ˆ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐ’ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•˜๋Š” ์œ ํ˜•์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • Rust ์–ธ์–ด์— ๋Œ€ํ•œ ๊ณต์‹ ํด๋ผ์ด์–ธํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ ์ค€๋น„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
  • EdgeDB ๋ฐ”์ด๋„ˆ๋ฆฌ ํ”„๋กœํ† ์ฝœ์ด ์•ˆ์ •ํ™”๋˜์–ด ๋™์ผํ•œ ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ ๋‚ด์—์„œ ๋™์‹œ์— ์—ฌ๋Ÿฌ ๋‹ค๋ฅธ ์„ธ์…˜์„ ์ฒ˜๋ฆฌํ•˜๊ณ , HTTP๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๊ณ , ์ „์—ญ ๋ณ€์ˆ˜์™€ ๋กœ์ปฌ ์ƒํƒœ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•ด์กŒ์Šต๋‹ˆ๋‹ค.
  • ์„œ๋ฒ„ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์œ ์ง€ํ•˜์ง€ ์•Š๊ณ  ์—ฐ๊ฒฐ์„ ์„ค์ •ํ•˜๋ ค๊ณ  ํ•  ๋•Œ๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์†Œ์ผ“ ํ™œ์„ฑํ™”์— ๋Œ€ํ•œ ์ง€์›์ด ์ถ”๊ฐ€๋˜์—ˆ์Šต๋‹ˆ๋‹ค(๊ฐœ๋ฐœ์ž ์‹œ์Šคํ…œ์—์„œ ๋ฆฌ์†Œ์Šค๋ฅผ ์ ˆ์•ฝํ•˜๋Š” ๋ฐ ์œ ์šฉํ•จ).

์ถœ์ฒ˜ : opennet.ru

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