๊ด€๋ฆฌ ๋ฉ”๋‰ด

DOing

์ž˜ ์“ฐ๊ณ ์žˆ๋˜ MySQL ๋Œ€์‹  MongoDB๋ฅผ ๋„์ž…ํ•œ ์ฐ.ssul ๋ณธ๋ฌธ

๋””๋ฒ„๊น…์ค‘ ๐ŸŒ 

์ž˜ ์“ฐ๊ณ ์žˆ๋˜ MySQL ๋Œ€์‹  MongoDB๋ฅผ ๋„์ž…ํ•œ ์ฐ.ssul

mangdo 2022. 11. 5. 20:54

  ์‚ฌ๋‚ด์—์„œ๋Š” ๋ฉ”์ธ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋Š” MySQL, ์‚ฌ์šฉ๋ชฉ์ ์— ๋งž๊ฒŒ Redis, Elastic Search, Bigquery ๋‹ค์–‘ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์“ฐ๊ณ  ์žˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ƒˆ๋กœ์šด ์š”๊ตฌ์‚ฌํ•ญ์˜ ๋ฐ์ดํ„ฐ์˜ ์ ์žฌ๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ์„ ๋งž์ดํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์ผ๋‹จ ์šด์˜ํ•˜๊ณ  ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋•Œ๋ ค ๋„ฃ์„๊นŒ ์†”์งํžˆ ๊ณ ๋ฏผํ–ˆ์ง€๋งŒ, ์ƒ๊ฐํ•˜๋ฉด ์ƒ๊ฐํ• ์ˆ˜๋ก ์š”๊ตฌ์‚ฌํ•ญ์— ๋งž๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์—†์—ˆ๊ณ , ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์ธ MongoDB๋ฅผ ๋„์ž…ํ•˜๊ฒŒ ๋˜์—ˆ๋‹ค. ์˜ค๋Š˜์€ ๊ทธ ์ฐ์„ ํ’€์–ด๋ณผ๊นŒ ํ•œ๋‹ค.

 

๋‘๋‘ฅ๋‘๋‘ฅ

 

๋‹น์‹œ ์š”๊ตฌ์‚ฌํ•ญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์•˜๋‹ค.

• ๋ฐฉ๋Œ€ํ•œ ์–‘์˜ ๋น„์ •ํ˜• ๋ฐ์ดํ„ฐ๋ฅผ ์ ์žฌํ•ด์•ผํ•˜๋Š” ์ƒํ™ฉ (feat.ํŒ”๋กœ์ž‰ ๊ธฐ๋ฐ˜ ํ”ผ๋“œ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„ํ•˜๊ธฐ)

• ์ •ํ•ฉ์„ฑ์€ ์กฐ๊ธˆ ๋–จ์–ด์ง€๋”๋ผ๋„, ๊ณ ๊ฐ€์šฉ์„ฑ์„ ์ง€์›ํ•ด์•ผํ•œ๋‹ค.

 ๋ฐ์ดํ„ฐ ํฌ๋งท์ด ํ–ฅํ›„ ๋‹ฌ๋ผ์งˆ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ์–ด์„œ ์œ ์—ฐํ•œ ์Šคํ‚ค๋งˆ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

• ๋ฐฉ๋Œ€ํ•œ ์–‘์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋„๋ก ๋†’์€ ํ™•์žฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์•ผํ•œ๋‹ค.

• ์—„์ฒญ๋‚œ ๋นˆ๋„์˜ ์“ฐ๊ธฐ ์—ฐ์‚ฐ์„ ๊ฐ๋‹นํ•  ์ˆ˜ ์žˆ๋‹ค.

• ์กฐ์ธ์€ ํ•„์š”์—†๋‹ค.

 

MongoDB ์žฅ์ 

