๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Backend๐ŸŒฑ/Infra

Message Queue(MQ), ๋ฉ”์„ธ์ง€ ํ๋ž€?

by ๊ธฐ๋ฉฐ๋ˆ… 2023. 4. 10.

์ž‘๋…„ ์ •๋ณด์ฒ˜๋ฆฌ๊ธฐ์‚ฌ ์ž๊ฒฉ์ฆ ์ทจ๋“์„ ์œ„ํ•ด ๊ณต๋ถ€๋ฅผ ํ•˜๋ฉฐ Message Queue์— ๋Œ€ํ•ด ๊ณต๋ถ€๋ฅผ ํ•œ ์ ์ด ์žˆ์—ˆ๋‹ค. 

์ด๋ก ์— ๋Œ€ํ•ด์„œ๋งŒ ๊ณต๋ถ€๋ฅผ ํ–ˆ์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ์™œ ์“ฐ์ด๋Š” ์ง€, ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€์— ๋Œ€ํ•ด ๊นŠ๊ฒŒ ์•Œ์ง€๋Š” ๋ชปํ–ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

 

์ตœ๊ทผ ๋งŽ์€ ๊ธฐ์—…๋“ค์ด Message Queue๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ๊ธฐ์ˆ ๋“ค์„ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค. 

๋ถ„๋ช…, ๋งŽ์ด ์“ฐ์ด๋Š” ๊ฒƒ์—๋Š” ์ด์œ ๊ฐ€ ์žˆ์„ ๊ฒƒ์ด๋‹ค!

๊ทธ๋ž˜์„œ Message Queue์— ๋Œ€ํ•ด ํ•œ๋ฒˆ ์ •๋ฆฌ๋ฅผ ํ•ด๋ณด๊ณ ์ž ํ•œ๋‹ค.

 

Message Queue(MQ)

๋ฉ”์‹œ์ง€ ํ(Message Queue)๋Š” ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋กœ, ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message Oriented Middleware:MOM)๋ฅผ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ์„ ์˜๋ฏธํ•œ๋‹ค. 

 

๊ทธ๋ ‡๋‹ค๋ฉด, ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message Oriented Middleware:MOM)๋Š” ๋ฌด์—‡์ผ๊นŒ?

๋ฉ”์„ธ์ง€๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋ถ„์‚ฐ๋˜์–ด ์žˆ๋Š” ์‹œ์Šคํ…œ๊ฐ„์˜ Connector ์—ญํ• ๋กœ ๊ฒฐํ•ฉ์„ฑ์„ ๋‚ฎ์ถ”๊ณ , ์ด๋“ค์ด ์„œ๋กœ ์‹ค์‹œ๊ฐ„ ๋น„๋™๊ธฐ์‹ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค.

 

๋ง๋กœ๋งŒ ํ•˜๋ฉด ์ดํ•ด๊ฐ€ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์œผ๋‹ˆ ๊ทธ๋ฆผ์œผ๋กœ ์‚ดํŽด๋ณด์ž. 

Producer, Consumer๊ฐ€ ์กด์žฌํ•˜๋ฉฐ Producer๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ํ์— ์ „์†กํ•˜๊ณ  Consumer๊ฐ€ ํ์˜ ๋ฉ”์„ธ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. 

๋ฉ”์„ธ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์ชฝ๊ณผ ๋ฐ›๋Š” ์ชฝ์— ๋Œ€ํ•ด์„œ๋Š” Producer, Consumer ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค์–‘ํ•˜๊ฒŒ ์ •์˜๋˜์–ด์ง€๊ณ  ์žˆ๋‹ค.

๋ณด๋‚ด๋Š” ์ชฝ ๋ฐ›๋Š” ์ชฝ
Sender Receiver
Producer Consumer
Publisher Subscriber

 

