Message Queue

๊น€๊ฐ€์„ยท2024๋…„ 7์›” 21์ผ
post-thumbnail

๐Ÿš… ์ˆ˜๋ฐฑ๋งŒ๊ฑด์˜ ์‹ค์‹œ๊ฐ„ ๊ฑฐ๋ž˜๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ๊ถ๊ธˆํ•˜์ง€ ์•Š๋‚˜?

๊ธˆ์œต ์‹œ์Šคํ…œ, e-commerce, ์†Œ์…œ ๋ฏธ๋””์–ด ๋“ฑ์€ ๋งค ์ˆœ๊ฐ„ ์ˆ˜๋ฐฑ๋งŒ ๊ฑด์˜ ๊ฑฐ๋ž˜์™€ ๋ฐ์ดํ„ฐ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ง‰๋Œ€ํ•œ ์–‘์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋„์ž…์ด ๋œ ๊ฒƒ์ด ๋ฐ”๋กœ Message Queue ์ด๋‹ค.



์ ์šฉ ๋ฐฐ๊ฒฝ

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

Message Queue์— ๋Œ€ํ•ด ๋ณธ๊ฒฉ์ ์œผ๋กœ ์•Œ์•„๋ณด๊ธฐ ์ „ ๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(MOM)์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž. ๐Ÿ˜‰

Message Oriented Middleware(MOM)

  • ์‘์šฉ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐ„์˜ ๋น„๋™๊ธฐ์  ๋ฐ์ดํ„ฐ ํ†ต์‹ ์„ ์œ„ํ•œ ์†Œํ”„ํŠธ์›จ์–ด โ‡’ ๋น„๋™๊ธฐ์  ๋ฐฉ์‹์„ ์ด์šฉํ•ด ํ”„๋กœ์„ธ์Šค ๊ฐ„์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๋Š” ๊ธฐ๋Šฅ์„ ์œ„ํ•œ ์‹œ์Šคํ…œ
  • ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๊ณผ์ •์—์„œ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ๋ผ์šฐํŒ… ๋ฐ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ์žˆ์Œ
    • ์—ฌ๊ธฐ์„œ ๋ฉ”์‹œ์ง€๋ž€ ์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ˜น์€ ๋‹จ์ˆœํ•œ ์ •๋ณด ๋“ฑ์˜ ์ž‘์€ ๋ฐ์ดํ„ฐ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋‹ค

      ๋ณด๊ด€

      • ๋ฐฑ์—… ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•จ์œผ๋กœ์จ ์ง€์†์„ฑ์„ ์ œ๊ณตํ•ด ์†ก์ˆ˜์‹  ์ธก์€ ๋™์‹œ์— ๋„คํŠธ์›Œํฌ ์—ฐ๊ฒฐ์„ ์œ ์ง€ํ•  ํ•„์š”๊ฐ€ ์—†์Œ

      ๋ผ์šฐํŒ…

      • ๋ฏธ๋“ค์›จ์–ด ๊ณ„์ธต ์ž์‹ ์ด ์ง์ ‘ ๋ฉ”์„ธ์ง€ ๋ผ์šฐํŒ…์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ•˜๋‚˜์˜ ๋ฉ”์„ธ์ง€๋ฅผ ์—ฌ๋Ÿฌ ์ˆ˜์‹ ์ž์—๊ฒŒ ๋ฐฐํฌ๊ฐ€ ๊ฐ€๋Šฅํ•จ

      ๋ณ€ํ™˜

      • ์†ก์ˆ˜์‹  ์ธก์˜ ์š”๊ตฌ์— ๋”ฐ๋ผ ์ „๋‹ฌํ•˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Œ

๋ฉ”์„ธ์ง€ํ๊ฐ€ ๋ฐ”๋กœ ์ด MOM์— ์†ํ•œ๋‹ค

๐Ÿ“ฌย Message Queue

  • ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜๋กœ ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•จ
  • ์ฆ‰, Queue๋ผ๋Š” ์ž๋ฃŒ๊ตฌ์กฐ๋ฅผ ์ฑ„ํƒํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์‹œ์Šคํ…œ

๊ตฌ์กฐ

  • FIFO (First in First out)

    • ์„ ์ž…์„ ์ถœ ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„ ์ž๋ฃŒ๊ตฌ์กฐ

    • Queue๋Š” ์ž…๊ตฌ์™€ ์ถœ๊ตฌ๊ฐ€ ๊ตฌ๋ถ„๋œ ์ž๋ฃŒ๊ตฌ์กฐ, ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋Š” ์ž…๊ตฌ๋กœ ๋“ค์–ด์˜ค๊ณ  ๋‚˜๊ฐ€๋Š” ๋ฐ์ดํ„ฐ๋Š” ์ถœ๊ตฌ์—์„œ ๋‚˜๊ฐ

    • ์ž„์‹œ์ €์žฅ์†Œ์— ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ์ฒ˜๋ฆฌ๋œ๋‹ค
      -> ์˜ˆ๋ฅผ ๋“ค์–ด, ๋†€์ด๊ณต์› ์ค„์ด ์žˆ๋‹ค

      ๋ฉ”์„ธ์ง€ ํ๋ฅผ ํ†ตํ•ด ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„๊ณผ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›๋Š” ๋ถ€๋ถ„์ด ํ•„์š”ํ•จ

      ์ด๋•Œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ์ „๋‹ฌํ•˜๋Š” ๋ถ€๋ถ„์„ Producer๋ผ๊ณ  ํ•˜๋ฉฐ, ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•„์„œ ์†Œ๋น„ํ•˜๋Š” ๋ถ€๋ถ„์„ Consumer๋ผ๊ณ  ํ•จ

      ์ฆ‰ ๋ฉ”์„ธ์ง€ ํ๋Š” Producer์™€ Consumer์˜ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ์—ญํ• ์„ ํ•˜๋Š” ๋งค๊ฐœ์ฒด

๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค VS ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค

Message Queue์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์šด๋ฐ˜ํ•˜๋Š” ๋ฐฉ์‹์— ๋”ฐ๋ผ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์™€ ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Œ

Message Queue๊ฐ€ ๋ฉ”์„ธ์ง€ ๋˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ์†ก์‹ ๋˜๊ณ  ์ˆ˜์‹ ๋˜๋Š” ํ•˜๋‚˜์˜ ํ†ต์‹  ํ†ต๋กœ๋ผ๊ณ  ํ•˜๋ฉด,
๋ธŒ๋กœ์ปค๋Š” ๋ฉ”์„ธ์ง€ ํ์— ๋ฉ”์„ธ์ง€ ํ˜น์€ ์ด๋ฒคํŠธ๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  ์ค‘๊ฐœํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” ์ฃผ์ฒด

  1. ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)
    • Producer๊ฐ€ ์ƒ์‚ฐํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฉ”์„ธ์ง€ ํ์— ์ €์žฅํ•˜๊ณ  ์ €์žฅ๋œ ๋ฉ”์„ธ์ง€๋ฅผ Consumer๊ฐ€ ๊ฐ€์ ธ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ํ•จ
    • Consumer๊ฐ€ ๋ฉ”์„ธ์ง€ ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๋ฉด ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๋ฉ”์„ธ์ง€ ํ์—์„œ ์‚ญ์ œ๋˜๋Š” ํŠน์ง•์ด ์žˆ์Œ!
  1. ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค(Event Broker)
    • ๊ธฐ๋ณธ์ ์ธ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค ์—ญํ• ์„ ํ•  ์ˆ˜ ์žˆ์Œ
      • ๋ฐ˜๋Œ€๋กœ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๋Š” ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค์˜ ๊ธฐ๋Šฅ์„ ํ•˜์ง€ ๋ชปํ•จ
    • ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ด๋ฒคํŠธ๋ผ๊ณ  ํ•˜๋ฉฐ Consumer๊ฐ€ ๋ฉ”์„ธ์ง€ ํ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ฒŒ ๋˜๋ฉด ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ๋ฉ”์„ธ์ง€๊ฐ€ ์‚ญ์ œ๋˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ, ์ด๋ฒคํŠธ ๋ธŒ๋กœ์ปค ๋ฐฉ์‹์—์„œ Consumer๊ฐ€ ์†Œ๋น„ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‹ค์‹œ ์†Œ๋น„ํ•  ์ˆ˜ ์žˆ์Œ
    • ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค ๋ณด๋‹ค ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ์ด ์žˆ์Œ
    • ๋Œ€ํ‘œ์ ์œผ๋กœ RabbitMQ, ActiveMQ, amazonSQS, Redis ๋“ฑ์ด ์žˆ๋‹ค

