FerretDB 0.1 ํ๋ก์ ํธ(์ด์ MangoDB)๊ฐ ์ถ์๋์ด ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ๋ฌธ์ ์งํฅ DBMS MongoDB๋ฅผ PostgreSQL๋ก ๊ต์ฒดํ ์ ์์ต๋๋ค. FerretDB๋ MangoDB์ ๋ํ ํธ์ถ์ PostgreSQL์ ๋ํ SQL ์ฟผ๋ฆฌ๋ก ๋ณํํ๋ ํ๋ก์ ์๋ฒ๋ก ๊ตฌํ๋์ด PostgreSQL์ ์ค์ ์คํ ๋ฆฌ์ง๋ก ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ฝ๋๋ Go๋ก ์์ฑ๋์์ผ๋ฉฐ Apache 2.0 ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
๋ง์ด๊ทธ๋ ์ด์ ์ ํ์์ฑ์ MongoDB๊ฐ AGPLv3 ๋ผ์ด์ ์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ์ง๋ง ๊ฐ๋ฐฉ์ ์ด์ง ์์ ๋ ์ SSPL ๋ผ์ด์ ์ค๋ก ์ ํํจ์ผ๋ก์จ ๋ฐ์ํ ์ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋ ์์ฒด๋ฟ๋ง ์๋๋ผ SSPL ๋ผ์ด์ ์ค์ ๋ฐ๋ผ ์ ๊ณตํด์ผ ํ๋ ์ฐจ๋ณ์ ์๊ตฌ ์ฌํญ์ด ํฌํจ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋๋ค. ํด๋ผ์ฐ๋ ์๋น์ค ์ ๊ณต๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ตฌ์ฑ ์์์ ์์ค ์ฝ๋.
FerretDB์ ๋์ ๊ณ ๊ฐ์ ์ ํ๋ฆฌ์ผ์ด์ ์์ MongoDB์ ๊ณ ๊ธ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์ง๋ง ์์ ํ ๊ฐ๋ฐฉํ ์ํํธ์จ์ด ์คํ์ ์ฌ์ฉํ๋ ค๋ ์ฌ์ฉ์์ ๋๋ค. ํ์ฌ ๊ฐ๋ฐ ๋จ๊ณ์์ FerretDB๋ ์ผ๋ฐ์ ์ธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ๊ฐ์ฅ ์์ฃผ ์ฌ์ฉ๋๋ MongoDB ๊ธฐ๋ฅ ์ค ์ผ๋ถ๋ง ์ง์ํฉ๋๋ค. ์์ผ๋ก๋ MongoDB์ฉ ๋๋ผ์ด๋ฒ์์ ์์ ํ ํธํ์ฑ์ ๋ฌ์ฑํ๊ณ MongoDB๋ฅผ ํฌ๋ช ํ๊ฒ ๋์ฒดํ์ฌ FerretDB๋ฅผ ์ฌ์ฉํ ์ ์๋ ๊ธฐ๋ฅ์ ์ ๊ณตํ ๊ณํ์ ๋๋ค.
MongoDB๋ ํค/๊ฐ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์๋ํ๋ ๋น ๋ฅด๊ณ ํ์ฅ ๊ฐ๋ฅํ ์์คํ ๊ณผ ๊ธฐ๋ฅ์ ์ด๊ณ ์ฟผ๋ฆฌ๋ฅผ ๊ณต์ํํ๊ธฐ ์ฌ์ด ๊ด๊ณํ DBMS ์ฌ์ด์ ํ์ ์์ฅ์ ์ ์ ํ๊ณ ์๋ค๋ ์ ์ ์๊ธฐํด ๋ณด๊ฒ ์ต๋๋ค. MongoDB๋ JSON๊ณผ ๊ฐ์ ํ์์ผ๋ก ๋ฌธ์ ์ ์ฅ์ ์ง์ํ๊ณ , ์ฟผ๋ฆฌ ์์ฑ์ ์ํ ๋งค์ฐ ์ ์ฐํ ์ธ์ด๋ฅผ ๊ฐ์ง๋ฉฐ, ๋ค์ํ ์ ์ฅ๋ ์์ฑ์ ๋ํ ์ธ๋ฑ์ค๋ฅผ ์์ฑํ ์ ์๊ณ , ๋๊ท๋ชจ ๋ฐ์ด๋๋ฆฌ ๊ฐ์ฒด์ ์ ์ฅ์๋ฅผ ํจ์จ์ ์ผ๋ก ์ ๊ณตํ๊ณ , ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๊ณ ์ถ๊ฐํ๊ธฐ ์ํ ์์ ๋ก๊น ์ ์ง์ํฉ๋๋ค. Map/Reduce ํจ๋ฌ๋ค์์ ๋ฐ๋ผ ์๋ํ๋ฉฐ ๋ด๊ฒฐํจ์ฑ ๊ตฌ์ฑ์ ๋ณต์ ๋ฐ ๊ตฌ์ฑ์ ์ง์ํฉ๋๋ค.
FerretDB 0.1.0 ๋ฆด๋ฆฌ์ค์์๋ PostgreSQL์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ๋ฐฉ๋ฒ์ด ์์ ํ ์ฌ์ค๊ณ๋์์ต๋๋ค. ์ด์ ์๋ ๋ค์ด์ค๋ ๊ฐ MongoDB ์์ฒญ์ ๋ํด JSON ํ์์ผ๋ก ์์ ํ๊ณ PostgreSQL ์ธก์์ ๊ฒฐ๊ณผ๋ฅผ ํํฐ๋งํ๋ ํจ์๋ฅผ ์ฌ์ฉํ์ฌ PostgreSQL์ ํ๋์ SQL ์ฟผ๋ฆฌ๊ฐ ์์ฑ๋์์ต๋๋ค. PostgreSQL๊ณผ MongoDB json ํจ์์ ์๋ฏธ ์ฒด๊ณ์ ์ฐจ์ด๋ก ์ธํด ๋ค์ํ ์ ํ์ ๋น๊ตํ๊ณ ์ ๋ ฌํ ๋ ๋์์ ๋ถ์ผ์น๊ฐ ์์์ต๋๋ค. ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด ์ด์ PostgreSQL์์ ๋ฐ์ดํฐ๋ฅผ ์ค๋ณต์ ์ผ๋ก ๊ฐ์ ธ์ค๊ณ ๊ทธ ๊ฒฐ๊ณผ๋ฅผ FerretDB ์ธก์์ ํํฐ๋งํ๋ฏ๋ก ๋๋ถ๋ถ์ ์ํฉ์์ MongoDB์ ๋์์ ๋ณต์ ํ ์ ์์ต๋๋ค.
ํธํ์ฑ ํฅ์์ ๋๊ฐ๋ ์ฑ๋ฅ ์ ํ์์ผ๋ฉฐ, ํฅํ ๋ฆด๋ฆฌ์ค์์๋ ๋์์ ๋ถ์ผ์น๊ฐ ์๋ ์ฟผ๋ฆฌ๋ง FerretDB ์ธก์์ ์ ํ์ ์ผ๋ก ํํฐ๋งํ์ฌ ๋ณด์ํ ๊ฒ์ผ๋ก ์์๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด "db.collection.find({_id: 'some-id-value'})" ์ฟผ๋ฆฌ๋ PostgreSQL์์ ์์ ํ ์ฒ๋ฆฌ๋ ์ ์์ต๋๋ค. ์ด ๊ฐ๋ฐ ๋จ๊ณ์์ ํ๋ก์ ํธ์ ์ฃผ์ ๋ชฉํ๋ MongoDB์์ ํธํ์ฑ์ ๋ฌ์ฑํ๋ ๊ฒ์ด๋ฉฐ ์ฑ๋ฅ์ ํ์ฌ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ๋ฐ๋ ค๋ฉ๋๋ค. ์ ๋ฒ์ ์ ๊ธฐ๋ฅ ๋ณ๊ฒฝ ์ฌํญ ์ค์๋ ๋ชจ๋ ๋นํธ ์ฐ์ฐ์, "$eq" ๋น๊ต ์ฐ์ฐ์, "$elemMatch" ๋ฐ "$bitsAllClear" ์ฐ์ฐ์์ ๋ํ ์ง์์ด ํฌํจ๋์ด ์์ต๋๋ค.
์ถ์ฒ : opennet.ru