๋ฉ”์„ธ์ง€ ํ๊ฐ€ ๋Œ€์ถฉ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€์— ๋Œ€ํ•ด์„œ๋Š” ์•Œ๊ฒ ๋Š”๋ฐ ์™œ ๋งŽ์€ ๊ธฐ์—…๋“ค์ด ์‚ฌ์šฉํ•˜๊ธฐ ์‹œ์ž‘ํ•œ ๊ฑธ๊นŒ?

 

๊ฐœ๋ฐœ ๊ณต๋ถ€๋ฅผ ํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์ด๋ผ๋ฉด ์š”์ฆ˜ MSA๊ฐ€ ์–ผ๋งˆ๋‚˜ ํ•ซํ•œ์ง€ ์•Œ๊ณ  ์žˆ์„๊ฑฐ๋ผ ์ƒ๊ฐ๋œ๋‹ค.

MSA๋ž€ api๋ฅผ ํ†ตํ•ด ํ†ต์‹ ํ•˜๋Š” ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ์„œ๋น„์Šค์˜ ๋ชจ์ž„์œผ๋กœ ๊ตฌ์กฐํ™”ํ•˜๋Š” *์„œ๋น„์Šค ์ง€ํ–ฅ ์•„ํ‚คํ…์ฒ˜(SOA) ์Šคํƒ€์ผ์˜ ์ผ์ข…์ธ ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ๊ธฐ๋ฒ•์„ ๋งํ•œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์š”์ฆ˜ ๊ฐœ๋ฐœ ํŠธ๋ Œ๋“œ๊ฐ€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ข€ ๋” ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœ, ๋ฐฐํฌ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋” ์ž‘๊ณ  ๋…๋ฆฝ์ ์ธ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑํ•˜๋Š” ๊ฒƒ์„ ์ถ”๊ตฌํ•˜๊ณ  ์žˆ๋‹ค. MQ๋Š” ์ด๋Ÿฌํ•œ ๋ถ„์‚ฐ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์œ„ํ•œ ํ†ต์‹  ๋ฐ ์กฐ์ • ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

 

MQ์˜ ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

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

Message Queue(MQ)๋Š” ์–ธ์ œ์“ฐ๋‚˜์š”?

  • ๋ฉ”์‹œ์ง€ ํ๋Š” ์†Œ๋น„์ž(Consumer)๊ฐ€ ์‹ค์ œ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋А ์‹œ์ ์— ๊ฐ€์ ธ๊ฐ€์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ์ง€๋Š” ๋ณด์žฅํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • ์–ธ์  ๊ฐ€๋Š” ํ์— ๋„ฃ์–ด๋‘” ๋ฉ”์‹œ์ง€๊ฐ€ ์†Œ๋น„๋˜์–ด ์ฒ˜๋ฆฌ๋  ๊ฒƒ์ด๋ผ๊ณ  ๋ฏฟ๋Š” ๊ฒƒ์ด๋‹ค.
  • ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ์  ํŠน์„ฑ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€ ํ๋Š” ์‹คํŒจํ•˜๋ฉด ์น˜๋ช…์ ์ธ ํ•ต์‹ฌ ์ž‘์—…๋ณด๋‹ค๋Š” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๋ถ€๊ฐ€์ ์ธ ๊ธฐ๋Šฅ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ ํ•ฉํ•˜๋‹ค.

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

 