Message Queue ์žฅ์ 

  1. ๋น„๋™๊ธฐ(Asynchronous)
    • ๋งŒ์•ฝ ๋ฉ”์„ธ์ง€ ํ๊ฐ€ ์—†๋‹ค๋ฉด?
      • ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋Š”ย Producerย ์—ญํ• ์„ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ์ž์‹ ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ „๋‹ฌ ๋ฐ›๋Š”ย Consumerย ์—ญํ• ์„ ํ•˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—๊ฒŒ ์ง์ ‘์ ์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด์•ผํ•จ(End-To-End ํ†ต์‹ )
      • ํ•ด๋‹น ๊ณผ์ •์ด ์™„๋ฃŒ๋˜๊ธฐ ์ „๊นŒ์ง€๋Š” ๋‹ค๋ฅธ ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ ๊ณผ์ •์„ ์ด๋ฃจ์ง€ ๋ชป ํ•จ
      • ๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์ด ๋ฐœ์ƒํ•˜๋Š” ์„œ๋ฒ„์—์„œ ์ด๋Ÿฐ ๋ฐฉ์‹์€ ๋น„ํšจ์œจ์ ์ž„
    • ์ฆ‰ ๋ฉ”์„ธ์ง€ ํ๋ฅผ ์ค‘๊ฐ„์— ๋ฐฐ์น˜ํ•ด Producerย ๋Š” ๋ฉ”์„ธ์ง€๋ฅผย Consumerย ์—๊ฒŒ ๋ฐ”๋กœ ๋ณด๋‚ด์ง€ ์•Š๊ณ ย Queueย ์— ๋ฉ”์„ธ์ง€๋ฅผ ๋„ฃ์–ด ๊ด€๋ฆฌ. ์ด๋ฅผ ํ†ตํ•ดย Consumerย ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•จ
  2. ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Decoupling)
    • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถœ ์ˆ˜ ์žˆ์Œ
    • ํ™•์žฅ์„ฑ,์œ ์—ฐ์„ฑ,ํšจ์œจ์ ์ธ ์œ ์ง€ ๋ณด์ˆ˜,์žฅ์•  ์ „ํŒŒ ๋ฐฉ์ง€ย ๋“ฑ์— ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์„ ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์žฅ์ ์ด ๋งŽ์Œ โ‡’ ์†Œํ”„ํŠธ์›จ์–ด ์•„ํ‚คํ…์ฒ˜ ๋””์ž์ธ ํŒจํ„ด์ธย MSA(Microservice Architecture)ย ์—์„œ ์•„ํ‚คํ…์ฒ˜์˜ ํ•ต์‹ฌ์ ์ธ ์—ญํ• ์„ํ•จ

  • ๋ชจ๋†€๋ฆฌ์‹
    • ํ•˜๋‚˜์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์•ˆ์— ๋ชจ๋“  ๋„๋ฉ”์ธ๊ณผ DB๊ฐ€ ๊ฒฐํ•ฉ๋˜์–ด ์žˆ์Œ
    • ๋„๋ฉ”์ธ ํ•˜๋‚˜์˜ ์žฅ์• ๊ฐ€ ์ „์ฒด ์˜ํ–ฅ๋ฏธ์นจ
    • ์œ ์ง€๋ณด์ˆ˜ ํž˜๋“ฌ

  • MSA
    • ์„œ๋น„์Šค(๋„๋ฉ”์ธ)๋ณ„๋กœ ๋…๋ฆฝ์ ์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๋Š” ๊ตฌ์กฐ
    • ๋…๋ฆฝ์ ์ด๋‹ค๋ณด๋‹ˆ ๊ฐ ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ค๋ ค๋ฉด ์ถ”๊ฐ€ ๋ฆฌ์†Œ์Šค ์š”์ฒญ์„ ๋ณด๋‚ด์•ผ ํ•จ
    • ์ด ๋•Œ ํ†ต์‹ ํ•˜๋Š” ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Kafka, RabbitMQ ๋“ฑ)์ด ์žˆ์Œ
  1. ํƒ„๋ ฅ์„ฑ(Resilience)
    • ์‹œ์Šคํ…œ์ด ์˜ˆ๊ธฐ์น˜ ์•Š์€ ์ƒํ™ฉ ๋˜๋Š” ์žฅ์• ์— ๋Œ€์‘ํ•˜๊ณ  ์œ ์—ฐํ•˜๊ฒŒ ๋Œ€์ฒ˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋Šฅ๋ ฅ
    • ์˜ˆ๋ฅผ ๋“ค์–ด, ์€ํ–‰ ์†ก๊ธˆ ์‹œ์Šคํ…œ
      ProcessTask
      AB ํ”„๋กœ์„ธ์Šค์—๊ฒŒ ์†ก๊ธˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋ƒ„
      BA ํ”„๋กœ์„ธ์„œ์—๊ฒŒ ๋ฐ›์€ ์†ก๊ธˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•„ ์‚ฌ์šฉ์ž ๊ณ„์ขŒ์— ๋ฐ˜์˜ํ•จ
      • ๋ฉ”์„ธ์ง€ ํ๊ฐ€ ์—†๋‹ค๊ณ  ๊ฐ€์ •, B ํ”„๋กœ์„ธ์Šค์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ณต๊ตฌ๋˜๋Š” ๋™์•ˆ A, B ๋ชจ๋‘ ๋™์ž‘ํ•˜์ง€ ์•Š์Œ
      • ์žˆ๋‹ค๋ฉด, ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ํ”„๋กœ์„ธ์Šค๋Š” B ํ”„๋กœ์„ธ์Šค์˜ ์žฅ์•  ์—ฌ๋ถ€์™€ ์ƒ๊ด€ ์—†์ด ์ž์‹ ์ด ๋ณด๋‚ด๋Š” ์†ก๊ธˆ(๋ฉ”์„ธ์ง€) ์„ ๋ฉ”์„ธ์ง€ ํ์—๊ฒŒ ์ „๋‹ฌ๋งŒ ํ•ด์ฃผ๋ฉด ๋จ
      • ์†ก๊ธˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์€ ๋ฉ”์„ธ์ง€ ํ๋Š” B ํ”„๋กœ์„ธ์Šค์˜ ์žฅ์• ๊ฐ€ ํ•ด๊ฒฐ๋  ๋•Œ๊นŒ์ง€ ํ ๋‚ด๋ถ€์— A ์—์„œ ๋ฐ›์•„์˜ค๋Š” ์†ก๊ธˆ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๊ด€ โ‡’ B ์„œ๋น„์Šค์˜ ์ผ์‹œ์ ์ธ ๋ถˆ๋Šฅ ์ƒํƒœ๊ฐ€ A ์„œ๋น„์Šค์— ์ง์ ‘์ ์ธ ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š๊ณ , ์‹œ์Šคํ…œ์˜ ๊ธฐ๋Šฅ์„ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Œ
    • ์ฆ‰ , Producerย ํ”„๋กœ์„ธ์Šค๋Š”ย Consumerย ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์šด๋˜์–ด ์žˆ์–ด๋„ ๋ฉ”์„ธ์ง€๋ฅผ ์ •์ƒ์ ์œผ๋กœ ๋ฐœํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ ,ย Consumerย ๋Š” ๊ตฌ๋…ํ•œ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐœํ–‰ํ•˜๋Š”ย Producerย ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋‹ค์šด๋˜์–ด ์žˆ์–ด๋„ ์ •์ƒ์ ์œผ๋กœ ์ˆ˜์‹ ํ• ย ์ˆ˜ ์žˆ์Œ
  2. ๊ณผ์ž‰(Redundancy)
    • ์ •์ƒ์ ์ธ ๋ฉ”์„ธ์ง€ ์†ก/์ˆ˜์‹ ์ด ์‹คํŒจํ•˜๋Š” ๊ฒฝ์šฐ ์žฌ์‹คํ–‰์ด ๊ฐ€๋Šฅ
    • ์œ„์™€ ๊ฐ™์ด ๋ฉ”์„ธ์ง€ ํ๊ฐ€ ์—†๋‹ค๋ฉด, B ํ”„๋กœ์„ธ์Šค์—์„œ ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•ด A ํ”„๋กœ์„ธ์Šค์—์„œ ์žฅ์•  ๊ธฐ๊ฐ„๋™์•ˆ ์ •์ƒ์ ์œผ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ์†ก์‹ ํ•  ์ˆ˜ ์—†๋‹ค๋ฉด A ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋Š” ์žฅ์•  ๊ธฐ๊ฐ„๋™์•ˆ ํฐ ์–ด๋ ค์›€์„ ๊ฒช์„ ์ˆ˜ ์žˆ์Œ
    • ์‹œ์Šคํ…œ ์‘๋‹ต์„ฑ ์ €ํ•˜,๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜ย ,๋ฉ”์„ธ์ง€ ์œ ์‹คย ๋“ฑ ๋‹ค์–‘ํ•œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒ
    • ๋ฉ”์„ธ์ง€ ํ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค๋ฉด ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ์™„ํ™”ํ•  ์ˆ˜ ์žˆ์Œ. ์ž‘์—…์„ ๋ฉ”์„ธ์ง€๋กœ ๋ฉ”์„ธ์ง€ ํ์— ๋„ฃ์–ด๋‘๋ฉด ์ผ์ • ์žฅ์•  ๊ธฐ๊ฐ„๋™์•ˆ ์†ก์‹ ๋œ ๋ฉ”์„ธ์ง€๋Š” ํ์— ๋‚จ์•„์žˆ์–ด ์ถ”ํ›„ ์žฅ์•  ๋ณต๊ตฌ ์‹œ ์ •์ƒ์ ์œผ๋กœ ์žฌ์‹œ๋„ ๋ฐ ๋ณต๊ตฌ๊ฐ€ ๊ฐ€๋Šฅํ•ด์ง ๐Ÿ‘
  3. ์‹ ๋ขฐ์„ฑ(Guarantees)
    • ์†ก์‹ ๋œ ๋ฉ”์„ธ์ง€์˜ ์•ˆ์ „ํ•˜๊ณ  ํ™•์‹คํ•œ ์ „๋‹ฌ์„ ์˜๋ฏธํ•จ
    • ๋ฉ”์„ธ์ง€ ํ๋ผ๋Š” ์‹œ์Šคํ…œ ๋•๋ถ„์— ์žฅ์• ๊ฐ€ ๋ฐœ์ƒํ•˜๋”๋ผ๋„ ์†ก์‹ ๋˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ์•ˆ์ „ํ•˜๊ณ  ํ™•์‹คํ•˜๊ฒŒย Consumerย ๊ฐ€ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ์Œ
  4. ํ™•์žฅ์„ฑ(Scalable)
    - ์ˆ˜ํ‰ํ™•์žฅ Scale-Out
    - ๋งŒ์•ฝ ๊ธฐ์กด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ด์šฉํ•œ ํ†ต์‹ ์—์„œ ๋ถ€ํ•˜๊ฐ€ ์ฆ๊ฐ€ํ•˜๊ฑฐ๋‚˜ ํด๋ผ์ด์–ธํŠธ์˜ ๋™์‹œ๋‹ค๋ฐœ์ ์ธ ์š”์ฒญ์ด ์ฆ๊ฐ€ํ•  ๋•Œ, ๋ฉ”์„ธ์ง€ ํ์—ย Producerย ์™€ย Consumerย ์„ ์ถ”๊ฐ€ํ•จ์œผ๋กœ ๋น„๊ต์  ๊ฐ„๋‹จํ•˜๊ณ  ์‰ฝ๊ฒŒ ํ™•์žฅ์„ ํ•  ์ˆ˜ ์žˆ์Œ



