NoSQL ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค ๊ฐ์ฅ ์ฌ๋๋ฐ๊ณ ์๋ ๋ชฝ๊ณ DB!
๋ชฝ๊ณ DB ์ฐ ํ์ฉ๋ฒ์ ์๋ ค๋๋ฆด๊ฒ์. ๐
์ฃผ์ ์๊ฐ ๐
mongoDB ์ด๋ฆ์ Humongous, "๊ฑฐ๋ํ"์์ ์ด๋ฆ์ ๋ฐ์๋๋ฐ์. ๋น
๋ฐ์ดํฐ ํค์๋๋ค์ด ์๊ธฐ๊ธฐ ์์ํ ์ธํฐ๋ท ๋ถ ์ดํ 2009๋
์ ์ถ์๋ NoSQL ๊ธฐ๋ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ์๋น์ค ๊ฐ๋ฐ์ ํต์ฌ ๊ทผ๊ฐ์ด ๋์ฃ . mongoDB์ ๋ค๋ฅด๊ฒ ์ฐ๋ฆฌ์๊ฒ ์ต์ํ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(MySQL, PostgreSQL)๋ ์ด๋ฏธ 20๋
๋ ๋์ ์ค๋๋ ๊ธฐ์ ์ด์์. ์ง์์ ์ผ๋ก ์๋ก์ด ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ ๊ธฐ์ ๋ค์ด ํ์ํ๋ ํ๋ก๊ทธ๋๋ฐ ์ํ๊ณ์ธ๋ฐ ์ด๋ ๊ฒ ๋ณํ๊ฐ ์ ์ ๋ถ์ผ๊ฐ ์๋ค๋๊ฒ ์ ๊ธฐํ์ฃ . ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ๊ทธ๋งํผ ์ค์ํ๊ณ ๋ณด์์ ์ธ ๊ธฐ์ ์
๋๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ฐ๋๋ฉด ๊ทธ ์์ ๋ง๋ค์ด์ง๋ ๋ฐฑ์๋๋ ๋ฌผ๋ก ํ๋ก ํธ์๋๊น์ง๋ ์ํฅ์ ์ค ์ ์์ด์. ๊ทธ๋ฌ๋ค๋ณด๋ ๋ค์ ์์ํ ๊ธฐ์ ์ธ ๋ชฝ๊ณ ๋๋น์ ๊ดํ ๋ค์ํ ์๋ฌธ์ ๋ค๋ ์๊ธฐ๊ณ ์คํจ ์ ์ฉ ์ฌ๋ก๋ค๋ ์ข
์ข
๋ณด์
๋๋ค:
- ๋ชฝ๊ณ ๋๋น๋ ์ํฉ์ ๋ฐ๋ผ ์ฌ์ฉํด์ผ ๋๋ค?
- e-commerce๋ ๋ฌด์กฐ๊ฑด RDS ์๋๊ฐ?
- ์ด๋ฐ์ ๋น ๋ฅด๊ฒ ๊ฐ๋จํ๊ฒ ๊ฐ๋ฐํ๊ธฐ์๋ ์ข์ง๋ง ๋์ค์ ๊ฐ๋ฉด ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ๋ ์ข๋ค?
- JOIN๋ ์ง์ํ์ง ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ผ๋..?
์๋ฌด๋๋ ๋น๊ต์ ์ ์ ๊ธฐ์ ์ด๊ณ ๋
ธํ์ฐ๊ฐ ์ถฉ๋ถํ ์๋ ค์ง์ง ์์์ ๋ฐ์ํ ๋ฌธ์ ๋ค์ด๋ผ๊ณ ์๊ฐํด์. mongoDB๋ ๊ด๊ณํ์ฒ๋ผ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๊ณ e-commerce๋ ๋น์ฐํ mongoDB๋ก ๊ฐ๋ฐํ ์ ์์ด์(๊ฒฝํ์์
๋๋ค). ๊ทธ๋ฆฌ๊ณ ์ ๋๋ก ์ฌ์ฉํ๋ค๋ฉด ๋ํ ํธ๋ํฝ์ด ๋ฐ์ํ์ ๋ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ณด๋ค ํจ์ฌ ํจ์จ์ ์ด์์.
์ ์ด์ ์ ์ฉ ์คํจ ์ฌ๋ก๊ฐ ์๊ธฐ๋ ์์ธ์ด ๋ญ๊น์? mongoDB ์ฒ ํ์ ์ดํด ํ์ง ๋ชปํด์์์. ๋จ์ ์ฌ์ฉ๋ฐฉ๋ฒ๋ง ๊ณต๋ถํด์๋ ๋ถ์กฑํด์. ๊ทธ๋ฆฌ๊ณ ๋ฌด์๋ณด๋ค ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ฒ๋ผ ์ ๊ทผํ๋ฉด ์๋ผ์. mongoDB๊ฐ ์ ๊ทผํ๋ ๋ฌธ์ ํด๊ฒฐ๋ฐฉ๋ฒ์ ๊ทผ๋ณธ์ ์ผ๋ก ๋ค๋ฅธ ๋ถ๋ถ๋ค์ด ๋ง์์. ์ด๋ฐ ํน์ฑ์ ์ ์ดํดํ๊ณ mongoDB์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ฉด mongoDB๋ ์ฅ์ ์ด ์ ๋ง ๋ง์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์
๋๋ค.
์ ๋ฐฐ์์ผ ํ๋์ง โ๏ธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค๊ฐ ํธ๋ํฝ ๋ณ๋ชฉ์ด ๋๊ธฐ ์ฌ์ด๋ฐ mongoDB๊ฐ ์ด ํ์ฅ์ฑ ๋ฌธ์ ๋ฅผ ๊ทผ๋ณธ์ ์ผ๋ก ํด๊ฒฐํ ์ ์์ด์.
- ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ฐ์ด ๋ฐฐ์ฐ๋ฉด์ mongoDB๋ฅผ ์ ๋๋ก ํ์ตํ ์ ์์ด์. ๋ฐฑ์๋ ๊ฐ๋ฐ๊ณผ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ ํ๋ชธ์ด์์!
- ์น๊ฐ๋ฐ์์ ํต์ ํ๋ ๋ฐ์ดํฐ๋ ๋๋ถ๋ถ JSON ํ์์ธ๋ฐ์. mongoDB๊ฐ ์ ์ฅํ๋ ๋ฐ์ดํฐ ํ์์ JSON(BSON)์ด์์. ๋ฐ๋ผ์ ์ค๊ฐ์ ๋ฐฑ์๋์์ ๋ฐ์ดํฐ ๋ณํ์ ํ๊ฑฐ๋ ORM์ ์ฌ์ฉํ ํ์๊ฐ ๊ฑฐ์ ์์ด์ ธ์. ๊ทธ๋งํผ ์ง์
์ฅ๋ฒฝ์ด ๋ฎ์์ง๊ธฐ๋ ํด์.
- ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ ํ ์ ์๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์. NoSQL ๋ฐ์ดํฐ๋ฒ ์ด์ค ํน์ฑ์ ACID Transaction์ด ์ง์ ์๋ผ๋ ๊ฒฝ์ฐ๊ฐ ๋๋ถ๋ถ์ธ๋ฐ์. mongoDB๋ NoSQL์ ์ํ์ ํ์ฅ ํน์ฑ์ ๊ฐ์ง๋ฉด์ ๋ฒ์ 4.0๋ถํฐ ACID Transaction์ ์ง์ํ๊ณ ์์ด์.
- ๊ฐ์ ์ด๋ฐ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง๊ณ ๋์ด๊ฐ๋๋ฐ์. ๋ฐฑ์๋๊ฐ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํจ์จ์ ์ผ๋ก ํต์ ํ๊ธฐ ์ํ ํ์์ ์ธ ๊ฐ๋
์ด์์.
์ด ๊ฐ์์์ ๋ฐฐ์ฐ๋ ๊ฒ๋ค โ๏ธ
- mongoDB ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ - CRUD
- mongoDB Atlas - ๋ฉ๋์ง๋ ํด๋ผ์ฐ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค ๋ฐฐํฌํ๊ธฐ
- ๋น๋๊ธฐ(async) ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ๋ฐฑ์๋ ํจ์จ ๊ทน๋ํ์ํค๊ธฐ
- Express ํ๋ ์์ํฌ๋ก REST API ๋ง๋ค๊ธฐ
- ๊ด๊ณ๋ ๋ฐ์ดํฐ ํจ์จ์ ์ผ๋ก ์ฝ๋ ๋ฐฉ๋ฒ(populate)
- ์์ ๋ฌธ์๋ฅผ ๋ถ๋ชจ ๋ฌธ์์ ์ ์ ํ๊ฒ ๋ด์ฅํด์ ์ฝ๊ธฐ ํผํฌ๋จผ์ค ๊ทน๋ํ์ํค๊ธฐ
- Index ์ ์ฉ์ผ๋ก ํ์ ํผํฌ๋จผ์ค ๊ทน๋ํ
- ํธ๋ ์ ์
(Multi Document Transaction) ํ์ฉํด์ ์ผ๊ด์ฑ ์๊ฒ ๋ฐ์ดํฐ ๊ด๋ฆฌํ๊ธฐ
- AWS lightsail์ ๋ฐฑ์๋ ์๋ฒ ๋ฐฐํฌํ๊ธฐ
- ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค(relational database)์ mongoDB ๋น๊ตํ๊ธฐ
์๋๋ ๊ฐ์์์ ์ฌ์ฉ๋๋ ์ผ๋ถ ์๋ฃ๋ค์
๋๋ค :)
์ฌ๊ธฐ์ ๋ค๋ฃจ๋ ๊ธฐ์ ๋ค ๐งฐ
mongoDB, Node.js, Javascript, Postman, AWS, mongoDB Atlas
์์ ์ง๋ฌธ Q&A ๐๐ปโโ๏ธ
Q. Node.js(Javascript) ๊ฐ๋ฐ์๋ฅผ ์ํ ๊ฐ์์ธ๊ฐ์?
A. ์ด ๊ฐ์๋ mongoDB ๊ฐ์์์. Node.js๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ mongoDB๋ฅผ ์ ๋๋ก ํ์ฉํ๋ ์ ์ฒด์ ์ธ ํ๋ฆ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํ ์๋จ์ด์์. ๋ฐ๋ผ์ ๋ค๋ฅธ ์ธ์ด๋ก ๋ฐฑ์๋ ๊ฐ๋ฐ์ ํ๊ณ ๊ณ์
๋ ์๊ฐํ์ค ์ ์์ต๋๋ค. Node.js ๊ด๋ จ ๋ค๋ฃจ๋ ๋ถ๋ถ์ ๋ฒ์ฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ด์ ์ธ ๊ฐ๋
๋ค(REST API, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ)์ด์์. ๊ฐ๋
๋ค์ ์ ์ดํดํ์๋ฉด mongoDB๋ฅผ ์ด๋ ํ ๊ฐ๋ฐ ํ๊ฒฝ์์๋ ์ ์ฌ์ฉํ์ค ์ ์์๊ฑฐ์์ :)
Q. ๋ฐฑ์๋(Node.js)๋ฅผ ๊ฐ์ด ๋ค๋ฃจ๋ ์ด์ ๊ฐ ์๋์?
A. ์ด ๊ฐ์๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ mongoDB ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ์ค๊ณํ๊ณ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๊ฐ๋ฅด์ณ ๋๋ ค์. ๊ทธ๋์ ๊ฐ์ ์ด๋ฐ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ ์ ์๋๋ก ๊ธฐ๋ณธ์ ์ธ ๋ฐฑ์๋ ๊ฐ๋ฐ์ ๊ฐ์ด ๊ฐ๋ฅด์ณ๋๋ ค์. ๊ทธ๋ฆฌ๊ณ ์ด ๊ฐ์๋ DevOps ๊ฐ์๊ฐ ์๋์์. ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ด๋ป๊ฒ ์ค์นํ๊ณ replica set, sharding์ ์ด๋ป๊ฒ ๊ตฌ์ถํ๊ณ ๊ด๋ฆฌํ๋์ง ๊ฐ๋ฅด์ณ๋๋ฆฌ์ง ์์์. ๋์ ์ด๋ฐ DevOps ์์ญ์ ์๋ํํด์ฃผ๋ ๋ฉ๋์ง๋ ํด๋ผ์ฐ๋ ์๋น์ค, mongoDB Atlas๋ฅผ ์ฌ์ฉํ๊ฒ ๋์.
Q. MongoDB Aggregate๋ ๋ฐฐ์ฐ๋์?
A. ์ด๋ฒ ๊ฐ์์์๋ "์ผ๋ฐ์ ์ธ" ๋ฐฑ์๋ ๊ฐ๋ฐ์์ ๋ชฝ๊ณ ๋๋น๋ฅผ ๋ชฝ๊ณ ๋๋น์ค๋ฝ๊ฒ ์ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ์ด์ ์ ๋์์ต๋๋ค. ํธ์ถ ๋น๋๊ฐ ๋์ ์ผ๋ฐ API์์ Aggregate๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋น์ ๋ถํ๊ฐ ๊ฐ ์ ์์ด์ ๊ถ์ฅํ์ง ์์์. ์ฝ๊ฒ ์๊ฐํ๋ฉด Aggregate๋ฅผ ์์ฃผ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ชฝ๊ณ ๋๋น์ค๋ฝ๊ฒ ์ฌ์ฉํ์ง ๋ชปํ๊ณ ๊ด๊ณํ ๋๋น์ฒ๋ผ ์ฌ์ฉํ๊ฒ ๋๋๊ฑฐ๋ผ๊ณ ๋ณด์๋ฉด ๋์. ๋ฐ๋ผ์ ์ด ๊ฐ์์์๋ Aggregate ๊ด๋ จ ๋ด์ฉ์ ํฌํจํ์ง ์ํฌ์ต๋๋ค. Aggregate ์์ด ๋ชฝ๊ณ ๋๋น๋ฅผ ์ฌ๋ฐ๋ฅด๊ฒ ํ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ๋๋ฆฝ๋๋ค! ๊ทธ๋ ๋ค๊ณ Aggregate๊ฐ ์์ข๋ค๋๊ฑด ์ ๋ ์๋๋๋ค. ์ฌ์ฉ์ฉ๋๊ฐ ๋ฐ๋ก ์์๋ฟ์ด์์. ํต๊ณ๋ฅผ ๋ด๊ฑฐ๋ ๋์ฉ๋ ๋ฐ์ดํฐ ๊ฐ๊ณต ๋ฑ Data Engineering ์์ญ์์ ๋งค์ฐ ๊ฐ๋ ฅํ ๋๊ตฌ์
๋๋ค. ์ผ๋ฐ์ ์ธ API๋ค๊ณผ ๋น๊ตํ์ ๋ ์ด๋ฌํ Data Engineering ์ฒ๋ฆฌ๋ค์ ํธ์ถ ๋น๋๊ฐ ํจ์ฌ ์ ๊ณ ์๋ต์๋๊ฐ ์ค๋ ๊ฑธ๋ ค๋ ๋ฑํ ์๊ด ์๋ค๋ ํน์ง์ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด ๋ถ๊ธฐ๋ณ๋ก ๋งค์ถํํฉ์ ์ถ์ถํ๊ณ ์ถ๋ค๋ฉด ๋ถ๊ธฐ์ ํ๋ฒ์ฉ aggregate ๋ฐฐ์น๋ฅผ ๋๋ ค์ ๊ฒฐ๊ณผ๊ฐ์ ์ ์ฅํด๋์๋ค๊ณ ๊ฒฐ๊ณผ๊ฐ์ ๋น ๋ฅด๊ฒ ๋ถ๋ฌ์ค๋ฉด ๋๊ฒ ์ฃ . ์ฐจํ์ MongoDB ๊ธฐ๋ฐ Data Engineer ๊ฐ์๋ ์ ์ํ ์์ ์ธ๋ฐ์. ์ด ๋ MongoDB Aggregate๋ ๋ฌผ๋ก , MongoDB Data Lake๋ก ๋น
๋ฐ์ดํฐ ๊ด๋ฆฌ ๊ทธ๋ฆฌ๊ณ MongoDB Charts๋ก ๋ฐ์ดํฐ ์๊ฐํ๊น์ง ๋ค๋ฃฐ ์์ ์
๋๋ค!
Q. ์ด ๊ฐ์๋ฅผ ์์ํ๊ฒ ๋ ๊ณ๊ธฐ๋ฅผ ์๊ฐํด์ฃผ์ธ์.
A. ์ ๋ ๋น์ ๊ณต์ ์ถ์ ์ด์์. ์จ๋ผ์ธ์ ๋ฟ๋ ค์ง ํํธ๋ ์๋ฃ๋ค์ ๋ณด๊ณ ๋ถ์ํ๊ณ ์ ์ฉํด๋ณด๋ฉด์ ๋ฐฐ์ ์ด์. ์ด ๊ณผ์ ์ ๋ฐ๋ณตํ๋ค๋ณด๋ฉด ๊ฐ๋
๋ค์ด ์ถ์ํ๊ฐ ๋๋ฉด์ ์ ๋ฆฌ๊ฐ ๋์. ์ฌ๊ธฐ์ ๋งํ๋ "์ถ์ํ"๋ ์ ๋ง ์ค์ํ ๊ฐ๋
์ธ๋ฐ์. ๊ฐ๋ฐ์ ํ ๋ ์๋น์ค๊ฐ ๋์๊ฐ๊ฒ๋ ๋จ์ ๊ธฐ๋ฅ ๊ตฌํ๋ง ํ ์ ์์ด์. ๊ทผ๋ฐ "์ถ์ํ"๊ฐ ์ ๋ ๊ฐ๋ฐ์๋ "์ ์๋ํ๋", "ํ์ฅ์ฑ ์๋" ์๋น์ค๋ฅผ ๋ง๋ค ์ ์์ด์. ๋ค๋ฅธ ํํ์ผ๋ก๋ Why๋ฅผ ์ ์ดํดํ๊ณ ์๋ ๊ฐ๋ฐ์๋ผ๊ณ ํ ์๋ ์๊ฒ ๋ค์. ๊ทธ๋ฐ๋ฐ ๋น๊ต์ ์ต์ ๊ธฐ์ ์ผ์๋ก ์ปค๋ฎค๋ํฐ ์ ๋ฒ์์ผ๋ก Why์ ๋ํ ์ดํด๋๊ฐ ๋จ์ด์ง๋๋ค. ๊ทธ๋์ ์๋์ ์ผ๋ก ๋ฏ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ธ mongoDB๋ฅผ ์ฃผ์ ๋ก ๊ฐ์๋ฅผ ์ ์ํด๋ดค์ด์. Why๋ฅผ ์ ์ดํดํ์๊ณ ์ข์ ์๋น์ค ๋ง์ด ๋ง๋ค์ด์ฃผ์ธ์!