MongoDB vs PostgreSQL

๊ฐœ๋ฐœ์ƒˆ๋ฐœยท2022๋…„ 1์›” 23์ผ
1

db

๋ชฉ๋ก ๋ณด๊ธฐ
4/10

์„œ๋ก ๐Ÿคฅ : ์ด๋ฒˆ์—๋Š” MongoDB๋‹ค..! ์ง„์งœ ์ด์งํ•˜๊ณ ๋‚˜์„œ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฒƒ ๊ฐ™๋‹ค... ๋‚ด๊ฐ€ ๋‹ค์–‘ํ•˜๊ฒŒ ๊ฒฝํ—˜ํ•˜๋Š” ๊ฑธ ์ข‹์•„ํ•˜๋Š” ์ค„ ์•Œ์•˜๋Š”๋ฐ... ใ…‹ใ…‹ ์ง„์งœ ํ•˜๋‹ค๋ณด๋‹ˆ ๋์ด ์—†์–ด์„œ ์ง€์ณ๊ฐ€๋Š”๋“ฏ ใ…  ํŒ€์žฅ๋‹˜๊ป˜์„œ ๋จผ์ € postgreSQL ๋กœ ๋Œ€์ถฉ API ํ•˜๋‚˜ ์งœ๋‹ฌ๋ผ๊ณ  ํ•˜์…จ์—ˆ๋Š”๋ฐ.. ์‚ฌ์‹ค mongoDB ๋กœ ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด์˜€๋˜์ง€๋ผ.. ๊ทธ๋ƒฅ mongoDB๋กœ ์ง„ํ–‰ํ•˜์ž๊ณ  ํ–ˆ๋‹ค. ์ƒ๊ฐํ•ด๋ณด๋‹ˆ ๋‚ด๊ฐ€ ์ด ๋‘๊ฐœ์˜ ์ฐจ์ด์ ์„ ๋ชจ๋ฅด๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์•„ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ด์ „์—” mysql ๋กœ๋งŒ ์‚ฌ์šฉํ–ˆ์—ˆ๋Š”๋ฐ, nosql์ด๋ผ๊ณ  ๋ถˆ๋ฆฌ๋Š” mongoDB๋ฅผ ์ฒ˜์Œ์จ๋ณด๋‹ˆ ์ถฉ๊ฒฉ์ ์ธ ๊ฒŒ ๋„ˆ๋ฌด ๋งŽ์•˜๋‹ค.