๐Ÿค”ย ๊ทธ๋Ÿผ ์–ธ์ œ ์‚ฌ์šฉ๋ ๊นŒ?

MQ๋ฅผ ์ ์šฉํ•˜๋ ค๋ฉด RabbitMQ, Kafka, ActiveMQ๋“ฑ ๋‹ค์–‘ํ•œ MQ ์ค‘์—์„œ ์‹œ์Šคํ…œ ๋ชฉ์ ์— ๋งž๋Š” MQ๋ฅผ ์„ ์ •ํ•ด์•ผ ํ•˜๊ณ  ๋˜ ์„œ๋ฒ„์— MQ๋ฅผ ์„ค์น˜ํ•ด์•ผ ํ•œ๋‹ค.
์„ค์น˜๋กœ ๋์ด ์•„๋‹ˆ๋ผ ๊ทธ ์‚ฌ์šฉ ๋ฐฉ๋ฒ• ๋ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ๋ฒ•๋„ ์ตํ˜€์•ผ ํ•˜๋ฉฐ MQ๊ฐ€ ์ง€์›ํ•˜๋Š” ๋‹ค์–‘ํ•œ ์˜ต์…˜ ์ค‘์— ์‹œ์Šคํ…œ ๋ชฉ์ ์— ๋งž๋Š” ์˜ต์…˜์„ ์ฐพ์•„ ์„ค์ •ํ•ด์•ผ ํ•˜๊ณ  ์ฃผ๊ณ  ๋ฐ›์„ ๋ฉ”์‹œ์ง€ ๊ตฌ์กฐ๋„ ์ •์˜ํ•ด์•ผ ํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•œ ์ „๋‹ฌ ๋ฐฉ์‹ ์ค‘ ์‹œ์Šคํ…œ ๋ชฉ์ ์— ๋งž๋Š” ๋ฐฉ์‹์„ ์„ ์ •ํ•ด์•ผ ํ•œ๋‹ค.