• ๋›ฐ์–ด๋‚œ Read/Write ์„ฑ๋Šฅ

 ๋†’์€ ํ™•์žฅ์„ฑ

     • ๋ฐ์ดํ„ฐ์™€ ํŠธ๋ž˜ํ”ฝ ์ฆ๊ฐ€์— ๋”ฐ๋ผ ์ˆ˜ํ‰ํ™•์žฅ(scale-out) ๊ฐ€๋Šฅ

     • MongoDB๋Š” ๋ฐ์ดํ„ฐ ์ƒค๋”ฉ์„ ์ง€์›

     • ์ด๋Ÿฌํ•œ ์ƒค๋”ฉ๊ณผ์ •์€ ์„œ๋น„์Šค ์ค‘๋‹จ์—†์ด ์˜จ๋ผ์ธ์œผ๋กœ ์ง„ํ–‰๋œ๋‹ค. ๋งŒ์•ฝ ํŠน์ • ์ƒค๋“œ์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ชฐ๋ฆฌ๋ฉด ๋‹ค๋ฅธ ์ƒค๋“œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋™ ์‹œ์ผœ ์ „๋ฐ˜์ ์œผ๋กœ ๋ชจ๋“  ์ƒค๋“œ๊ฐ€ ๊ท ๋“ฑํ•˜๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ฃผ๋ฉฐ, ์ด๋Ÿฌํ•œ ๋™์ž‘์„ ๋ฐธ๋Ÿฐ์‹ฑ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

 ์Šคํ‚ค๋งˆ ํ”„๋ฆฌ

     • ์‚ฌ์šฉํ•  ์ปฌ๋Ÿผ์„ ๋ฏธ๋ฆฌ ์ •์˜ํ•˜์ง€ ์•Š๊ณ  ์–ธ์ œ๋“ ์ง€ ํ•„์š”ํ•œ ์‹œ์ ์— ๋ฐ์ดํ„ฐ ์ €์žฅ๊ฐ€๋Šฅํ•˜๋‹ค.

     • ํ•˜์ง€๋งŒ MongoDB๋Š” ๋ชจ๋“  ๋ถ€๋ถ„์— ์žˆ์–ด์„œ ์Šคํ‚ค๋งˆ ํ”„๋ฆฌ๋ผ๊ณ  ๋ณด๊ธฐ๋Š” ์–ด๋ ต๋‹ค, MongoDB๋Š” ๋ณด์กฐ ์ธ๋ฑ์Šค๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณด์กฐ์ธ๋ฑ์Šค๋Š” ์Šคํ‚ค๋งˆ ํ”„๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ ํ•ญ์ƒ ์ธ๋ฑ์Šค๋ฅด ๊ตฌ์„ฑํ•˜๋Š” ํ•„๋“œ๋ฅผ ์ •์˜ํ•ด์•ผํ•œ๋‹ค.

 

 

 

MongoDB ๋‹จ์ 

 ๋ณต์žกํ•œ Join ์‚ฌ์šฉ์‹œ ์„ฑ๋Šฅ ์ œ์•ฝ

     • RDBMS์™€ ๊ฐ™์ง€๋Š” ์•Š์ง€๋งŒ Aggregation ๊ธฐ๋Šฅ์„ ์ด์šฉํ•˜๋ฉด RDBMS์™€ ๋น„์Šทํ•œ ํ˜•ํƒœ์˜ ์กฐ์ธ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์ƒค๋”ฉ ํ™˜๊ฒฝ์—์„œ๋Š” ์„ฑ๋Šฅ์ด ๋Š๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๊ถŒ์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

 

 ํŠธ๋žœ์žญ์…˜ ์ง€์›

     • MongoDB 4.0์ด ๋ฆด๋ฆฌ์ฆˆ ๋˜๋ฉด์„œ Replica Set์—์„œ ์ž‘๋™ํ•˜๋Š” ๋‹ค์ค‘ ๋„ํ๋จผํŠธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ง€์›์„ ์ถ”๊ฐ€๋˜์—ˆ๋‹ค.

     • ๋˜, MongoDB 4.2์˜ ๋ฆด๋ฆฌ์Šค์™€ ํ•จ๊ป˜ ๋‹ค์ค‘ ๋„ํ๋จผํŠธ ํŠธ๋žœ์žญ์…˜์— ๋Œ€ํ•œ ์ง€์›์ด Sharded Cluster๋กœ ํ™•์žฅ๋˜์—ˆ๋‹ค.

     • (์ง์ˆ˜ ๋ฒ„์ „์ด ์•ˆ์ •ํ™” ๋ฒ„์ „, ํ™€์ˆ˜๋Š” ๊ฐœ๋ฐœ์ค‘์ธ ๋ฒ„์ „)

     • ํ•˜์ง€๋งŒ ํŠธ๋žœ์žญ์…˜ ์ง€์›์ด RDBMS ๋ณด๋‹ค๋Š” ๋ฏธ์•ฝํ•˜๋‹ค.

 