๐Ÿ““MongoDB๋ž€?

  • document ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ด์ž NoSQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ์„œ ๊ธฐ์กด์˜ RDBMS์™€ ๋‹ค๋ฅด๋‹ค. ๋ณธ์งˆ์ ์œผ๋กœ๋Š” ๋” ๋‹จ์ˆœํ•ด์„œ ๋น„๊ต์  ๋ฐฐ์šฐ๊ธฐ ์‰ฝ๋‹ค๊ณ  ํ•œ๋‹ค. (์ฒ˜์Œ์— mysql๋กœ ๋ฐฐ์›Œ์„œ ๊ทธ๋Ÿฐ๊ฐ€...๋‚œ ์•„๋‹˜ ๐Ÿฅบ)
  • document ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ฐ์ดํ„ฐ ํ˜•ํƒœ๋Š” json-type ๋ฌธ์„œ๋ผ๊ณ  ํ•œ๋‹ค. ์ด ๋ฐ์ดํ„ฐ๋Š” ์™„์ „ํžˆ ๊ตฌ์กฐํ™”๋˜์ง€ ์•Š๊ณ  ๋ฐ˜๊ตฌ์กฐํ™”ํ˜•ํƒœ๋ผ๊ณ  ํ•œ๋‹ค.(๋ฌด์Šจ ๋ง์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์ •๋ฆฌ๋˜์–ด์žˆ์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ๋ผ๋Š” ๋ง์ผ๊นŒ? ๊ธฐ์กด mysql์˜ ๊ฒฝ์šฐ์—๋Š” ํ•˜๋‚˜์˜ row์— ์—ฌ๋Ÿฌ ์ปฌ๋Ÿผ์ด ์ •๋ฆฌ๊ฐ€ ๋˜์„œ ๋‚˜์˜ค๋Š”๋ฐ mongodb์˜ ๊ฒฝ์šฐ์—๋Š” { id: ~~ } ์ด๋Ÿฐ ํ˜•ํƒœ์˜ json type์œผ๋กœ ๋‚˜์˜จ๋‹ค.) ์ด๋Ÿฌํ•œ ํ˜•ํƒœ๋Š” ๋‹ค๋ฅธ ๊ฒƒ๋“ค๋ณด๋‹ค ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ๋” ๋น ๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋‹ค์–‘ํ•œ ์ฒ˜๋ฆฌ์™€ ๋‹ค์–‘ํ•œ ํ˜•์‹ ๋ฐ ๊ตฌ์กฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ ๋˜๋Š” ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ์ฆ‰, ๊ด€๊ณ„ํ˜•๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณด๋‹ค ์œ ์—ฐ์„ฑ์ด ๋†’๋‹ค๋Š” ๋ง์ด๋‹ค.
  • ๊ด€๊ณ„ํ˜•๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ์ง€์ •ํ•ด๋‘๊ณ  ํ…Œ์ด๋ธ”์„ ๋งŒ๋“  ํ›„ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋ฉด ๊ทธ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์—ˆ๋Š”๋ฐ ๋ฐ˜ํ•ด, mongodb๋Š” ๋ฐ์ดํ„ฐ์— ์—‘์„ธ์Šค๋ฅผ ํ•œ ํ›„ ํ•„์š”ํ—ค ๋”ฐ๋ผ์„œ ์Šคํ‚ค๋งˆ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ฑฐ๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
  • mongodb๋Š” BSON์ด๋ผ๋Š” binary json์„ ์‚ฌ์šฉํ•œ๋‹ค. BSON์€ json์—์„œ ์‚ฌ์šฉํ•˜๋Š” long, floating-point, date ํƒ€์ž…๊ณผ ๊ฐ™์€ ํƒ€์ž…์€ ํ—ˆ์šฉํ•˜์ง€ ์•Š๊ณ  ํŠน์ • ํƒ€์ž…๋งŒ ํ—ˆ์šฉ๋œ๋‹ค.
  • ์ฟผ๋ฆฌ๋ฌธ ๋˜ํ•œ SQL์ด๋ผ๊ณ  ๋ถ€๋ฅด์ง€ ์•Š๊ณ  MQL์ด๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค. MQL๋Š” SQL๊ณผ ๋™์ผํ•œ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.
  • ๋ถ„์‚ฐ ์•„ํ‚คํ…์ณ ์˜ ํŠน์ง•์„ ๊ฐ–๊ณ  ์žˆ๋‹ค. ํ™•์žฅ์„ฑ์ด ์–ด๋งˆ์–ด๋งˆํ•˜๊ฒŒ ํฌ๋‹ค. ๊ด€๊ณ„ํ˜•๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” ์ˆ˜์ง์„ฑํ™•์žฅ์€ ์šฉ์ดํ•˜๊ณ  ์ˆ˜ํ‰์  ํ™•์žฅ์ด ์‰ฝ์ง€ ์•Š์€ ๊ฐ€๋Šฅํ•œ ๋ฐ˜๋ฉด์—, mongodb๋Š” ์ˆ˜ํ‰์„ฑํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. (์ˆ˜์ง์  ํ™•์žฅ์„ฑ : ํ•˜๋‚˜์˜ ๋จธ์‹ ์— ๋ฆฌ์†Œ์Šค๋ฅผ ์ถ”๊ฐ€/์ˆ˜ํ‰์  ํ™•์žฅ์„ฑ : ๋จธ์‹ ์˜ ๊ฐฏ์ˆ˜๋ฅผ ๋Š˜๋ฆฌ๋Š” ๊ฒƒ)
  • TLS, SSl์„ ํ†ตํ•ด์„œ ํด๋ผ์ด์–ธํŠธ ์ธก ์•”ํ˜ธํ™” ์ œ๊ณต์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํŠธ๋žœ์žญ์…˜ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ํ…Œ์ด๋ธ” ๋Œ€์‹  ์ปฌ๋ ‰์…˜์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ๋ฌธ์„œ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š”๋‹ค.
  • ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ์ง€์›ํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • group_by ๋Œ€์‹  ์ง‘๊ณ„ ํŒŒ์ดํ”„๋ผ์ธ(?)์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๋Š”๋‹ค.
  • replica set ์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ์…‹์„ ์œ ์ง€ํ•œ๋‹ค.
  • join๋Œ€์‹ ์— indexes๋ผ๋Š” ๊ฒƒ์„ ์‚ฌ์šฉํ•œ๋‹ค. ๋‹จ, ํ•˜๋‚˜์˜ ์ปดํฌ๋„ŒํŠธ์™€๋งŒ ๊ฐ€๋Šฅํ•˜๋‹ค. mongodb๋Š” join์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ์œ„ํ•ด ๋””์ž์ธ์ด ๋œ ๊ฒŒ ์•„๋‹ˆ๋‹ค. indexes๋Š” ์ ์€ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ์ฝ์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ๋กœ ์ €์žฅํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜๋Š” ๋ฐ์ดํ„ฐ ๊ตฌ์กฐ ์œ ํ˜•์ด๋‹ค.