๋‹จ์ˆœํžˆ ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌํ•˜๋ฉด ์ด๋Ÿฐ ๋ถˆํŽธํ•จ ์—†์ด ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ ์™œ MQ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?


๋Œ€ํ‘œ ์˜ˆ์‹œ ๋‘ ๊ฐ€์ง€๊ฐ€ ์žˆ๋‹ค.
  1. ์ด๋ฉ”์ผ ์ „์†ก

์–ด๋–ค ์›น ์‚ฌ์ดํŠธ์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์žŠ์–ด๋ฒ„๋ ค์„œ ์ด๋ฉ”์ผ์„ ํ†ตํ•ด ์ž„์‹œ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ฐ›๊ฑฐ๋‚˜, ์ƒˆ๋กœ์šด ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•œ ์ธ์ฆ ์ฝ”๋“œ๋ฅผ ๋ฐ›์•„๋ณธ ๊ฒฝํ—˜์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ์ƒํ™ฉ๋“ค์—์„œ ์ด๋ฉ”์ผ์ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ˆ˜์‹ ๋˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ํ•˜์ง€๋Š” ์•Š๋Š”๋‹ค. ์–ด๋А ์ •๋„์˜ ์‘๋‹ต ์ง€์—ฐ์ด ํ—ˆ์šฉ๋˜๋ฉฐ, ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ํ•ต์‹ฌ ๊ธฐ๋Šฅ์€ ์•„๋‹Œ ๊ฒฝ์šฐ์ด๋ฏ€๋กœ ๋ฉ”์‹œ์ง€ ํ๋Š” ์ด๋Ÿฐ ๊ฒฝ์šฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค

  • ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ •์„ ์œ„ํ•ด ์ด๋ฉ”์ผ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋น„์Šค, ํšŒ์›๊ฐ€์ž…์„ ์œ„ํ•ด ์ด๋ฉ”์ผ์„ ๋ฐœ๊ธ‰ํ•˜๋Š” ์„œ๋น„์Šค ๋“ฑ์€ ๋ฉ”์‹œ์ง€(์ด๋ฉ”์ผ)๋ฅผ ํ์— ๋„ฃ์„ ์ˆ˜ ์žˆ๋‹ค
  • ์ด๋ฉ”์ผ ์ „์†ก ์ „์šฉ ์„œ๋น„์Šค๋Š” ์ด๋ฉ”์ผ์ด ์–ด๋А ์„œ๋น„์Šค๋กœ๋ถ€ํ„ฐ ์ƒ์‚ฐ๋˜์—ˆ๋Š”์ง€์™€๋Š” ๊ด€๊ณ„์—†์ด, ๋ฉ”์‹œ์ง€ ํ์˜ ๋ฉ”์‹œ์ง€๋ฅผ ํ•˜๋‚˜์”ฉ ์†Œ๋น„ํ•˜๊ณ , ๊ทธ์ € ์ด๋ฉ”์ผ์ด ์ „์†ก๋˜์–ด์•ผ ํ•  ๊ณณ์œผ๋กœ ์ด๋ฉ”์ผ์„ ์ „์†กํ•œ๋‹ค
  • ์ด์™€ ๊ฐ™์€ ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋ฉ”์‹œ์ง€ ํ์— ๋“ค์–ด์˜ค๋Š” ๋ฉ”์‹œ์ง€ ์ˆ˜๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋Š” ๊ฒฝ์šฐ ์ด๋ฉ”์ผ ์ „์†ก ์ „์šฉ ์„œ๋น„์Šค ์ธ์Šคํ„ด์Šค๋ฅผ ๋” ๋‘ ์œผ๋กœ์จ ํ™•์žฅํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ํ™•์žฅ์„ฑ์ด ๋›ฐ์–ด๋‚˜๋‹ค