MongoDB ํŠน์ง•

 BSON ํ˜•ํƒœ๋กœ ์ €์žฅ

     • JSON ๋ฐ์ดํ„ฐ๋ฅผ ๊ทธ๋Œ€๋กœ ์ €์žฅํ•˜๋Š” ๊ฒƒ์ด์•„๋‹Œ, BSON(Binary Json)์œผ๋กœ ๋ณ€ํ™˜ํ•˜์—ฌ ์ €์žฅํ•˜๋ฏ€๋กœ ๊ณต๋ฐฑ์ด๋‚˜ ๋งˆํฌ์—… ๋ฌธ์ž๋กœ ์ธํ•ด ๋ถ€๊ฐ€์ ์œผ๋กœ ์ €์žฅ๊ณต๊ฐ„์ด ๋ณ€ํ•˜์ง„ ์•Š๋Š”๋‹ค.

 

 ์ปค์„œ ์‚ฌ์šฉ

     • MongoDB๋Š” ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋กœ ์ปค์„œ๋ฅผ ์‚ฌ์šฉ, ์ด ์ปค์„œ๋ฅผ ํ†ตํ•ด์„œ ๋ฐ˜๋ณต์ ์œผ๋กœ ์‹ค์ œ ๋„ํ๋จผํŠธ (๋ ˆ์ฝ”๋“œ)๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

     • MongoDB์—์„œ ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๋กœ ์ปค์„œ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” ์ฟผ๋ฆฌ๊ฒฐ๊ณผ๋ฅผ ํด๋ฆฌ์•„์ด์–ธํŠธ ์„œ๋ฒ„ ๋ฉ”๋ชจ๋ฆฌ์— ๋ชจ๋‘ ๋‹ด์•„๋‘์ง€ ์•Š์•„๋„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒํ•˜๊ธฐ ์œ„ํ•ด์„œ๋‹ค. ๋ฌผ๋ก  ์ปค์„œ๋ฅผ ์ฝ์„๋•Œ๋งˆ๋‹ค ๊ทธ๋•Œ๋งˆ๋‹ค ๋„ํ๋จผํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๊ณ  ํ•„์š”ํ• ๋•Œ๋งˆ๋‹ค ์ง€์ •๋œ ํŽ˜์ด์ง€ ์‚ฌ์ด์ฆˆ ๋‹จ์œ„๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „์†ก๋ฐ›์•„ MongoDB ํด๋ผ์ด์–ธํŠธ ์„œ๋ฒ„์— ์บ์‹ฑํ•œ ํ›„์— ์œ ์ €์—๊ฒŒ ์„œ๋น„์Šคํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ ˆํ”Œ๋ฆฌ์นด์…‹ ๊ตฌ์„ฑ ๋ฐฉ๋ฒ•

https://www.mongodb.com/docs/manual/replication/

• ํ”„๋ผ์ด๋จธ๋ฆฌ, ์„ผ์ปจ๋“œ๋ฆฌ. ์•„๋น„ํ„ฐ ์กฐํ•ฉ!

