EdgeDB 2.0 DBMS ๋ฆด๋ฆฌ์ค๋ฅผ ์๊ฐํฉ๋๋ค. ์ด ๋ฆด๋ฆฌ์ค๋ ๋ณต์กํ ๊ณ์ธตํ ๋ฐ์ดํฐ ์์ ์ ์ต์ ํ๋ ๊ด๊ณํ ๊ทธ๋ํ ๋ฐ์ดํฐ ๋ชจ๋ธ๊ณผ EdgeQL ์ฟผ๋ฆฌ ์ธ์ด๋ฅผ ๊ตฌํํฉ๋๋ค. ์ฝ๋๋ Python๊ณผ Rust(ํ์ ๋ฐ ์ฑ๋ฅ์ ์ค์ํ ๋ถ๋ถ)๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค. ์ด ํ๋ก์ ํธ๋ PostgreSQL์ ์ ๋์จ์ผ๋ก ๊ฐ๋ฐ๋๊ณ ์์ต๋๋ค. ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ Python, Go, Rust, TypeScript/Javascript์ฉ์ผ๋ก ์ค๋น๋์์ต๋๋ค. DBMS ๊ด๋ฆฌ ๋ฐ ๋ํํ ์ฟผ๋ฆฌ ์คํ(REPL)์ ์ํ ๋ช ๋ น์ค ๋๊ตฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค.
EdgeDB๋ ํ ์ด๋ธ ๊ธฐ๋ฐ ๋ฐ์ดํฐ ๋ชจ๋ธ ๋์ ๊ฐ์ฒด ์ ํ ๊ธฐ๋ฐ์ ์ ์ธ์ ์์คํ ์ ์ฌ์ฉํฉ๋๋ค. ์ธ๋ ํค ๋์ ์ฐธ์กฐ์ ์ํ ์ฐ๊ฒฐ์ด ์ ํ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค(ํ ๊ฐ์ฒด๊ฐ ๋ค๋ฅธ ๊ฐ์ฒด์ ์์ฑ์ผ๋ก ์ฌ์ฉ๋ ์ ์์).
type Person {ํ์ ์์ฑ ์ด๋ฆ -> str;} type Movie {ํ์ ์์ฑ ์ ๋ชฉ -> str; ๋ค์ค ๋งํฌ actors -> Person;}
์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๋๋ฅผ ๋์ผ ์ ์์ต๋๋ค. ๊ฐ๋ ฅํ ์์ฑ ์ ํ ์ง์ , ์์ฑ ๊ฐ ์ ํ, ๊ณ์ฐ ์์ฑ ๋ฐ ์ ์ฅ ํ๋ก์์ ์ ๊ฐ์ ๊ธฐ๋ฅ๋ ์ง์๋ฉ๋๋ค. ORM์ ์ฐ์์ํค๋ EdgeDB ๊ฐ์ฒด ์คํ ๋ฆฌ์ง ์ฒด๊ณ์ ๊ธฐ๋ฅ์๋ ์คํค๋ง ํผํฉ, ๋ค์ํ ๊ฐ์ฒด์ ์์ฑ ์ฐ๊ฒฐ, ํตํฉ JSON ์ง์ ๊ธฐ๋ฅ์ด ํฌํจ๋ฉ๋๋ค.
์คํค๋ง ๋ง์ด๊ทธ๋ ์ด์ ์ ์ ์ฅํ๊ธฐ ์ํ ๋ด์ฅ ๋๊ตฌ๊ฐ ์ ๊ณต๋ฉ๋๋ค. ๋ณ๋์ esdl ํ์ผ์ ์ง์ ๋ ์คํค๋ง๋ฅผ ๋ณ๊ฒฝํ ํ "edgedb migration create" ๋ช ๋ น์ ์คํํ๋ฉด DBMS๊ฐ ์คํค๋ง์ ์ฐจ์ด์ ์ ๋ถ์ํ๊ณ ๋ํ์์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ธฐ ์ํ ์คํฌ๋ฆฝํธ๋ฅผ ์์ฑํฉ๋๋ค. ์๋ก์ด ์คํค๋ง. ์คํค๋ง ๋ณ๊ฒฝ ๋ด์ญ์ด ์๋์ผ๋ก ์ถ์ ๋ฉ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ ์์ฑํ๊ธฐ ์ํด GraphQL ์ฟผ๋ฆฌ ์ธ์ด์ ๊ณ์ธต์ ๋ฐ์ดํฐ์ ๋ํ SQL์ ์ ์ฉํ ๋ ์ EdgeDB ์ธ์ด๊ฐ ๋ชจ๋ ์ง์๋ฉ๋๋ค. ๋ชฉ๋ก ๋์ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ ๊ตฌ์กฐํ๋ ๋ฐฉ์์ผ๋ก ํ์ํ๋๊ณ , ํ์ ์ฟผ๋ฆฌ ๋ฐ JOIN ๋์ ํ๋์ EdgeQL ์ฟผ๋ฆฌ๋ฅผ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋ด์ ํํ์์ผ๋ก ์ง์ ํ ์ ์์ต๋๋ค. ํธ๋์ญ์ ๊ณผ ์ฃผ๊ธฐ๊ฐ ์ง์๋ฉ๋๋ค.
์ํ ์ ํ { ์ ๋ชฉ, ๋ฐฐ์ฐ: { ์ด๋ฆ } } ํํฐ .์ ๋ชฉ = "๋งคํธ๋ฆญ์ค" ์ํ ์ฝ์ { ์ ๋ชฉ := "๋งคํธ๋ฆญ์ค ๋ถํ", ๋ฐฐ์ฐ := ( ์ธ๋ฌผ ์ ํ ํํฐ .์ด๋ฆ { 'ํค์๋ ๋ฆฌ๋ธ์ค', '์บ๋ฆฌ์ค ๋ชจ์ค', '๋ก๋ ์ค ํผ์๋ฒ' } ) } for number in {0, 1, 2, 3} union ( { ์ซ์, ์ซ์ + 0.5 } ์ ํ);
์ ๋ฒ์ ์์:
- ๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ด๋ฆฌ๋ฅผ ์ํ ๋ด์ฅ ์น ์ธํฐํ์ด์ค๊ฐ ์ถ๊ฐ๋์ด ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ณ ํธ์งํ๊ณ , EdgeQL ์ฟผ๋ฆฌ๋ฅผ ์คํํ๊ณ , ์ฌ์ฉ๋ ์ ์ฅ ๋ฐฉ์์ ๋ถ์ํ ์ ์์ต๋๋ค. ์ธํฐํ์ด์ค๋ "edgedb ui" ๋ช
๋ น์ผ๋ก ์์๋๋ฉฐ, ์ดํ localhost์ ์ ์ํ๋ฉด ์ฌ์ฉํ ์ ์์ต๋๋ค.

