๐ฟ MongoDB Schema Best Practice
์ ๋ฌด๋ฅผ ์งํํ๋ค๊ฐ ํ์๋ถ๊ป์ ์ค๊ณํ์ ์ ๊ท ๊ธฐ๋ฅ์ ๋ํ ๋ฆฌ๋ทฐ๋ฅผ ์งํํ์๋๋ฐ์, MongoDB Schema ์ ๊ด๋ จ๋ ๋ฆฌ๋ทฐ๊ฐ ์งํ๋์์ ๋ ๊ณผ์ฐ ์ด ์ค๊ณ๊ฐ ๋ง๋์ง ๋ช ํํ๊ฒ ๋ต์ ์ค ์ ์์๊ณ ์ด๋ถ๋ถ์ ๋ํด ๋ง์ ๋ถ์กฑํจ์ด ์๋ค๋๊ฒ์ ๊นจ๋ฌ์์ต๋๋ค. ๊ทธ๋์ MongoDB Schema ์ค๊ณ์ Best Practice ๋ ๊ณผ์ฐ ๋ฌด์์ผ๊น์ ๋ํด ์ฐพ์๋ณด๋ MongoDB ์์ ๋งค์ฐ ์น์ ํ๊ฒ ์ ๋ฆฌ๋ฅผ ํด์ฃผ์ จ๋๋ผ๊ณ ์. ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๋ถ๋ค์ ๊ต์ก์ด๋ ํน์ ๊ณผ๊ฑฐ์ ์งํํ ํ๋ก์ ํธ๋ค๋ก ์ธํด NoSQL ๋ณด๋ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(RDBMS) ๋ฅผ ๋จผ์ ์ฌ์ฉํ์๋๊ฒ ์ผ๋ฐ์ ์ด๋ผ๊ณ ์๊ฐ์ด ๋ญ๋๋ค. ๊ทธ๋ก ์ธํด MongoDB ์ ๊ฐ์ Document Base ์ NoSQL Schema ๋ฅผ ์ค๊ณํ์ค ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ค๋ฃจ๋ ์ค๊ณ ์ฒ ํ์ ๊ทธ๋๋ก ์ฌ์ฉํ์ค ๋๊ฐ ์์ต๋๋ค. ๋ฌผ๋ก ๊ทธ๋ ๊ฒ ํด๋ ์๋๋๊ฑด ์๋์ง๋ง, ๊ฒฝ์ฐ์ ๋ฐ๋ผ์๋ MongoDB ๋ฅผ ํตํด ์ป์ ์ ์๋ ์ด์ ์ ์์ด๋ฒ๋ฆฌ๋ ๊ฒฐ๊ณผ๋ฅผ ์ด๋ํ ์ ์์ต๋๋ค. MongoDB ์์ ์ ๋ฆฌํ Schema ์ค๊ณ์ ์ผ๋ฐ์ ์ธ ๊ท์น์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. โ๏ธ ํน๋ณํ ์ด์(Document ์ฌ์ด์ฆ, Transaction ๋ฑ)๊ฐ ์์ง ์๋ค๋ฉด, Embedding(ํ Document ์ ๋ชจ๋ ์ ๋ณด๋ฅผ ๋ฃ๋ ํํ) ์ ์ฌ์ฉํ๋ค. โ๏ธ ์ด๋ฏธ ์กด์ฌํ๋ Document ํน์ ๊ฐ์ฒด๋ฅผ Embedding(ํฌํจ) ํ์ง ๋ง๊ณ ์ ๊ทผ ๊ฐ๋ฅํ ObjectId ๋ฅผ ์ฐธ์กฐํ๋ค. โ๏ธ ๊ฐ๋ฅํ๋ค๋ฉด join ๊ณผ lookup ์ ํผํ๋๊ฒ ์ข์ง๋ง, ์ข์ schema ์ ๋๋ฌํ ์ ์๋ค๋ฉด ์ฌ์ฉํด๋ ๋๋ค. โ๏ธ ๋ฐฐ์ด ํํ์ ํ๋๋ ์ ํ์์ด ์ปค์ง๋ฉด ์๋๋ค. ๋์ ์นด๋๋๋ฆฌํฐ ๋ฐฐ์ด์ ํฌํจํ์ง ์๋ ๊ฒ์ด ์ข๋ค. โ๏ธ ๋ฐ์ดํฐ๋ฅผ ๋ชจ๋ธ๋งํ๋ ๋ฐฉ๋ฒ์ ์ ์ ์ผ๋ก ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฐ์ดํฐ ์ก์ธ์ค ํจํด์ ๋ฐ๋ผ ๋ค๋ฅด๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ์ฟผ๋ฆฌํ๊ณ ์ ๋ฐ์ดํธํ๋ ๋ฐฉ์๊ณผ ์ผ์นํ๋๋ก ๋ฐ์ดํฐ๋ฅผ ๊ตฌ์กฐํ ํ๋ค. ๊ณต์ ๋๋ฆฐ ๋งํฌ์ ์ํฉ์ ๋ง๋ ์ํ๊ณผ Anti Pattern, Data Modeling ์ ๋ํ Reference ๊ฐ ์์ผ๋ MongoDB Schema ์ ๋ํด ํ์ ๊ถ๊ธํ์ จ๊ฑฐ๋ ๊ณต๋ถํ๊ณ ์ถ์ผ์ จ๋ ๋ถ๋ค์ ์ถ๊ฐ๋ก ์ฝ์ด๋ณด์๋ฉด ์ข๊ฒ ์ต๋๋ค.