• ์•„๋น„ํ„ฐ๋ž€?

     : ์•„๋น„ํ„ฐ ๋ชจ๋“œ๋กœ ์‹œ์ž‘๋œ ๋ชฝ๊ณ ๋””๋น„๋Š” ๋ ˆํ”Œ๋ฆฌ์นด ์…‹์˜ ๋…ธ๋“œ๋“ค๊ณผ ํžˆํŠธ๋น„ํŠธ๋งŒ ์ฃผ๊ณ  ๋ฐ›์œผ๋ฉฐ, ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›์ง€ ์•Š๋Š”๋‹ค. ํ”„๋ผ์ด๋จธ๋ฆฌ๊ฐ€ ๋ถˆ๋Šฅ์ผ๋•Œ ํ”„๋ผ์ด๋จธ๋ฆฌ ๋…ธ๋“œ์˜ ์„ ์ถœ์—๋งŒ ์ฐธ์—ฌํ•œ๋‹ค.

 

๋„์ž…์‹œ ์ฃผ์˜์  1) ์Šฌ๋กœ์šฐ์ฟผ๋ฆฌ ์„ค์ •

[ MongoDB ๋กœ๊ทธํŒŒ์ผ ]

 

  100๋ฐ€๋ฆฌ์ดˆ๊ฐ€ ๋„˜๊ฒŒ ๊ฑธ๋ฆฐ ์ฟผ๋ฆฌ๋Š” MongoDB ์„œ๋ฒ„์˜ ๋กœ๊ทธํŒŒ์ผ์— ๋ชจ๋‘ ๋กœ๊น…๋œ๋‹ค. 100๋ฐ€๋ฆฌ์ดˆ๋Š” ๊ธฐ๋ณธ๊ฐ’์ด๋ฉฐ, MongoDB ์„œ๋ฒ„์˜ ์„ค์ •ํŒŒ์ผ์—์„œ slowMs ์˜ต์…˜์„ ์กฐ์ •ํ•˜๋ฉด๋œ๋‹ค. MongoDB ์„œ๋ฒ„์˜ ๋กœ๊ทธ๋ ˆ๋ฒจ์„ ๋””ํดํŠธ ๊ฐ’ ๋ณด๋‹ค ๋” ์ž์„ธํžˆ ๋˜๋Š” ๋” ๋‹จ์ˆœํ•˜๊ฒŒ ๋ณ€๊ฒฝํ•˜๊ณ ์ž ํ•œ๋‹ค๋ฉด, ๋‹ค์Œ๊ณผ ๊ฐ™์ด db.setLogLevel()๋ช…๋ น์„ ํ†ตํ•ด ์„œ๋ธŒ ๋ชจ๋“ˆ๋ณ„๋กœ ๋กœ๊ทธ๋ ˆ๋ฒจ์„ ์กฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. MongoDB ๋กœ๊ทธ ์‚ฌ์šฉ์‹œ ์ฃผ์˜์ ์€ ๋กœ๊ทธ์˜ ์‚ฌ์ด์ฆˆ๊ฐ€ ๋ฌด์ œํ•œ์œผ๋กœ ๋Š˜์–ด๋‚œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.์ด๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์ˆ˜ ์žˆ์œผ๋‹ˆ, logrotate ์„ค์ •์ด ํ•„์š”ํ•˜๋‹ค.[1] ์ด๋ฒˆ ํฌ์ŠคํŒ…์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•ด๋‘์—ˆ๋‹ค. MongoDB์— Logrotate ์„ค์ •ํ•˜๊ธฐ

 

 

 