- "GROUP" ํํ์์ด ๊ตฌํ๋์ด SELECT ์์ ์ ๊ทธ๋ฃนํ์ ์ ์ฌํ๊ฒ ์์์ EdgeQL ํํ์์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ๊ณ ์ง๊ณํ๊ณ ๋ฐ์ดํฐ ๊ทธ๋ฃนํ๋ฅผ ์ํํ ์ ์์ต๋๋ค.
- ๊ฐ์ฒด ์์ค์์ ์ ๊ทผ ์ ์ด๊ฐ ๊ฐ๋ฅํฉ๋๋ค. ์ก์ธ์ค ๊ท์น์ ์คํ ๋ฆฌ์ง ์คํค๋ง ์์ค์์ ์ ์๋๋ฉฐ ์ ํ, ์ฝ์ , ์ญ์ ๋ฐ ์ ๋ฐ์ดํธ ์์ ์์ ํน์ ๊ฐ์ฒด ์งํฉ์ ์ฌ์ฉํ๋ ๊ธฐ๋ฅ์ ์ ํํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ์์ฑ์๋ง ๊ฒ์๋ฌผ์ ์ ๋ฐ์ดํธํ ์ ์๋๋ก ํ์ฉํ๋ ๊ท์น์ ์ถ๊ฐํ ์ ์์ต๋๋ค.
- ์ ์ฅ ์ฒด๊ณ์์ ์ ์ญ ๋ณ์๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ฌ์ฉ์ ๋ฐ์ธ๋ฉ์ ์ํด ์๋ก์ด ์ ์ญ ๋ณ์ current_user๊ฐ ์ ์๋์์ต๋๋ค.
- ๊ฐ ๋ฒ์๋ฅผ ์ ์ํ๋ ์ ํ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค.
- Rust ์ธ์ด์ ๊ณต์ ํด๋ผ์ด์ธํธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ค๋น๋์์ต๋๋ค.
- EdgeDB ๋ฐ์ด๋๋ฆฌ ํ๋กํ ์ฝ์ด ์์ ํ๋์ด ๋จ์ผ ๋คํธ์ํฌ ์ฐ๊ฒฐ ๋ด์์ ์ฌ๋ฌ ๊ฐ์ ์๋ก ๋ค๋ฅธ ์ธ์ ์ ๋์์ ์ฒ๋ฆฌํ๊ณ , HTTP๋ฅผ ํตํด ์ ๋ฌํ๊ณ , ์ ์ญ ๋ณ์์ ๋ก์ปฌ ์ํ๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ด ์ ๊ณต๋์์ต๋๋ค.
- ์์ผ ํ์ฑํ์ ๋ํ ์ง์์ด ์ถ๊ฐ๋์์ต๋๋ค. ์ด๋ฅผ ํตํด ์๋ฒ ํธ๋ค๋ฌ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์งํ์ง ์๊ณ ์ฐ๊ฒฐ์ ์ค์ ํ๋ ค๊ณ ํ ๋๋ง ์คํํ ์ ์์ต๋๋ค(๊ฐ๋ฐ์ ์์คํ ์ ๋ฆฌ์์ค๋ฅผ ์ ์ฝํ๋ ๋ฐ ์ ์ฉ).
์ถ์ฒ : opennet.ru