Message Queue์˜ ์žฅ์ 

  • ๋น„๋™๊ธฐ(Asynchronous)
    • ๋ฉ”์‹œ์ง€ ํ๋Š” ์ƒ์‚ฐ๋œ ๋ฉ”์‹œ์ง€์˜ ์ €์žฅ, ์ „์†ก์— ๋Œ€ํ•ด ๋™๊ธฐํ™” ์ฒ˜๋ฆฌ๋ฅผ ์ง„ํ–‰ํ•˜์ง€ ์•Š๊ณ , ํ์— ๋„ฃ์–ด ๋‘๊ธฐ ๋•Œ๋ฌธ์— ๋‚˜์ค‘์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ์—ฌ๊ธฐ์„œ, ๊ธฐ์กด ๋™๊ธฐํ™” ๋ฐฉ์‹์€ ๋งŽ์€ ๋ฉ”์‹œ์ง€(๋ฐ์ดํ„ฐ)๊ฐ€ ์ „์†ก๋  ๊ฒฝ์šฐ ๋ณ‘๋ชฉ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๊ณ , ๋’ค์— ๋“ค์–ด์˜ค๋Š” ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ์ง€์—ฐ๋  ๊ฒƒ์ด๋‹ค.
  • ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„(Decoupling)
    • ์ƒ์‚ฐ์ž ์„œ๋น„์Šค์™€ ์†Œ๋น„์ž ์„œ๋น„์Šค๊ฐ€ ๋…๋ฆฝ์ ์œผ๋กœ ํ–‰๋™ํ•˜๊ฒŒ ๋จ์œผ๋กœ์จ ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋‚ฎ์•„์ง„๋‹ค.
  • ํ™•์žฅ์„ฑ(Scalable)
    • ์ƒ์‚ฐ์ž ์„œ๋น„์Šค ํ˜น์€ ์†Œ๋น„์ž ์„œ๋น„์Šค๋ฅผ ์›ํ•˜๋Š” ๋Œ€๋กœ ํ™•์žฅํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™•์žฅ์„ฑ์ด ์ข‹๋‹ค.
  • ํƒ„๋ ฅ์„ฑ(Resilience)
    • ์†Œ๋น„์ž ์„œ๋น„์Šค๊ฐ€ ๋‹ค์šด๋˜๋”๋ผ๋„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์ค‘๋‹จ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”์‹œ์ง€ ํ์— ๋‚จ์•„ ์žˆ๋‹ค. ์†Œ๋น„์ž ์„œ๋น„์Šค๊ฐ€ ๋‹ค์‹œ ์‹œ์ž‘๋  ๋•Œ๋งˆ๋‹ค ์ถ”๊ฐ€ ์„ค์ •์ด๋‚˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜์ง€ ์•Š๊ณ ๋„ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์‹œ์ž‘ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋ณด์žฅ์„ฑ(Guarantees)
    • ๋ฉ”์‹œ์ง€ ํ๋Š” ํ์— ๋ณด๊ด€๋˜๋Š” ๋ชจ๋“  ๋ฉ”์‹œ์ง€๊ฐ€ ๊ฒฐ๊ตญ ์†Œ๋น„์ž ์„œ๋น„์Šค์—๊ฒŒ ์ „๋‹ฌ๋œ๋‹ค๋Š” ์ผ๋ฐ˜์ ์ธ ๋ณด์žฅ์„ ์ œ๊ณตํ•œ๋‹ค.

Message Queue์˜ ์ข…๋ฅ˜

MQ์˜ ์ข…๋ฅ˜๋กœ๋Š” ์—ฌ๋Ÿฌ๊ฐ€์ง€๊ฐ€ ์žˆ๋Š”๋ฐ Kafka, RabbitMQ, ActiveMQ(JMS)๊ฐ€ ๋Œ€ํ‘œ์ ์ด๋‹ค. Amazon SQS, Amazon MQ ๋“ฑ๋„ ์žˆ๋‹ค.

 

ActiveMQ(JMS)

  • MOM์„ ์ž๋ฐ”์—์„œ ์ง€์›ํ•˜๋Š” ํ‘œ์ค€ API์ด๋‹ค. JMS๋Š” ๋‹ค๋ฅธ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‹ค๋ฅธ MOM์˜ ํ†ต์‹ ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค. (AMQP, SMTP ๊ฐ™์€)
  • ActiveMQ์˜ JMS ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•œ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜(Non ActiveMQ)์˜ JMS์™€๋Š” ํ†ต์‹ ํ•  ์ˆ˜ ์—†๋‹ค.