[ MongoDB ์ฟผ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง ]

 

  MongoDB ์„œ๋ฒ„์˜ ๋กœ๊ทธ ํŒŒ์ผ์—๋Š” ๋งค์šฐ ๋งŽ์€ ์ •๋ณด๊ฐ€ ๊ธฐ๋ก๋˜์–ด ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ์ˆ˜์ง‘์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฐ ๊ฒฝ์šฐ์—๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ณ„๋กœ ์ €์žฅ๋˜๋Š” ์ฟผ๋ฆฌ ํ”„๋กœํŒŒ์ผ๋ง์„ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. MongoDB๋Š” 100ms ์ด์ƒ ๊ฑธ๋ฆฐ ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ์— ๋Œ€ํ•ด์„œ ํ•ด๋‹น ์ปฌ๋ ‰์…˜์ด ์กด์žฌํ•˜๋Š” DB์˜ system.profile ์ปฌ๋ Œ์…˜์— ๊ธฐ๋กํ•œ๋‹ค.

 

 ํ”„๋กœํŒŒ์ผ๋ง ๋ ˆ๋ฒจ ์กฐ์ •

   • ์ฃผ์˜ ) MongoDB์˜ ๋กœ๊ทธํŒŒ์ผ์—๋Š” ์ ์šฉ๋˜์ง€ ์•Š๊ณ , system.profile ์ปฌ๋ Œ์…˜์— ๊ธฐ๋ก๋˜๋Š” ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊น…์—๋งŒ ์ ์šฉ๋œ๋‹ค.

 ์ œํ•œ ์šฉ๋Ÿ‰

    system.profile์€ 1MB ์ •๋„์˜ ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ๋งŒ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. 1MB ์ด์ƒ๋˜๋ฉด, ์˜ค๋ž˜๋œ ๋กœ๊ทธ๋ถ€ํ„ฐ ์‚ญ์ œํ•œ๋‹ค.

 

 ์‹œ๊ฐ„์ˆœ ์ •๋ ฌํ•˜์—ฌ ํ™•์ธ ์ฟผ๋ฆฌ

   ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ๋ฅผ ํ™•์ธํ•  ๋•Œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์—ญ์ˆœ์œผ๋กœ ์ •๋ ฌํ•ด์•ผ ์‹œ๊ฐ„์ˆœ์œผ๋กœ ํŽธํžˆ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

 

[ ์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋ถ„์„ ]

 

์Šฌ๋กœ์šฐ ์ฟผ๋ฆฌ ๋กœ๊ทธ์—์„œ ์ฃผ๋กœ ์„ฑ๋Šฅ๊ณผ ๊ด€๋ จํ•ด์„œ ์‚ดํŽด๋ด์•ผํ•˜๋Š” ๋ถ€๋ถ„

 planSummary

   : ์ฟผ๋ฆฌ์˜ ์‹คํ–‰ ๊ณ„ํš

 keysExamined

   : ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ธ๋ฑ์Šค์—์„œ ์ฝ์€ ์ธ๋ฑ์Šค ํ‚ค์˜ ๊ฐœ์ˆ˜

• docsExamined

   : ์ฟผ๋ฆฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ ์ปฌ๋ ‰์…˜์˜ ๋ฐ์ดํ„ฐ ํŒŒ์ผ์—์„œ ์ฝ์€ ๋„ํ๋จผํŠธ์˜ ๊ฐœ์ˆ˜

• numYields

   • Yield : ์žฅ์‹œ๊ฐ„ ์ฟผ๋ฆฌ๊ฐ€ ์‹คํ–‰๋˜๋ฉด ๋‹ค๋ฅธ ์ปค๋„ฅ์…˜๋“ค์ด ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ž ๊ธˆ์„ ํ•ด์ œํ–ˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์ž ๊ธˆ์„ ํš๋“ํ•˜๋Š” ๊ณผ์ •

   • ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋„์ค‘์—์ž ๊ธˆ์„ ์–ผ๋งˆ๋‚˜ ํš๋“ํ–ˆ๋Š”๊ฐ€๋ฅผ ์˜๋ฏธ

 

 

