Community

๐ŸŒฟ 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 ์— ๋Œ€ํ•ด ํ‰์†Œ ๊ถ๊ธˆํ•˜์…จ๊ฑฐ๋‚˜ ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ์œผ์…จ๋˜ ๋ถ„๋“ค์€ ์ถ”๊ฐ€๋กœ ์ฝ์–ด๋ณด์‹œ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ

์•Œ๋ฆผ์ด ์—†์Šต๋‹ˆ๋‹ค