RabbitMQ

  • RabbitMQ๋Š” AMQP(Advanced Message Queuing Protocol)๋ฅผ ๊ตฌํ˜„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ด๋‹ค.
  • AMQP๋Š” MQ๋ฅผ ์˜คํ”ˆ ์†Œ์Šค์— ๊ธฐ๋ฐ˜ํ•œ ํ‘œ์ค€ ํ”„๋กœํ† ์ฝœ์ด๋‹ค. ํ”„๋กœํ† ์ฝœ๋งŒ ๋งž๋‹ค๋ฉด ๋‹ค๋ฅธ AMQP๋ฅผ ์‚ฌ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด์„œ SMTP, STOMP ํ”„๋กœํ† ์ฝœ๊ณผ์˜ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • AMQP๋Š” ๋ฉ”์„ธ์ง€ ์ „๋‹ฌ์„ ์•„๋ž˜ 3๊ฐ€์ง€ ๋ฐฉ์‹ ์ค‘ ํ•˜๋‚˜๋ฅผ ๋ณด์žฅํ•œ๋‹ค.
    • At-Most-Once: ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ํ•œ๋ฒˆ๋งŒ ์ „๋‹ฌ๋˜๊ฑฐ๋‚˜ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ
    • At-Least-Once: ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ์ตœ์†Œ ํ•œ๋ฒˆ ์ด์ƒ ์ „๋‹ฌ๋จ์„ ๋ณด์žฅ
    • Exactly-Once: ๊ฐ ๋ฉ”์‹œ์ง€๋Š” ๋”ฑ ํ•œ๋ฒˆ๋งŒ ์ „๋‹ฌ๋จ
  • AMQP๋Š” ๋ฉ”์‹œ์ง• ์ œ๊ณต์ž์™€ ํด๋ผ์ด์–ธํŠธ์˜ ๋™์ž‘์— ๋Œ€ํ•ด ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ฒค๋”๋“ค์˜ ๊ตฌํ˜„์ฒด๊ฐ€ ์ƒํ˜ธ ์šด์šฉ๋  ์ˆ˜ ์žˆ๋Š” ์ •๋„๋กœ๊นŒ์ง€ ๊ถŒํ•œ์„ ์ค€๋‹ค.
  • ์ด๋Š” SMTP, HTTP, FTP ๋“ฑ์ด ์ƒํ˜ธ ์šด์šฉ์ด ๊ฐ€๋Šฅํ•œ ์‹œ์Šคํ…œ์„ ๋งŒ๋“ ๋‹ค๋Š” ์ ์—์„œ ๋™์ผํ•˜๋‹ค.
  • ๊ฐ„๋‹จํžˆ ๋งํ•˜๋ฉด Exchange๊ฐ€ Producer๋กœ๋ถ€ํ„ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๊ณ  Queue์— ์ „๋‹ฌํ•œ๋‹ค. Queue๋Š” Consumer์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•œ๋‹ค.