๋„์ž…์‹œ ์ฃผ์˜์  2) ์ฟผ๋ฆฌ ์‹คํ–‰๊ณ„ํš ๋ถ„์„ + ์ธ๋ฑ์Šค ์„ค์ •

  ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณด๋Š” Database๋‹ค๋ณด๋‹ˆ, ์ฟผ๋ฆฌ ์‹คํ–‰๊ณ„ํš์„ ์˜ˆ์ธกํ•˜๊ธฐ ์–ด๋ ค์› ๋‹ค. ๋•Œ๋ฌธ์— ์ธ๋ฑ์Šค ์„ค์ •์—๋„ ๊ณ ๋ฏผ์ด ๋˜์—ˆ์—ˆ๋‹ค. ์‚ฌ์šฉํ•˜๋Š” ๋ชจ๋“  ์ฟผ๋ฆฌ๋ฅผ ํ•˜๋‚˜์”ฉ ๋Œ๋ ค๊ฐ€๋ฉด์„œ ์‹คํ–‰๊ณ„ํš์„ ๋ถ„์„ํ•˜๊ณ  ์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์คฌ์—ˆ๋‹ค. ์ด๋ฒˆ ํฌ์ŠคํŒ…์ด ๋„ˆ๋ฌด ๊ธธ์–ด์ ธ์„œ ๋‹ค๋ฅธ ํฌ์ŠคํŒ…์—์„œ ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ์„ค๋ช…ํ•ด๋‘์—ˆ๋‹ค. MongoDB์—์„œ ์‹คํ–‰ ๊ณ„ํš ํ™•์ธํ•˜๋Š” ๋ฐฉ๋ฒ•

๋Œ€์ถฉ ์ด๋Ÿฐ์‹์œผ๋กœ ์ฟผ๋ฆฌ ์‹คํ–‰๊ณ„ํš ๋ณด๋ฉด์„œ ์ธ๋ฑ์Šค ์„ค์ •์„ ํ•ด์ฃผ์—ˆ๋‹ค.

 

๋„์ž…์‹œ ์ฃผ์˜์  3) op: 'getmore' + batchSize

  MongoDB ํด๋ผ์ด์–ธํŠธ๋Š” ๊ธฐ๋ณธ ๋ฐฐ์น˜ ํฌ๊ธฐ(default batch size)๊ฐ€ ์„ค์ •๋˜์–ด์žˆ๊ณ , ํ•„์š”์— ๋”ฐ๋ผ ์ด ๊ฐ’์„ ๋ณ€๊ฒฝํ•ด ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค. ์ฟผ๋ฆฌ๋กœ๊ทธ๋ฅผ ํ•˜๋‚˜์”ฉ ๋ณด๋‹ค๋ณด๋‹ˆ op:getmore ์ด ๋น„์ •์ƒ์ ์œผ๋กœ ๋งŽ์ด ๋ฐœ์ƒํ•˜๋Š” ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ๊ณ , ์ด๋ฅผ ์ˆ˜์ •ํ–ˆ์—ˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ MongoDB์—์„œ๋Š” batchSize๋‚˜ limit์„ ์ •ํ•ด์ฃผ์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ์ ์œผ๋กœ batchSize๋ฅผ 101๋กœ ์ง€์ •ํ•œ๋‹ค. (batch ํ•œ๋ฒˆ๋‹น ๋ฐ์ดํ„ฐ๊ฐ€ 1MB๊ฐ€ ๋„˜์–ด๊ฐ€์ง€ ์•Š๋Š” ์„ ์—์„œ) ํ•˜์ง€๋งŒ ๋‹น์‹œ ์‚ฌ์šฉํ•˜๋˜ MongoDB ํด๋ผ์ด์–ธํŠธ์—์„œ batchSize์˜ default๊ฐ€ 2์˜€๊ธฐ ๋•Œ๋ฌธ์— getMore๋ฅผ ๊ณ„์† ์‹คํ–‰ํ•œ๋‹ค๋Š” ๋ฌธ์ œ์ ์ด ์žˆ์—ˆ๋‹ค. ์‹ค์ œ๋กœ LINE ๊ธฐ์ˆ  ๋ธ”๋กœ๊ทธ์—์„œ๋Š” ์ด๋•Œ๋ฌธ์— ์„ฑ๋Šฅ ๋ฌธ์ œ๋ฅผ ๊ฒช์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค. [3]

 

 