์ฆ‰, ์„œ๋ฒ„ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ  ๋ฐ›๊ฑฐ๋‚˜ ์–ด๋–ค ์ž‘์—…์„ ์š”์ฒญ์„ ํ•  ๋•Œ๋Š” ํ•ญ์ƒ ์‹œ์Šคํ…œ ์žฅ์• ๋ฅผ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•œ๋‹ค.

์„œ๋ฒ„๊ฐ€ ๊ฐ‘์ž๊ธฐ ์ฃฝ๊ฑฐ๋‚˜ ์„œ๋ฒ„ ์ ๊ฒ€ ๋“ฑ์œผ๋กœ ๋‹ค์šดํƒ€์ž„์ด ๋ฐœ์ƒํ•˜๋Š” ๋™์•ˆ์—๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜๊ฐ€ ์—†๋‹ค. ์š”์ฒญํ•˜๋Š” ์„œ๋ฒ„์—์„œ failover ์ฒ˜๋ฆฌ๋ฅผ ํ•ด๋†“๊ณ  ์—ฐ๊ณ„ ์‹œ์Šคํ…œ์ด ๋‹ค์‹œ ์‚ด์•„๋‚ฌ์„ ๋•Œ ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๋ฐฉ๋ฒ•๋„ ์žˆ์ง€๋งŒ MQ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

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



์ด์ฒ˜๋Ÿผ ์„œ๋ฒ„ ๋ถ€ํ•˜๊ฐ€ ๋งŽ์€ ์ž‘์—…์—๋„ ์œ ์šฉํ•˜๋‹ค

์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ, ๋น„๋””์˜ค ์ธ์ฝ”๋”ฉ, ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ์™€ ๊ฐ™์€ ์ž‘์—…์€ ๋ฉ”๋ชจ๋ฆฌ์™€ CPU๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ์ž‘์—…์€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์ด ์ƒ๋‹นํžˆ ํ•œ์ •์ ์ด์–ด์„œ ํ•„์š”ํ•˜๋‹ค๊ณ  ๋ฌด์ž‘์ • ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜๋Š” ์—†๋‹ค. ์ด ๋•Œ์—๋„ MQ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํŽธ๋ฆฌํ•œ๋ฐ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ์ž‘์—…์„ MQ์— ๋„ฃ์–ด๋‘๊ณ  ์„œ๋ฒ„๋Š” ์ž์‹ ์ด ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์–‘์— ๋”ฐ๋ผ ํ•˜๋‚˜์˜ ์ž‘์—…์ด ๋๋‚˜๋ฉด ๋‹ค์Œ์— ์ฒ˜๋ฆฌํ•  ์ž‘์—…์„ MQ์—์„œ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋œ๋‹ค.

์ด ์™ธ์—๋„, MQ๋ฅผ ํ†ตํ•ด ๋ถ€ํ•˜๋ถ„์‚ฐ ์ฒ˜๋ฆฌ๋„ ๊ฐ€๋Šฅํ•˜๋‹ค.

์—ฌ๋Ÿฌ ๋Œ€์˜ ์„œ๋ฒ„๊ฐ€ ํ•˜๋‚˜์˜ ํ๋ฅผ ๋ฐ”๋ผ๋ณด๋„๋ก ๊ตฌ์„ฑํ•˜๋ฉด ์ฒ˜๋ฆฌํ•  ๋ฐ์ดํ„ฐ๊ฐ€ ๋งŽ์•„์ ธ๋„ ๊ฐ ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ์ฒ˜๋ฆฌ๋Ÿ‰์— ๋งž๊ฒŒ ํƒœ์Šคํฌ๋ฅผ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ตฌ์กฐ๋Š” ย horizontal scaling์— ์œ ๋ฆฌํ•˜๋‹ค.

๋˜ํ•œ, MQ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๋ฉด ์™ธ๋ถ€์—์„œ ๋ฐ›์€ ์š”์ฒญ์„ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒŒ ํ•  ์ˆ˜๋„ ์žˆ๋‹ค. ํ•˜์ง€๋งŒ ์–ด๋– ํ•œ ์ด์œ ๋กœ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜์–ด ๋ฒ„๋ฆฌ๋ฉด ๋ฉ”๋ชจ๋ฆฌ์— ์Œ“์•„๋‘” ์š”์ฒญ์€ ๋ชจ๋‘ ์—†์–ด์ง€๊ณ  ๋งŒ๋‹ค. MQ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด๋ฅผ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋Š”๋ฐ MQ๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜จ ํƒœ์Šคํฌ๋ฅผ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋„๋ก ์ฒ˜๋ฆฌํ–ˆ๋‹ค๊ณ  ๋‹ค์‹œ MQ์— ์•Œ๋ ค์ฃผ์ง€ ์•Š์œผ๋ฉด MQ๋Š” ์ด ํƒœ์Šคํฌ๋ฅผ ๋‹ค์‹œ ํ์— ๋„ฃ์–ด ๋‹ค์‹œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•œ๋‹ค.