Apache Kafka

  • Apache Kafka๋Š” LinkedIn์ด ๊ฐœ๋ฐœํ•˜๊ณ  Apache Software Foundation์— ๊ธฐ๋ถ€ํ•œ ์˜คํ”ˆ ์†Œ์Šค ์ŠคํŠธ๋ฆผ ํ”„๋กœ์„ธ์‹ฑ ์†Œํ”„ํŠธ์›จ์–ด ํ”Œ๋žซํผ์ด๋‹ค.
  • ๋†’์€ ์ฒ˜๋ฆฌ๋Ÿ‰์„ ์š”๊ตฌํ•˜๋Š” ์‹ค์‹œ๊ฐ„ ๋ฐ์ดํ„ฐ ํ”ผ๋“œ ์ฒ˜๋ฆฌ๋‚˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ์งง์€ ํ”Œ๋žซํผ์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ TCP ๊ธฐ๋ฐ˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•œ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ๋ฅผ ์ค‘์‹ฌ์œผ๋กœ Producer์™€ Consumer๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ Pushํ•˜๊ณ  Pullํ•˜๋Š” ๊ตฌ์กฐ๋ฅผ ๊ฐ€์ง„๋‹ค.

 

  • ํŠน์ง•
    • Publisher / Subscriber ๋ชจ๋ธ
    • ๊ณ ๊ฐ€์šฉ์„ฑ
    • ํ™•์žฅ์„ฑ
    • ๋””์Šคํฌ ์ˆœ์ฐจ ์ €์žฅ ๋ฐ ์ฒ˜๋ฆฌ
    • ๋ถ„์‚ฐ ์ฒ˜๋ฆฌ (Partitioning)
  • ์นดํ”„์นด๋Š” ๋‚ด๊ตฌ์„ฑ์ด ๋›ฐ์–ด๋‚œ ๋ฉ”์‹œ์ง€ ์ €์žฅ์†Œ๋กœ, ๊ณ ๊ฐ๋“ค์€ ๋ฉ”์‹œ์ง€๊ฐ€ ํ•œ ๋ฒˆ ๋ฐฐ๋‹ฌ๋˜๋ฉด ๋Œ€๊ธฐ์—ด์—์„œ ์ œ๊ฑฐ๋˜๋Š” ์ „ํ†ต์ ์ธ ๋ฉ”์‹œ์ง€ ์ค‘๊ฐœ์—…์ž๋“ค๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ํ•„์š”์— ๋”ฐ๋ผ ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ์„ ์žฌ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋Œ€์šฉ๋Ÿ‰์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋˜์–ด ์„ค๊ณ„๋œ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์œผ๋กœ์จ ๊ธฐ์กด ๋ฒ”์šฉ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๋Œ€๋น„ TPS(Transaction per second)๊ฐ€ ๋งค์šฐ ์šฐ์ˆ˜ํ•˜๋‹ค. ๋‹จ, ํŠนํ™”๋œ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์šฉ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์€ ์ œ๊ณต๋˜์ง€ ์•Š๋Š”๋‹ค.
  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ณธ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ๋น„ํ•ด ๋ถ„์‚ฐ ๋ฐ ๋ณต์ œ ๊ตฌ์„ฑ์„ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • AMQP ํ”„๋กœํ† ์ฝœ์ด๋‚˜ JMS API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํ—ค๋”๋ฅผ ์ง€๋‹Œ TCP๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ์— ์˜ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œ์ผฐ๋‹ค.
  • Producer๊ฐ€ Broker์—๊ฒŒ ๋‹ค์ˆ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋•Œ ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ „์†กํ•ด์•ผํ•˜๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ๋‹ค์ˆ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ batchํ˜•ํƒœ๋กœ Broker์—๊ฒŒ ํ•œ ๋ฒˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด TCP/IP ๋ผ์šด๋“œ ํŠธ๋ฆฝ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๊ธฐ๋ณธ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•œ๋‹ค. (RabbitMQ๋Š” ram or disk ์„ ํƒ๊ฐ€๋Šฅ)
  • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ์ด ๋ณด์žฅ๋œ๋‹ค.
  • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ๋ฉ”์‹œ์ง€์˜ ์ˆ˜๊ฐ€ ๋งŽ์„์ˆ˜๋ก ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์˜€์œผ๋‚˜, Kafka์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋งŽ์ด ์Œ“์•„๋‘์–ด๋„ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์ง€ ์•Š๋Š”๋‹ค. ๋˜ํ•œ ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์•„๋‘˜ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฃผ๊ธฐ์ ์ธ batch ์ž‘์—…์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„๋‘๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Consumer์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€(ack)๋ฅผ ๊ณง๋ฐ”๋กœ ์‚ญ์ œํ•˜๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๊ทธ๋Œ€๋กœ ๋‘์—ˆ๋‹ค๊ฐ€ ์„ค์ •๋œ ์ˆ˜๋ช…์ด ์ง€๋‚˜๋ฉด ์‚ญ์ œํ•œ๋‹ค. ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ • ๊ธฐ๊ฐ„๋™์•ˆ ์‚ญ์ œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋„์ค‘์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ Consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฒ˜๋ฆฌ(rewind)ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ธฐ์กด์˜ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” Broker๊ฐ€ Consumer์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ Pushํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ธ๋ฐ ๋ฐ˜ํ•ด, Kafka๋Š” Consumer๊ฐ€ Broker๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๋Š” pull(poliing)๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. 
  • ๋”ฐ๋ผ์„œ Consumer๋Š” ์ž์‹ ์˜ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ๋งŒํผ์˜ ๋ฉ”์‹œ์ง€๋งŒ Broker๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋ฅผ Pull ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์•„๋‘์—ˆ๋”ฐ๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” Batch Consumer์˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•˜๋‹ค.
  • ํ์˜ ๊ธฐ๋Šฅ์€ JMS, AMQP ๊ธฐ๋ฐ˜์˜ RabbitMQ๋“ฑ์— ๋น„ํ•ด์„œ๋Š” ๋งŽ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”์‹œ์ง€๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•์ด๋‹ค. ํŠนํžˆ ๋ถ„์‚ฐ ํ™˜๊ฒฝ์—์„œ ๋ณต์‚ฌ๋ณธ์„ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋…ธ๋“œ ์žฅ์• ์— ๋Œ€ํ•œ ์žฅ์•  ๋Œ€์‘์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฐ•์ ์ด ์žˆ๋‹ค.