๋งˆ๋ฌด๋ฆฌ

   MongoDB ์ ์šฉ์€ ์‚ฌ์‹ค ์ƒ๋‹นํžˆ ๊ฐ€์„ฑ๋น„์žˆ๊ฒŒ ์ ์šฉํ–ˆ์—ˆ๋‹ค. ์ฃผ์–ด์ง„ ์‹œ๊ฐ„์ด ๊ทธ๋ฆฌ ๋งŽ์•˜๋˜ ๊ฒƒ์€ ์•„๋‹ˆ๊ธฐ๋•Œ๋ฌธ์—, ์šฐ์„  Real MongoDB ์ฑ…์„ ๋น ๋ฅด๊ฒŒ ํ›‘์—ˆ๋‹ค.[4] ์ฑ… ์ค‘์—์„œ๋Š” ๋น ๋ฅธ ๋„์ž… + ์„ฑ๋Šฅ์„ ์œ„ํ•ด์„œ ๋ ˆํ”Œ๋ฆฌ์นด ์…‹, ์ธ๋ฑ์Šค, ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง, ์ฟผ๋ฆฌ ์ตœ์ ํ™” ๋ถ€๋ถ„๋งŒ ํž˜์ค˜์„œ ์ฝ๊ณ  ๋‚˜๋จธ์ง€๋Š” ๋„˜๊ธฐ๊ฑฐ๋‚˜ ๋น ๋ฅด๊ฒŒ ํ›‘์—ˆ๋‹ค. ์ดํ›„์—๋Š” “don't use mongodb” “mongoDB ์žฅ์• ” ํ‚ค์›Œ๋“œ๋กœ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์ตœ๋Œ€ํ•œ ์žฅ์• ๋ฅผ ๋ฏธ๋ฆฌ ์˜ˆ๋ฐฉํ•˜๋ ค๊ณ  ํ–ˆ์—ˆ๋‹ค.

  ๋„์ž…ํ•œ์ง€ 6๊ฐœ์›”์ •๋„๊ฐ€ ๋˜์—ˆ๋Š”๋ฐ ์•„์ง๊นŒ์ง„ ํฌ๊ฒŒ ๋ฌธ์ œ์—†์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. MySQL์„ ์™„๋ฒฝํ•˜๊ฒŒ ๋Œ€์ฒดํ•  ์ˆ˜ ์žˆ๋‹ค! ๋ผ๋Š” ์˜๊ฒฌ์—๋Š” ์•„์ง๊นŒ์ง„ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, MongoDB๋งŒ์˜ ์žฅ์ ์ด์žˆ๊ณ , ๋งŒ์•ฝ ์ •ํ•ฉ์„ฑ์ด ์ค‘์š”ํ•˜์ง€ ์•Š์€ ๊ธฐ๋Šฅ์ด๋ผ๋ฉด ์ ๊ทน์ ์œผ๋กœ ์‚ฌ์šฉํ•ด๋„ ์ข‹์„ DB๋ผ๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋Œ์ด์ผœ๋ณด๋ฉด ์ด๋•Œ ์ฒ˜์Œ์œผ๋กœ RDBMS์ด ์•„๋‹Œ, NoSQL์ธ MongoDB๋ฅผ ๊ณต๋ถ€ํ•˜๋ฉด์„œ ์„ค๋ ˆ๊ณ  ์žฌ๋ฐŒ์–ดํ–ˆ์—ˆ๋˜๊ฒƒ ๊ฐ™๋‹ค.

 

 

[1] https://www.mongodb.com/docs/manual/reference/method/db.setLogLevel

[3] https://engineering.linecorp.com/ko/blog/LINE-integrated-notification-center-from-redis-to-mongodb

[4] ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ Real MongoDB : ์ด์„ฑ์šฑ, 2018, ์œ„ํ‚ค๋ถ์Šค