๐Ÿ“ฆPostgreSQL์ด๋ž€?

  • ๊ตฌ์กฐํ™”๋œ ๊ฐ์ฒด๋กœ ์ €์žฅํ•˜๋Š” ORD์ด๋‹ค. ์ „ํ†ต์ ์ธ ๊ตฌ๋ฌธ๊ณผ ์Šคํ‚ค๋งˆ๋ฅผ ๋”ฐ๋ฅธ๋‹ค. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋ฐ์ดํ„ฐ๋ฅผ ๋„ฃ๊ธฐ ์ „์— ๋ฐ์ดํ„ฐ๋ฅผ ๋จผ์ € ๊ตฌ์กฐํ™” ํ•ด์•ผํ•œ๋‹ค. ์‹œ๊ฐ„์ด ๋” ๊ฑธ๋ฆฌ๊ธด ํ•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋” ์‰ฝ๊ณ  ์ฝ๊ธฐ ์‰ฌ์šด ํ˜•ํƒœ๋กœ ๋งŒ๋“ค์–ด์ค€๋‹ค.
  • ๊ธฐ๋ณธ์ ์ธ ํŒŒ์ผ ๋ณดํ˜ธ, ip๋ฅผ ํ†ตํ•ด ํŠน์ • ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ ์ œํ•œ๊ธฐ๋Šฅ ๋“ฑ์˜ ์•ˆ์ „ํ•จ์„ ์œ„ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
  • ACID ํŠธ๋žœ์žญ์…˜์„ ์ œ๊ณตํ•œ๋‹ค.
  • ํ–‰์„ ์‚ฌ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์–ป๋Š”๋‹ค.
  • ์™ธ๋ž˜ํ‚ค ์ œ์•ฝ์กฐ๊ฑด์„ ์ง€์›ํ•œ๋‹ค.
  • group_by ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํŠน์ • ๋ฐ์ดํ„ฐ๋ผ๋ฆฌ ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ์„ ์ˆ˜ ์žˆ๋‹ค.
  • 2-safe rreplication์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ ์…‹์„ ์œ ์ง€ํ•œ๋‹ค.
  • join์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”๊ณผ ๋ฌถ์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒŒ ๊ฐ€๋Šฅํ•˜๋‹ค.

๐Ÿ•ต๏ธโ€โ™€๏ธ ๋‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ฟผ๋ฆฌ๋ฌธ ํ˜•ํƒœ

SQLMongoDB
CREATE TABLE users (user_id VARCHAR(20) NOT NULL, age INTEGER NOT NULL,status VARCHAR(10));Not Required
INSERT INTO users(user_id, age, status) VALUES ('bcd001', 45,"A");db.users.insert({ user_id: "bcd001", age: 45, status: "A" })
SELECT * FROM users;db.users.find()
UPDATE users SET status = 'C' WHERE age > 25;db.users.update({ age: { $gt: 25 } }, { $set: { status: "C" } },{ multi: true })
UPDATE stock SET quantity=quantity-7 WHERE product='T-shirt'; COMMIT;session.startTransaction();
db.orders.insert ({ order_id: '1a2b3c', product: 'T-shirt', quantity: 7})
db.stock.update ({ product: { $eq: 'T-shirt', } },{ $inc: { quantity: -7 } }})
session.commitTransaction();


์ฐธ๊ณ ๊ธ€
https://www.mongodb.com/compare/mongodb-postgresql
https://bitnine.tistory.com/48#:~:text=์ง€๊ธˆ๊นŒ์ง€๋Š” ํ™•์žฅ์„ฑ์„,์— ์‰ฝ๊ฒŒ ๋Œ€์‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
https://www.integrate.io/blog/mongodb-vs-postgresql/

profile
๋ฐœ์ƒˆ๋ฐœ๊ฐœ

0๊ฐœ์˜ ๋Œ“๊ธ€