์ฐธ๊ณ 

 

https://velog.io/@spamdong/%EB%A9%94%EC%84%B8%EC%A7%80-%EC%A7%80%ED%96%A5-%EB%AF%B8%EB%93%A4%EC%9B%A8%EC%96%B4MOM

 

๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(MOM)

๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message Oriented Middleware > MOM) ๋ฏธ๋“ค์›จ์–ด๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์—ฐ๊ฒฐํ•ด ์ด๋“ค์ด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๋ฉ”์„ธ์ง€ ์ง€ํ–ฅ ์‹œ์Šคํ…œ์ด๋ž€ ๋ฉ”์„ธ์ง€ API๋ฅผ ํ†ตํ•ด ๊ฐ

velog.io

 

https://goyunji.tistory.com/125

 

Message Queue ๋ž€? MQ ์ข…๋ฅ˜

ํšŒ์‚ฌ์—์„œ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋น„์Šค์—์„œ kafka๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด์„œ MQ์— ๋Œ€ํ•ด ์ฐพ์•„๋ณธ ์ •๋ณด๋ฅผ ๊ณต์œ ํ•œ๋‹ค. ๋‚˜๋„ ๋‹ค๋ฅธ ์—ฌ๋Ÿฌ ์‚ฌ์ดํŠธ์—์„œ ๋งŽ์€ ์ •๋ณด๋ฅผ ์–ป์—ˆ๊ธฐ์— ๋ˆ„๊ตฐ๊ฐ€์—๊ฒŒ๋„ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ํ•ด์„œใ…Ž,ใ…Ž Message Queu

goyunji.tistory.com

https://tecoble.techcourse.co.kr/post/2021-09-19-message-queue/

 

๋ฉ”์‹œ์ง€ ํ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž!

๋ฉ”์‹œ์ง€ ํ๋ž€ ๋ฉ”์‹œ์ง€ ํ(Message Queue)๋Š” ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ํ†ต์‹  ๋ฐฉ๋ฒ• ์ค‘์— ํ•˜๋‚˜๋กœ, ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Message Oriented Middleware:MOM…

tecoble.techcourse.co.kr

https://velog.io/@rlaghwns1995/MOM-Message-Oriented-Middleware-%EB%9E%80

 

MOM (Message Oriented Middleware) ๋ž€?

๋…๋ฆฝ๋œ ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ํ˜•ํƒœ์˜ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ๋งํ•œ๋‹ค. ์—ฌ๊ธฐ์„œ ๋ฏธ๋“ค์›จ์–ด๋ž€ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค์„ ์—ฐ๊ฒฐํ•ด ์ด๋“ค์ด ์„œ๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ์†Œํ”„ํŠธ์›จ์–ด์ด๋‹ค. ๋ฉ”์„ธ์ง€ ์ง€

velog.io