[MONGO] ๐ ๋ชฝ๊ณ ๋๋น ํน์ง & ๋น๊ต & ๊ตฌ์กฐ (NoSQL)
MongoDB ๋?
MongoDB๋ ๋ฌธ์ ์งํฅ ๋ฐ์ดํฐ ๋ชจ๋ธ(Document DB)์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ด๋ค.
์ด๋ฌํ ์ ํ์ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์ ํ ๋ฐ ๋น์ ํ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ค ์ฝ๊ณ ๋น ๋ฅด๊ฒ ํตํฉํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
RDBMS๋ MySQL์ด ๋ง์ด ์ฐ์ด๋ฏ์ด, NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค์ค ๋ํ๊ฒฉ์ด๋ผ๊ณ ๋งํ ์ ๋๋ก ๊ฐ์ฅ ๋ง์ด ์ฐ์ธ๋ค.
[NoSQL DB vs ๊ด๊ณํ DB ๋น๊ต]
ํญ๋ชฉ | NoSQL | RDBMS |
์ ํฉ์ ๋ฌด | - ์คํ๋ผ์ธ์์ ์ ํ ๋ฐ ๋น์ ํ ๋ฐ์ดํฐ ๋ถ์ ์
๋ฌด - ์ด๋น ๋์ ์ฒ๋ฆฌ๊ฐ ์ค์ํ ์ ๋ฌด - ๋ก๊ทธ ๋ฐ ์ด๋ ฅ ๋ฑ์ ๋จ์ ๊ธฐ๋กํ ์ ๋ฌด |
- ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ๋ฐ ์ผ๊ด์ฑ์ด ์ค์ํ ํธ๋์ญ์
์
๋ฌด - ์จ๋ผ์ธ์์ ๋ค์ํ ์ง๊ณ ๋ฐ ํต๊ณ๋ฅผ ๋ถ์ํ๋ ์ ๋ฌด - ๋ณต์กํ ๊ณ์ฐ ๋ฐ ์ค์๊ฐ ๋ฐ์ดํฐ ์ ํฉ์ฑ์ด ํ์ํ ์ ๋ฌด |
๋ฐ์ดํฐ ๋ชจ๋ธ | - ์๋น์ค์ ๋ง๋ DB ์ ํ์ด ์ค์ํจ - ๋ฐ์ ๊ทํ์ ์ํ ์ค๊ณ๋ฅผ ๊ธฐ๋ณธ์ผ๋ก ํจ - ๋น์ ํํ ์คํค๋ง ๊ตฌ์กฐ๋ก ๋ฏธ๋ฆฌ ์คํค๋ง๋ฅผ ์ ์ธํ์ง ์์ |
- ์ํฐํฐ ๋ฐ ๊ฐ ์ํฐํฐ ๊ฐ ๊ด๊ณ๋ฅผ ์ ์ํจ - ์ํฐํฐ ์ ์ ์ ์ ๊ทํ์ ์ํ ์ค๊ณ๊ฐ ์ค์ํจ - ํ ์ด๋ธ\, ์นผ๋ผ ๋ฑ DB์์์ ๋ํ ์คํค๋ง๋ฅผ ์๊ฒฉํ ๊ด๋ฆฌํจ |
์ฑ๋ฅ | - ํด๋ฌ์คํฐ ํฌ๊ธฐ\, ๋คํธ์ํฌ ๋ฐ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํด ์ฑ๋ฅ์ด ๊ฒฐ์ ๋จ | - ์ฑ๋ฅ ํฅ์์ ์ํด์๋ ์ฑ๋ฅ ์ต์ ํ ์์ ์ด ํ์ํจ |
์ธํฐํ์ด์ค | - ์ฟผ๋ฆฌ ์ธ ๋ค์ํ API๋ฅผ ํตํ ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ฒ์์ด ๊ฐ๋ฅํจ | - SQL์ ํตํด์๋ง ๋ฐ์ดํฐ ์ ์ฅ ๋ฐ ๊ฒ์์ด ๊ฐ๋ฅํจ |
์ฅ์ | - ์ฟผ๋ฆฌ ํ๋ก์ธ์ฑ์ด ๋จ์ํ๋์ด ๋์ฉ๋ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ฑ๋ฅ์ด ํฅ์๋จ | - ๋ฐ์ดํฐ ์ค๋ณต ๋ฐฐ์ ๋ก ๋ฐ์ดํฐ ์ด์ ๋ฐ์ ๋ฐ ์ฉ๋ ์ฆ๊ฐ๋ฅผ ์ต์ํํจ |
๋จ์ | - ๋ฐ์ดํฐ ์ค๋ณต์ ์ํด ๋ฐ์ดํฐ ์ผ๊ด์ฑ์ด ์ ํ๋๊ณ ์ฉ๋์ด ์ฆ๊ฐํจ | - ์กฐ์ธ์ด ๋ณต์กํ ๊ฒฝ์ฐ ์ฟผ๋ฆฌ ํ๋ก์ธ์ฑ๋ ๋ณต์กํด์ ธ ์ฑ๋ฅ์ด ์ ํ๋จ |
๋ชฝ๊ณ ๋๋น๋ง์ ์ฅ์ ๊ณผ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค. (์์์ ์ฐธ์กฐํ๋ฉด ๋ ์ฝ๊ฒ ์ดํด๊ฐ ๊ฐ๋ฅํ๋ค)
MongoDB ํน์ง
์ ๋ขฐ์ฑ(Reliability)
- ์๋ฒ ์ฅ์ ์๋ ์๋ฒ๊ฐ ์ ๋์ ์ผ๋ก ๋ถ๋ดํ์ฌ ์๋น์ค๋ ๊ณ์ ๋์ ์ ์ง
- Primary ์ Secondry๋ก ๊ตฌ์ฑ๋ ReplicaSet ๊ตฌ์กฐ๋ก ๊ณ ๊ฐ์ฉ์ฑ์ ์ง์
๋ชฝ๊ณ ๋๋น๋ ๊ธฐ๋ณธ์ ์ผ๋ก ํ๋์ primary์ ๋๊ฐ์ secondary๋ก ReplicaSet์ ๊ตฌ์ฑํ๋ค.
primary๋ ๋ฐ์ดํฐ ์ฐ๊ธฐ ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ,secondary๋ primary๋ถํฐ ๋ณ๊ฒฝ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ๋ค.
์ด๋ ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณต์ ํ๊ณ ์ ์งํจ์ผ๋ก์, ํ๋์ ์๋ฒ์์ ์ฅ์ ๊ฐ ๋ฐ์ํ๋๋ผ๋ ๋ฐ์ดํฐ๋ฅผ ์ ์งํ ์ ์๋ค.
๋ง์ผ primary์๋ฒ์ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด, secondary๊ฐ primary๋ก ์ ํ๋์ด ์๋ฒ๋ฅผ ๊ณ์ ์ ์ง์ํจ๋ค.
๊ทธ๋ฆฌ๊ณ ๋ค์ ๋น secondary์๋ฒ๋ฅผ ๋ชฝ๊ณ ๋๋น๊ฐ ๋ณต๊ตฌ ์์ผ์ค์ผ๋ก์ ์๋ฒ๋ฅผ ์ ์งํ ์ ์๊ฒ ๋๋ค.
ํ์ฅ์ฑ(Scalability)
- ๋ฐ์ดํฐ์ ํธ๋ํฝ ์ฆ๊ฐ์ ๋ฐ๋ผ ์ํํ์ฅ(scale-out) ๊ฐ๋ฅ
- ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ์ฌ ์ํํ์ฅ(scale-out) ํ ์ ์์
๋ชฝ๊ณ DB์ ๋ฐ์ดํฐ๊ฐ ์ฆ๊ฐํ์ฌ ๋์ด์ ํ๋์ Replica Set์ ๋ด์ ์ ์๊ฒ ๋๋ฉด, ๋ชฝ๊ณ DB๋ ๋ฐ์ดํฐ๋ฅผ ์ค๋ฉํ์ฌ ๋ถ์ฐ์์ผ ์ค ์ ์์.
์ด๋ฌํ ์ค๋ฉ๊ณผ์ ์ ์๋น์ค ์ค๋จ์์ด ์จ๋ผ์ธ์ผ๋ก ์งํ๋๋ค.
๋ง์ฝ ํน์ ์ค๋์ ๋ฐ์ดํฐ๊ฐ ๋ชฐ๋ฆฌ๋ฉด ๋ค๋ฅธ ์ค๋๋ก ๋ฐ์ดํฐ๋ฅผ ์ด๋ ์์ผ, ์ ๋ฐ์ ์ผ๋ก ๋ชจ๋ ์ค๋๊ฐ ๊ท ๋ฑํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ์ ์ฅํ ์ ์๋๋ก ํด์ค๋ค.
์ด๋ฌํ ๋์์ ๋ฐธ๋ฐ์ฑ์ด๋ผ๊ณ ํ๋ค.
๋ชฝ๊ณ DB๋ ์จ๋ผ์ธ์์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐธ๋ฐ์ฑ ํด์ค ์ ์๊ธฐ ๋๋ฌธ์ ๋จ์ผ Replica Set ์์ ์ค๋๋ก์ ์จ๋ผ์ธ ์ ํ์ด ๊ฐ๋ฅํ๋ฉฐ
์ค๋์ ํ์ฅ ์ถ์๋ ๋ชจ๋ ์จ๋ผ์ธ์ผ๋ก ์งํ ๊ฐ๋ฅ ํ๋ค.
์ ์ฐ์ฑ(Flexibility)
- ์ฌ๋ฌ๊ฐ์ง ํํ์ ๋ฐ์ดํฐ๋ฅผ ์์ฝ๊ฒ ์ ์ฅ
- ์๋น์ค ์๊ตฌ์ฌํญ์ ๋ง์ถฐ ๋ค์ํ ์ข ๋ฅ์ ๋ฐ์ดํฐ๊ฐ ์ถ๊ฐ๋์ด๋ ์คํค๋ง ๋ณ๊ฒฝ ๊ณผ์ ์์ด ํ์ํ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ก ์ ์ฅํ๊ณ ์ฝ์ ์ ์์
- ์๋ฅผ๋ค์ด ๋ ์ง๋ฅผ ์ ์ฅํ๊ณ ์ถ์๋ฐ ํ ์ด๋ธ์ ๋ ์ง ๊ด๋ จ ์ปฌ๋ผ์ด ์๋ค๋ฉด ๋ฐ๋ก ํ๋๋ฅผ ์ถ๊ฐํด์ผ ํ๋ ํ ์ด๋ธ์ด ์กฐ์์ด ํ์ ํ์ง๋ง, ๋ชฝ๊ณ ๋๋น๋ ๊ทธ๋ฅ ์จ์ฃผ๋ฉด ์์์ ์ธ์๋จ.
๋ง์ ํธ๋ํฐ์ OS์ข ๋ฅ๋ฅผ ๊ตฌ๋ถํด์ผํ๋ค๋ฉด, RDBMS์์ ์ปฌ๋ผ์ ์๋ก ์ถ๊ฐํด์ผ ํ ๊ฒ์ด๋ค.
๊ทธ๋ฐ๋ฐ RYAN์ด๋ผ๋ ์ฌ๋์ด ๋ ํด๋ํฐ์ ๊ตฌ๋งคํ๋ฉด ์ด๋ป๊ฒ ํด์ผํ ๊น? ๋ ์ปฌ๋ผ์ ์ถ๊ฐํด์ผ ํ ๊น?
RDBMS๋ ์ด๋ฌํ ์ํฉ์ ํ ์ด๋ธ์ ๋ถ๋ฆฌํ๊ณ ๊ด๊ณ๋ฅผ ๋งบ์์ผ๋ก์ ํด๊ฒฐํ๋ค.
ํ์ง๋ง ๋ชฝ๊ณ DB๋ Schema ๊ฐ ์์ผ๋ฏ๋ก ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ์ ์ฐํ๊ฒ ๋์ฒํ ์ ์๋ค
๋ชฝ๊ณ DB๋ JSON ๊ธฐ๋ฐ์ Document ๋ชจ๋ธ์ ์ฌ์ฉํ๋๋ฐ, Document ๋ ๋ค์ํ ํํ์ ๋ฐ์ดํฐ๋ฅผ ํ๋ฒ์ ๋ด์ ์ ์์ผ๋ฏ๋ก ์ฌ๋ฌ๊ฐ์ง ์ ๋ณด๋ฅผ ํ๋์ ๋ณผ ์ ์๊ฒ ํํํด์ค๋ค
๋ํ Application์์ ๋ค๋ฃจ๋ ์ค๋ธ์ ํธ์ 1:1๋ก ๋งค์นญ๋๊ธฐ๋๋ฌธ์ ๊ฐ๋ฐ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฝ๊ฒ ์ดํดํ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ ์ ์๋ค
RDBMS๋ ๋ณต์กํ๊ฒ ํ ์ด๋ธ์ด ์ฝํ์๋ ๊ฒ์ ๋ฐํด, NOSQL์ ํ๋์ ๋ณด๊ธฐ ์ฝ๋๋ก ๊ฐ๋ ์ฑ์ด ๋์์ง๊ฒ์ ํ์ธ ํ ์ ์๋ค.
Index ์ง์(Index Support)
- ๋ค์ํ ์กฐ๊ฑด์ผ๋ก ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ฒ์
- ๋๋ถ๋ถ NoSQL๋ค๊ณผ ๋ค๋ฅธ ๋ชฝ๊ณ ๋๋น ๋ง์ ํฐ ์ฐจ์ด์
- ํ์ํ ํ๋์ ํ์ํ ๋งํผ ์์ฑ ๊ฐ๋ฅ
- ๋์ฉ๋ ๋ฐ์ดํฐ์์ ๋ค์ํ ์กฐ๊ฑด์ผ๋ก ์กฐํ ๊ฐ๋ฅ
- ๋ค์ํ ํํ์ Index ๋ฅผ ์ ๊ณต
- Hashed Index (์ค๋ ํด๋ฌ์คํฐ์์ ๋ฐ์ดํฐ๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ๊ณ ์ ํ ๋ ์ฌ์ฉ)
- Multikey Index
- Partial Index
- TTL Index (์ ํ์๊ฐ์ ์ค์ ํ์ฌ ์ค๋๋ ๋ฐ์ดํฐ๋ฅผ ์๋์ผ๋ก ์ง์์ฃผ๋ ์ธ๋ฑ์ค)
- Geospatial Index (๊ณต๊ฐ์ธ๋ฑ์ค) ๊ณต๊ฐ๋ด์ ๊ฑฐ๋ฆฌ๋ ๋ฒ์๋ฅผ ๊ณ์ฐ ์นด์นด์ค ํ์, ์นด์นด์ค ๋๋ฆฌ, ์นด์นด์ค ๋ชจ๋น๋ฆฌํฐ
๋ชฝ๊ณ ๋๋น ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
- Database :
Collection์ ๋ฌผ๋ฆฌ์ ์ปจํ ์ด๋ - Collection :
RDBMS์์์ table์ด๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
Document์ ๊ทธ๋ฃน, Document์ ๋ด๋ถ์ ์์นํด ์์.
RDBMS์ ๋ฌ๋ฆฌ ์คํค๋ง๋ฅผ ๋ฐ๋ก ๊ฐ๊ณ ์์ง ์์ (๋์ ์คํค๋ง๋ก ์์ฑ) - Document :
nosql์ ๋ค๋ฅธ๋ง๋ก Document Oriented Database๋ผ ํจ.
ํ๊ฐ ์ด์์ key-value ์์ผ๋ก ์ด๋ฃจ์ด์ง ๊ตฌ์กฐ
์ผ๋ฐ rdbms์์๋ row or tuple๊ณผ ์ ์ฌํ๋ค ์๊ฐํ๋ฉด ๋๋ค. - Key/Field :
์ผ๋ฐ Rdbms์์ Column์ด๋ผ ์๊ฐํ๋ฉด ๋๋ค.
์ปฌ๋ผ ๋ช ๊ณผ ์ ์ฅ ๊ฐ์ผ๋ก ์๊ฐํ๋ฉด ์ฝ๋ค.
์ด๋ค์ ๊ด๊ณ๋ฅผ ๊ทธ๋ฆผ์ผ๋ก ํํํ๋ฉด ์๋ ์ด๋ฏธ์ง์ ๊ฐ๋ค.
ํ ์ ์ด์์ Key ์ value๊ฐ pair ๋ก ์ด๋ฃจ์ด์ง Document ๋ค์ด ๋ชจ์ฌ Collection ์ ์ด๋ฃจ๊ณ , Collection ๋ค์ Database ์์ ํฌํจ ๋์ด ์๋ค. ๊ทธ๋ฆฌ๊ณ Database ๋ Server ์์ ์์นํ๋ค.
MongoDB ๋ชจ๋ธ ๊ตฌ์ฑ์ ์์๋ดค์ผ๋ ์ง์ Document ๋ฅผ ๋ชจ๋ธ๋ง ํด๋ณด์.
์ดํด๋ฅผ ๋๊ธฐ์ํด ์ธ์คํ๊ทธ๋จ์ ์ํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ๋ชจ๋ธ๋งํ๋ค๊ณ ๊ฐ์ ํด ๋ณธ๋ค.
์ธ์คํ๊ทธ๋จ์์ ๊ฒ์๋ฌผ์ ์ฌ๋ฆด ๋ ํ์ํ ์ ๋ณด๋ ๋ค์๊ณผ ๊ฐ๋ค.
- ๊ฒ์๊ธ์๋ ์ฌ์ง, ์ค๋ช , ์์ฑ์, ์์ฑ์ผ์ด ํฌํจ๋์ด ์๋ค.
- ๊ฒ์๊ธ์๋ 0๊ฐ ์ด์์ ํด์ฌํ๊ทธ๋ฅผ ๊ฐ์ง ์ ์๋ค.
- ๊ฒ์๊ธ์ ๋ง๊ธ์ ๋ฌ ์ ์๋ค.
๋ง์ฝ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด์ฉํ๋ค๋ฉด table ์ ์ด ์ธ๊ฐ๊ฐ ๋ง๋ค์ด ์ ธ์ผ ํ ๊ฒ์ด๋ค.
comment, article, hashtags ํ ์ด๋ธ๋ค์ ๊ฐ๊ฐ์ ๊ตฌ์กฐ(Schema)๋ฅผ ๊ฐ์ง๊ณ ์๊ณ , table ์์ row ๋ค์ ์ด ๊ตฌ์กฐ๋ฅผ ๋ฐ๋ผ์ผ ํ๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐ ํ ์ด๋ธ์ id ์ ๊ด๊ณ์ฑ์ ์ด์ฉํ์ฌ ์ธ ํ ์ด๋ธ์ JOIN ์์ผ ํ ํ์ด์ง์ ์ถ๋ ฅํ ๊ฒ์ด๋ค.
์์ ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ MongoDB ์์ ์ฒ๋ฆฌํ๋ ค๋ฉด, MongoDB ๋ Schema-less ์ด๋ฏ๋ก ํ๋์ Collection ํ์์ Document ๋ค์ด ๋ชจ๋ ๊ฐ์ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์์ ํ์๊ฐ ์๋ค.
{
_id: POST_ID, title: POST_TITLE,
content: POST_CONTENT,
author: POST_WRITER,
hashtags: [ TAG1, TAG2, TAG3 ], // subdocument
time: POST_TIME
comments: [ // subdocument
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
},
{
username: COMMENT_WRITER,
mesage: COMMENT_MESSAGE,
time: COMMENT_TIME
}
]
}
๋ฐ๋ผ์ ์์ ๊ฐ์ด ํ๋์ Document ์์ ๋ชจ๋ ์ ๋ณด๋ฅผ ํฌํจํ๋ค.
Document ์์ ์๋ hashtags, comments ์ ๋ฐฐ์ด๊ณผ ๊ฐ์ ํ์์ Document ๋ฅผ subdocument ๋ผ๊ณ ํ๋ค.
๋ง์ฝ ์ด๋ค ๊ฒ์๋ฌผ์ ํ๊ทธ๋ ๋ง๊ธ์ด ์๋ค๋ฉด ํด๋น ํ๋๊ฐ ์์ด๋ ์๊ด์๋ค. (Schema-less)
MongoDB์์ ์ฌ์ฉํ๋ JSON vs BSON
๋ชฝ๊ณ DB๋ Document๋ก ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ๊ณ ์๋ค.
์ด๋ ์ฐ๋ฆฌ ๋์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ฐ์๋ณด๋ฉด ๋ชจ๋ JSONํํ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณด์ฌ์ฃผ๊ณ , ์ ์ฅํ๋ค. ๋ ๊ฒ์๊ธฐ๋ฅ์ ์ฌ์ฉํ ๋์๋ JSON๋ฌธ๋ฒ์ ๋ง๊ฒ ์ ๋ ฅํด์ค๋ค.
ํ์ง๋ง ์ ํํ ๋ชฝ๊ณ DB์์๋ ๋ฐ์ดํฐ๋ฅผ BSONํํ๋ก ์ ์ฅํ์ฌ ์ฌ์ฉํ๊ณ ์๋ค.
JSON ํ์
์ผ๋ฐ์ ์ผ๋ก JSON์ JavaScript Object Notation์ ์ค์๋ง๋ก Javascript ์ธ์ด์ ์ผ๋ถ๋ก ์ ์๋์ด์๋ ํ์์ด๋ฉฐ 2013๋ ์ ๊ณต์ํ ๋ ํ์์ด๋ค.
JSON์ ํํ๋ ์ผ๋ฐ์ ์ผ๋ก key์ value์ ๊ฐ์ผ๋ก ์ฑ์์ ธ ์๋ค.
์ง๊ด์ ์ด๊ณ ๊ฐ๋จํ ํน์ฑ์ผ๋ก ์ฝ๊ฒ ์ดํดํ ์ ์๋ ํํ์ ํํ ๋ฐฉ๋ฒ์ด๋ค.
{
"_id": "10009999",
"listing_url": "https://www.aaabbb.com/rooms/10009999",
"name": "Horto flat with small garden",
"summary": "One bedroom + sofa-bed ...",
"cancellation_policy": "flexible",
"last_scraped": {
"$date": {
"$numberLong": "1549861200000"
}
}
}
BSON ํ์
BSON์ ๋จ์ํ ๋งํ๋ฉด Binary JSON์ด๋ค.
JSON๊ณผ ๋์ผํ ๊ตฌ์กฐ์ง๋ง Binary ํํ๋ก ๋ณ๊ฒฝ๋ ๊ตฌ์กฐ๋ฅผ ๋งํ๋ค.
๊ทธ๋ผ JSON์ด ์๋๋ฐ ์ BSON์ด ๋ฑ์ฅํ ๊ฒ์ผ๊น?
๋ชฝ๊ณ DB๊ฐ ์ฒ์ ๊ฐ๋ฐ๋ ๋์๋ JSON์ ์ด์ฉํด์ ๊ฐ๋ฐ์ ์งํํ๋ค๊ณ ํ๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋ฌธ์ ์ ๋ช๊ฐ์ง๊ฐ ๋ํ๋๊ธฐ ์์ํ ๊ฒ์ด๋ค.
- JSON์ ํ ์คํธ ๊ธฐ๋ฐ์ผ๋ก ๊ตฌ๋ฌธ ๋ถ์์ด ๋งค์ฐ ๋๋ฆฌ๋ค.
- JSON์ ๊ณต๊ฐ ํจ์จ์ฑ๊ณผ๋ ๊ฑฐ๋ฆฌ๊ฐ ๋ฉ๋ค. (๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฌธ์ )
์ด ์ธ์๋ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๊ณ ์ํด ๋ธ๊ฒ์ด ๋ฐ๋ก BJSON ์ธ ๊ฒ์ด๋ค.
JSON๊ตฌ์กฐ์ ์ข์์ ์ ๊ทธ๋๋ก ๊ฐ์ ธ๊ฐ๋ฉด์ ๊ธฐ๊ณ๊ฐ ๋น ๋ฅด๊ฒ ์ฝ์ ์ ์๋ binary ํํ๋ก ๋ณ๊ฒฝํ์ฌ ์ ์ฅ์ ํ ๊ฒ์ด๋ค.
๋์ผํ ํํ๋ก ์ฌ๋์๊ฒ ๋ณด์ฌ์ง ๋์๋ JSON์ ํํ๋ก ๋ณด์ฌ์ฃผ๊ณ , ์ ์ฅํ ๋๋ ๋คํธ์ํฌ๋ก ์ ์กํ ๋์๋ BSON ํํ๋ก ๋ง๋ค์ด์ ์ ์ฅ ๋๋ ์ ์กํ๋ค.
{"hello": "world"}
→ \x16\x00\x00\x00 // total document size
\x02 // 0x02 = type String
hello\x00 // field name
\x06\x00\x00\x00world\x00 // field value
\x00 // 0x00 = type EOO ('end of object')
๋ํ JSON์์๋ ํํํ ์ ์๋ ๋ฐฉ๋ฒ์ด ๋ฌธ์์ด, boolean, ์ซ์, ๋ฐฐ์ด ๋ฟ์ด๋ค.
๊ทธ์ ๋ฐํด BSON์์๋ ์กฐ๊ธ ๋ ๋ํ ์ผํ๊ฒ ํํํ ์ ์๋ค. ์๋ฅผ๋ค์ด์ ์ซ์์ ๊ฒฝ์ฐ๋ Integer, Float, Long, Decimal๊ณผ ๊ฐ์ด ๋ถ๋ฅ๊ฐ ๋๋ฉฐ ๋ ์ง์ ํํ๋ ์ ์ฅ์ด ๊ฐ๋ฅํ๋ค.