Message Queue ์ข…๋ฅ˜

  1. RabbitMQ

    ๋จผ์ € AMQP(Advanced Message Queue Protocol)ย ์„ ์•Œ์•„๋ณด์ž.

    [AMQP ์— ๋Œ€ํ•ด์„œ]

    AMQPย ๋Š” ๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(MOM) ์„ ์œ„ํ•œ ๊ฐœ๋ฐฉํ˜• ํ‘œ์ค€ ์‘์šฉ ๊ณ„์ธต ํ”„๋กœํ† ์ฝœ์ด๋‹ค.

    AMQP๋Š” ์ผ๋ฐ˜์ ์ธ ๋ฉ”์„ธ์ง€ ํ์™€ ๋น„์Šทํ•˜์ง€๋งŒย Exchangeย ๋ผ๋Š” ๋ผ์šฐํ„ฐ๊ฐ€ ์กด์žฌํ•˜๋ฉฐย Bindingย ์ด๋ผ๋Š” ๊ฐœ๋…์ด ์กด์žฌ

    [RabbitMQ ๊ตฌ์„ฑ์š”์†Œ]

    • Producerย : ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์ฃผ์ฒด์ด๋ฉฐ ๋ณด๋‚ด๊ณ ์ž ํ•˜๋Š” ๋ฉ”์„ธ์ง€๋ฅผย Exchangeย ์—ย Publishย ํ•ฉ๋‹ˆ๋‹ค.
    • Consumerย :ย Producerย ๋กœ ๋ถ€ํ„ฐ ๋ฉ”์„ธ์ง€๋ฅผ ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜๋Š” ์ฃผ์ฒด์ž…๋‹ˆ๋‹ค.
    • Exchangeย :ย Producerย ๋กœ ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์€ ๋ฉ”์„ธ์ง€๋ฅผ ์–ด๋–ค ๋ฉ”์„ธ์ง€ ํ๋กœ ์ „์†กํ• ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ์žฅ์†Œ์ž…๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์„ ๋ผ์šฐํŒ… ๊ธฐ๋Šฅ์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Queueย :ย Consumerย ๊ฐ€ ์†Œ๋น„ํ•˜๊ธฐ ์ „๊นŒ์ง€ ๋ฉ”์„ธ์ง€๊ฐ€ ๋ณด๊ด€๋˜๋Š” ์žฅ์†Œ์ž…๋‹ˆ๋‹ค.
    • Bindingย :ย Exchangeย ์™€ย Queueย ์™€์˜ ๊ด€๊ณ„์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํŠน์ •ย Exchangeย ๊ฐ€ ํŠน์ •ย Queueย ์— ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋„๋ก ์ •์˜ํ•ฉ๋‹ˆ๋‹ค.

    [RabbitMQ ํŠน์ง• ๋ฐ ์žฅ์ ]

    RabbitMQย ๋Š”ย AMQPย ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•ด ๋†“์€ ์˜คํ”ˆ ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ด๋ฉฐ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŠน์„ฑ์„ ๊ฐ€์ง

    • AMQPย ์„ ๊ตฌํ˜„ํ•ด ๋†“์€ ๋ฉ”์„ธ์ง€ ํ
    • ์‹ ๋ขฐ์„ฑ,์•ˆ์ „์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต
    • Broker ์ค‘์‹ฌ์ ์ธ ํ˜•ํƒœ
    • ์œ ์—ฐํ•˜๊ณ  ๋ณต์žกํ•œ ๋ผ์šฐํŒ…์ด ๊ฐ€๋Šฅ
    • ๊ด€๋ฆฌ UI ์กด์žฌ
    • ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์™€ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›
    • 20kb/sec ์ •๋„์˜ ์†๋„
    • ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ณด๋‹จ, ๊ด€๋ฆฌ์  ์ธก๋ฉด์ด๋‚˜ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ ๊ตฌํ˜„์„ ์œ„ํ•œ ์„œ๋น„์Šค๋ฅผ ๊ตฌ์ถ•ํ•  ๋•Œ ์‚ฌ์šฉ

    [RabbitMQ ์ฒ˜๋ฆฌ ๊ตฌ์กฐ]

    1. Producerย ๊ฐ€ย Brokerย ๋กœ ๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ธ๋‹ค
    2. Brokerย ๋‚ดย Exchangeย ์—์„œ ํ•ด๋‹นํ•˜๋Š” Key ์— ๋งž๊ฒŒย Queueย ์— ๋ถ„๋ฐฐํ•œ๋‹ค(Binding)
    3. ํ•ด๋‹นย Queueย ๋ฅผ ๊ตฌ๋…ํ•˜๋Š”ย Consumerย ๊ฐ€ ๋ฉ”์„ธ์ง€๋ฅผ ์†Œ๋น„ํ•œ๋‹ค

    [RabbitMQ ๋‹จ์ ]

    1. ๋ฉ”์„ธ์ง€ ํ ์„œ๋ฒ„๊ฐ€ ์ข…๋ฃŒ ํ›„ ์žฌ๊ฐ€๋™์‹œ ํ ๋‚ด์šฉ์€ ๋ชจ๋‘ ์‚ญ์ œ(๋ฐ์ดํ„ฐ ์†์‹ค ์œ„ํ—˜)
    2. Producerย ์™€ย Consumerย ์˜ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์Œ

  2. Kafka

    • Linked-inย ์—์„œ ๊ฐœ๋ฐœํ•œย ํŒŒ์ดํ”„๋ผ์ธ, ์ŠคํŠธ๋ฆฌ๋ฐ ๋ถ„์„, ๋ฐ์ดํ„ฐ ํ†ตํ•ฉ ๋ฐ ๋ฏธ์…˜ ํฌ๋ฆฌํ‹ฐ์ปฌ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•ด ์„ค๊ณ„๋œ ๊ณ ์„ฑ๋Šฅ ๋ถ„์‚ฐ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆฌ๋ฐ ํ”Œ๋žซํผ

    • Pub-Sub(Publisher/Subscriber) ๋ชจ๋ธ์˜ ๋ฉ”์‹œ์ง€ ํ ํ˜•ํƒœ๋กœ ๋™์ž‘ํ•˜๋ฉฐ ๋ถ„์‚ฐํ™˜๊ฒฝ์— ํŠนํ™”๋˜์–ด ์žˆ์œผ๋ฉฐ, Fortune 100๊ฐœ ๊ธฐ์—… ์ค‘ 80% ์ด์ƒ์ด Kafka๋ฅผ ์‚ฌ์šฉ

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

    • ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ(rabbitMQ, ActiveMQ)์—์„œ๋Š” ๋ธŒ๋กœ์ปค(Broker)๊ฐ€ ์ปจ์Šˆ๋จธ(consumer)์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ pushํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ธ๋ฐ, ์นดํ”„์นด๋Š” ์ปจ์Šˆ๋จธ(Consumer)๊ฐ€ ๋ธŒ๋กœ์ปค(Broker)๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ง์ ‘ ๊ฐ€์ ธ๊ฐ€๋Š” PULL ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ปจ์Šˆ๋จธ๋Š” ์ž์‹ ์˜ ์ฒ˜๋ฆฌ ๋Šฅ๋ ฅ๋งŒํผ์˜ ๋ฉ”์‹œ์ง€๋งŒ ๊ฐ€์ ธ์™€ ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์Œ

      ๊ทธ๋ ‡๋‹ค๋ฉด, ์ผ๋ฐ˜์ ์œผ๋กœ ํŒŒ์ผ๋ณด๋‹ค ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์„ฑ๋Šฅ์ด ์šฐ์ˆ˜ํ•œ๋ฐ ์™œ ์นดํ”„์นด๊ฐ€ ์„ฑ๋Šฅ์ด ์ข‹์€ ๊ฒƒ์ผ๊นŒ?

      ๊ทธ ์ด์œ ๋Š” ์นดํ”„์นด์˜ ํŒŒ์ผ ์‹œ์Šคํ…œ์„ ํ™œ์šฉํ•œ ๊ณ ์„ฑ๋Šฅ ๋””์ž์ธ์— ์žˆ๋‹ค.

      ์ผ๋ฐ˜์ ์œผ๋กœ ํ•˜๋“œ๋””์Šคํฌ๋Š” ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ์ˆ˜๋ฐฑ๋ฐฐ ๋А๋ฆฌ์ง€๋งŒ ํ•˜๋“œ๋””์Šคํฌ์˜ ์ˆœ์ฐจ์  ์ฝ๊ธฐ์— ๋Œ€ํ•œ ์„ฑ๋Šฅ์€ ๋ฉ”๋ชจ๋ฆฌ๋ณด๋‹ค ํฌ๊ฒŒ ๋–จ์–ด์ง€์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค



๊ฒฐ๋ก 

๋Œ€์šฉ๋Ÿ‰ ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์ด ํ•„์š”ํ•˜๋ฉดย Kafkaย ์„ ๊ตฌ์ถ•ํ•˜๋ฉด ๋˜๊ณ  ๊ทธ ์™ธ์—๋Š”ย Queueย ๊ธฐ๋Šฅ์—์„œ ์‹ ๋ขฐ์„ฑ๊ณผ ์•ˆ์ „์„ฑ์„ ์ข€ ๋” ๋ณด์žฅํ•˜๋Š”ย ActiveMQย ํ˜น์€ย RabbitMQย ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋  ๊ฒƒ ๊ฐ™๋‹ค

MQ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์–ป์„ ์ˆ˜ ์žˆ๋Š” ์ด์ ์€ ๋งŽ์ง€๋งŒ ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์š”์ฒญ ๊ฒฐ๊ณผ๋ฅผ ์ฆ‰์‹œ ์‘๋‹ตํ•ด์•ผํ•  ๋•Œ์—๋Š” MQ๋Š” ์–ด์šธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค. ์ฃผ๋กœ ์š”์ฒญ๊ณผ๋Š” ๋ณ„๊ฐœ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์— ์–ด์šธ๋ฆฐ๋‹ค. ๋˜ํ•œ ์„œ๋ฒ„์—์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ผ์„ MQ๋ฅผ ํ†ตํ•ด ์ „๋‹ฌํ•˜๋ฉด ํ•„์š”์—†๋Š” ์˜ค๋ฒ„ํ—ค๋“œ๋  ์ˆ˜๋„ ์žˆ๋‹ค.

profile
๋ง๋ชปํ•˜๋Š”๊ฐ์ž์—์„œ๋งํ•˜๋Š”๊ฐ์ž๊ฐ€๋˜๊ธฐ๊นŒ์ง€

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