Study: ComputerScience(CS)/CS: Network

[Network] Message Queue(๋ฉ”์‹œ์ง€ํ) ์ •๋ฆฌ

DrawingProcess 2022. 11. 26. 12:37
๋ฐ˜์‘ํ˜•
๐Ÿ’ก ๋ณธ ๋ฌธ์„œ๋Š” 'Message Queue(๋ฉ”์‹œ์ง€ํ) ์ •๋ฆฌ'์— ๋Œ€ํ•ด ์ •๋ฆฌํ•ด๋†“์€ ๊ธ€์ž…๋‹ˆ๋‹ค.
๋ฒค๋”๋“ค ์‚ฌ์ด์˜ ํ†ต์‹ ์„ ํ•˜๋ ค๋‹ค๋ณด๋‹ˆ ๋น„๋™๊ธฐ๋กœ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌํ•˜๋Š” ํ”„๋กœํ† ์ฝœ์ด ํ•„์š”ํ–ˆ๋Š”๋ฐ, Message Queue๊ฐ€ ์ด๋ฅผ ์ž˜ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๊ฒƒ์„ ํ™•์ธํ•˜๊ณ  Message Queue์— ๋Œ€ํ•ด ์ •๋ฆฌํ•œ ๊ธ€์ด๋‹ˆ ์ฐธ๊ณ  ๋ถ€ํƒ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

1. Message Queue

1.1 Message Queue(์ดํ•˜ ๋ฉ”์‹œ์ง€ ํ) ๋ฐฐ๊ฒฝ

๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด(Meesage Oriented Middleware: MOM)์€ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์—์„œ ๋ฐ์ดํ„ฐ ์†ก์ˆ˜์‹ ์„ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.  MOM์„ ๊ตฌํ˜„ํ•œ ์‹œ์Šคํ…œ์„ ๋ฉ”์‹œ์ง€ ํ(MessageQueue: MQ)๋ผ ํ•ฉ๋‹ˆ๋‹ค. ๋ฉ”์‹œ์ง€ ํ๋Š” ๋ณ„๋„์˜ ๊ณต์ • ์ž‘์—…์„ ์—ฐ๊ธฐํ•  ์ˆ˜ ์žˆ๋Š” ์œ ์—ฐ์„ฑ์„ ์ œ๊ณตํ•˜์—ฌ SOA(Service-Oriented Architecture)์˜ ๊ฐœ๋ฐœ์— ๋„์›€์„ ์ค„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. 
* ๋ฉ”์‹œ์ง€: ์š”์ฒญ, ์‘๋‹ต, ์˜ค๋ฅ˜ ๋ฉ”์‹œ์ง€ ํ˜น์€ ๋‹จ์ˆœํ•œ ์ •๋ณด ๋“ฑ์˜ ์ž‘์€ ๋ฐ์ดํ„ฐ

์ถœ์ฒ˜: https://tecoble.techcourse.co.kr/post/2021-09-19-message-queue/

ํ”„๋กœ๊ทธ๋ž˜๋ฐ์—์„œ MQ๋Š” ํ”„๋กœ์„ธ์Šค ๋˜๋Š” ํ”„๋กœ๊ทธ๋žจ ์ธ์Šคํ„ด์Šค๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์„œ๋กœ ๊ตํ™˜ํ• ๋•Œ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์ด๋•Œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•  ๋•Œ ์‹œ์Šคํ…œ์ด ๊ด€๋ฆฌํ•˜๋Š” ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์ด์šฉํ•˜๋Š” ๊ฒƒ์ด ํŠน์ง•์ž…๋‹ˆ๋‹ค. ์ด๋ ‡๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋‚˜ ํ”„๋กœ๊ทธ๋žจ ์‚ฌ์ด์— ๋ฉ”์‹œ์ง€๋ฅผ ๊ตํ™˜ํ•  ๋•Œ AMQP(Advanced Message Queuing Protocol)์„ ์ด์šฉํ•ฉ๋‹ˆ๋‹ค. AMQP๋Š” ๋ฉ”์‹œ์ง€ ์ง€ํ–ฅ ๋ฏธ๋“ค์›จ์–ด๋ฅผ ์œ„ํ•œ open standard application layer protocol์ž…๋‹ˆ๋‹ค. AMQP๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‹ค๋ฅธ ๋ฒค๋” ์‚ฌ์ด์— ๋ฉ”์„ธ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ๋ฐ JMS(Java Message Service)๊ฐ€ API๋ฅผ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ๊ณผ ๋‹ฌ๋ฆฌ AMQP๋Š” wire-protocol์„ ์ œ๊ณตํ•˜๋Š”๋ฐ ์ด๋Š” octet stream์„ ์ด์šฉํ•ด์„œ ๋‹ค๋ฅธ ๋„คํŠธ์›Œํฌ ์‚ฌ์ด์— ๋ฐ์ดํ„ฐ๋ฅผ ์ „์†กํ•  ์ˆ˜ ์žˆ๋Š” ํฌ๋งท์œผ๋กœ ์ด๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

1.2 ๋ฉ”์‹œ์ง€ ํ์˜ ์žฅ์ 

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

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

1.3 ๋ฉ”์‹œ์ง€ ํ ํ™œ์šฉ

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

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

1.4 JMS vs AMQP

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

2. ์˜คํ”ˆ ์†Œ์Šค ๋ฉ”์‹œ์ง€ ํ

RabbitMQ, ActiveMQ, ZeroMQ, Kafka์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

2.1 ActiveMQ : JMS(Java Message Service)

์•„ํŒŒ์น˜ ActiveMQ๋Š” JMS ํด๋ผ์ด์–ธํŠธ์™€ ํ•จ๊ป˜ ์ž๋ฐ”๋กœ ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜ ์ด์ƒ์˜ ํด๋ผ์ด์–ธํŠธ์™€ ์„œ๋ฒ„๊ฐ„์˜ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. JMS 1.1์„ ํ†ตํ•ด ์ž๋ฐ” ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๋‹ค๋ฅธ "๊ต์ฐจ์–ธ์–ด"๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜์€ ์ปดํ“จํ„ฐ ํด๋Ÿฌ์Šคํ„ฐ๋ง ๋ฐ ๊ฐ€์ƒ๋ฉ”๋ชจ๋ฆฌ, ์บ์‰ฌ ๊ทธ๋ฆฌ๊ณ  ์ €๋„ ์ง€์†์„ฑ์„ ์ œ์™ธํ•œ ์–ด๋–ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ JMS ์ง€์†์„ฑ ์ œ๊ณต์ž๋กœ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ๋“ฑ์˜ ํŠน์ง•๋“ค์„ ํ†ตํ•ด ์šด์˜๋ฉ๋‹ˆ๋‹ค.

2.1.1 ์ฃผ์š” ํŠน์„ฑ๋“ค

  • ๋‹ค์–‘ํ•œ ํ”„๋กœํ† ์ฝœ์„ ์ง€์›ํ•˜๋ฉฐ Java, C, C++, C#, Ruby, Perl, Python, ๊ทธ๋ฆฌ๊ณ  PHP ํด๋ผ์ด์–ธํŠธ๋“ค์„ ์ง€์›ํ•˜๋ฉฐ, OpenWire๋ฅผ ํ†ตํ•ด ๊ณ ์„ฑ๋Šฅ์˜ Java, C, C++, C# ํด๋ผ์ด์–ธํŠธ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • JMS๋Š” ๋‹ค๋ฅธ ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋“ค๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ ๋‹ค๋ฅธ MOM(AMQP, SMTP ๊ฐ™์€)๊ณผ์˜ ํ†ต์‹ ์€ ๋ถˆ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • Stomp๋ฅผ ํ†ตํ•ด C, Ruby, Perl, Python, PHP ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹ค๋ฅธ ์ธ๊ธฐ์žˆ๋Š” ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค๋“ค๊ณผ ๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ActiveMQ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Message Groups, Virtual Destinations, Wildcards์™€ Composite Destinations๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • JMS 1.1๊ณผ J2EE 1.4๋ฅผ ์™„๋ฒฝํ•˜๊ฒŒ ์ง€์›ํ•˜๋ฉฐ, transient, persistent, transactional, ๊ทธ๋ฆฌ๊ณ  XA ๋ฉ”์‹œ์ง•์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • Spring ์ง€์›์œผ๋กœ ActiveMQ๋Š” Spring ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋งค์šฐ ์‰ฝ๊ฒŒ ์ž„๋ฒ ๋”ฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, Spring์˜ XML ์„ค์ • ๋ฉ”์ปค๋‹ˆ์ฆ˜์— ์˜ํ•ด ์‰ฝ๊ฒŒ ์„ค์ •๋ฉ๋‹ˆ๋‹ค.
  • Geronimo, JBoss 4, GlassFish, ๊ทธ๋ฆฌ๊ณ  WebLogic๊ณผ ๊ฐ™์€ ์ธ๊ธฐ์žˆ๋Š” J2EE ์„œ๋ฒ„๋“ค๊ณผ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ๋ฉ๋‹ˆ๋‹ค.
  • Inbound์™€ Outbound ๋ฉ”์‹œ์ง•์„ ์œ„ํ•œ JCA 1.5 Resource Adapter๋ฅผ ํฌํ•จํ•˜์—ฌ ActiveMQ๊ฐ€ J2EE 1.4 ํ˜ธํ™˜ ์„œ๋ฒ„์— ์ž๋™ ๋ฐฐ์น˜๋ฉ๋‹ˆ๋‹ค.
  • In-VM, TCP, SSL, NIO, UDP, Multicast, JGroups, ๊ทธ๋ฆฌ๊ณ  JXTA Transport๋“ค๊ณผ ๊ฐ™์€ ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ฐ€๋Šฅํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ๋“ค์„ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ์˜ ์ €๋„์„ ์‚ฌ์šฉํ•  ๋•Œ์— JDBC๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋งค์šฐ ๋น ๋ฅธ Persistnece๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ณ ์„ฑ๋Šฅ์˜ ํด๋Ÿฌ์Šคํ„ฐ๋ง, ํด๋ผ์ด์–ธํŠธ-์„œ๋ฒ„, Peer ๊ธฐ๋ฐ˜ ํ†ต์‹ ์„ ์ง€์›์„ ์œ„ํ•œ ์„ค๊ณ„๊ฐ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
  • REST API๋ฅผ ํ†ตํ•ด ์›น๊ธฐ๋ฐ˜ ๋ฉ”์‹œ์ง• API๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ์›น๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋ฉ”์‹œ์ง• ๋„๊ตฌ๊ฐ€ ๋  ์ˆ˜ ์žˆ๋„๋ก, Ajax๋ฅผ ํ†ตํ•ด ์ˆœ์ˆ˜ํ•œ DHTML์„ ์‚ฌ์šฉํ•œ ์›น์ŠคํŠธ๋ฆฌ๋ฐ ์ง€์›์„ ํ•ฉ๋‹ˆ๋‹ค.
  • In-memory JMS Provider๋กœ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ด๋Š” JMS๋ฅผ ์‚ฌ์šฉํ•œ ๋‹จ์œ„ ํ…Œ์ŠคํŠธ์— ์ ํ•ฉํ•œ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.
  • STOMP, AMQP, MQTT, Openwire, SSL, and WebSockets

2.2 RabbitMQ : AMQP(Advanced Message Queuing Protocol)

RabbitMQ๋Š” AMQP ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•œ ์˜คํ”ˆ์†Œ์Šค ๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค์ž…๋‹ˆ๋‹ค. ์‹ ๋ขฐ์„ฑ, ์•ˆ์ •์„ฑ๊ณผ ์„ฑ๋Šฅ์„ ์ถฉ์กฑํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์™€ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•˜๋ฉฐ ์˜คํ”ˆ์†Œ์Šค๋กœ ์ƒ์—…์  ์ง€์›์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2.2.1 ์ฃผ์š” ํŠน์„ฑ๋“ค

  • ์œ ์—ฐํ•œ ๋ผ์šฐํŒ…: Message Queue๊ฐ€ ๋„์ฐฉํ•˜๊ธฐ ์ „์— ๋ผ์šฐํŒ… ๋˜๋ฉฐ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํ†ตํ•ด SMTP, STOMP ํ”„๋กœํ† ์ฝœ๊ณผ์˜ ํ™•์žฅ์ด ๊ฐ€๋Šฅํ•˜์—ฌ ๋ณต์žกํ•œ ๋ผ์šฐํŒ…๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํด๋Ÿฌ์Šคํ„ฐ๋ง: ๋กœ์ปฌ๋„คํŠธ์›Œํฌ์— ์žˆ๋Š” ์—ฌ๋Ÿฌ RabbitMQ ์„œ๋ฒ„๋ฅผ ๋…ผ๋ฆฌ์ ์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋งํ•  ์ˆ˜ ์žˆ๊ณ  ๋…ผ๋ฆฌ์ ์ธ ๋ธŒ๋กœ์ปค๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ”„๋กœํ† ์ฝœ๋งŒ ๋งž๋‹ค๋ฉด ๋‹ค๋ฅธ AMQP๋ฅผ ์‚ฌ์šฉํ•œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜๋ผ๋ฆฌ ํ†ต์‹ ์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์™€ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
  • ๊ด€๋ฆฌ UI๊ฐ€ ์žˆ์–ด ํŽธํ•˜๊ฒŒ ๊ด€๋ฆฌ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

2.3 ZeroMQ (0MQ, zmq)

ZeroMQ๋Š” ๋ฉ”์‹œ์ง• ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ด๋ฉฐ, ๋งŽ์€ ์ˆ˜๊ณ ๋ฅผ ๋“ค์ด์ง€ ์•Š๊ณ ๋„ ๋น ๋ฅด๊ณ  ๋ณต์žกํ•œ ์ปค๋ฎค๋‹ˆ์ผ€์ด์…˜ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค๋‹ˆ๋‹ค. ZeroMQ ์ฒ˜์Œ์— '๋ฉ”์„ธ์ง• ๋ฏธ๋“ค์›จ์–ด'๋กœ ์†Œ๊ฐœ๋˜์—ˆ์ง€๋งŒ, ๋‚˜์ค‘์—๋Š” '์Šคํ…Œ๋กœ์ด๋“œ๋ฅผ ๋งž์€ TCP' ๊ทธ๋ฆฌ๊ณ  ๋‚˜์ค‘์—๋Š” '๋„คํŠธ์›Œํฌ ์Šคํƒ์˜ ์ƒˆ๋กœ์šด ๋ ˆ์ด์–ด'๋ผ๊ณ  ๋งํ•˜๊ณค ํ•ฉ๋‹ˆ๋‹ค. ZeroMQ๋Š” ์ž„๋ฒ ๋””๋“œ ๋„คํŠธ์›Œํ‚น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ด์ง€๋งŒ, ๋™์‹œ์„ฑ ํ”„๋ ˆ์ž„์›Œํฌ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•ฉ๋‹ˆ๋‹ค.

ZeroMQ๋Š” in-process, inter-process, TCP and multicast ์ฒ˜๋Ÿผ ๋‹ค์–‘ํ•œ ๋ฐฉ์‹์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•˜๋Š” ์†Œ์ผ“์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. fanout, pub-sub, tsak distribution, and request-reply์™€ ๊ฐ™์€ ํŒจํ„ด์œผ๋กœ N-to-N ์†Œ์ผ“์„ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํด๋Ÿฌ์Šคํ„ฐ ๊ตฌ์กฐ์—์„œ ์ถฉ๋ถ„ํ•œ ์†๋„๋ฅผ ์ œ์†กํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ๋น„๋™๊ธฐ I/O ๋ชจ๋ธ์€ ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๋ฅผ ์ œ๊ณตํ•˜๋Š” ํ™•์žฅ ๋ฉ€ํ‹ฐ ์ฝ”์–ด ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ language API๋ฅผ ์ œ๊ณตํ•˜์—ฌ ๊ฑฐ์˜ ๋ชจ๋“  ์–ธ์–ด์™€ ์šด์˜์ฒด์ œ๋ฅผ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค. ZeroMQ๋Š” iMatix์—์„œ ๋งŒ๋“ค์–ด์กŒ์œผ๋ฉฐ, LGPL ์˜คํ”ˆ์†Œ์Šค ์†Œํ”„ํŠธ์›จ์–ด์ž…๋‹ˆ๋‹ค.

2.3.1 ์ฃผ์š” ํŠน์„ฑ๋“ค

ํผํฌ๋จผ์Šค

๋‹ค๋ฅธ AMQP๋“ค ๋ณด๋‹ค ๋‹จ์œ„๊ฐ€ ๋‹ค๋ฅผ ์ •๋„๋กœ ๋น ๋ฅด๋ฉฐ, ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ธฐ์ˆ ๋กœ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • AMQP์ฒ˜๋Ÿผ ๊ณผ๋„ํ•˜๊ฒŒ ๋ณต์žกํ•œ ํ”„๋กœํ† ์ฝœ์ด ์—†์Šต๋‹ˆ๋‹ค.
  • ์‹ ๋ขฐ์„ฑ ์žˆ๋Š” ๋ฉ€ํ‹ฐ์บ์ŠคํŠธ๋‚˜ Y-suite IPC ์ „์†ก๊ฐ™์€ ํšจ์œจ์ ์ธ ์ „์†ก์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค.
  • ์ง€๋Šฅ์ ์ธ ๋ฉ”์‹œ์ง€ ๋ฌถ์Œ์„ ํ™œ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ZeroMQ๋กœ ํ•˜์—ฌ๊ธˆ ํ”„๋กœํ† ์ฝœ ์˜ค๋ฒ„ํ—ค๋“œ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ์ค„์—ฌ์„œ TCP/IP๋ฅผ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค.

๋‹จ์ˆœ์„ฑ

API๊ฐ€ ๊ฐ„๋‹จํ•˜๋ฉฐ ์†Œ์ผ“ ๋ฐฉ์‹(์†Œ์ผ“ ๋ฒ„ํผ์— ๊ณ„์† '๊ฐ’์„ ์ฑ„์›Œ' ์ฃผ์–ด์•ผ ํ•˜๋Š”)์— ๋น„๊ตํ•˜๋ฉด ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์ •๋ง๋กœ ๋‹จ์ˆœํ•ฉ๋‹ˆ๋‹ค.

  • ZeroMQ์—์„œ๋Š” ๊ทธ๋ƒฅ ๋น„๋™๊ธฐ send ํ˜ธ์ถœ์„ ๋ถ€๋ฅด๊ธฐ๋งŒ ํ•˜๋ฉด, ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ์˜ ํ์— ๋„ฃ๊ณ  ํ•„์š”ํ•œ ๋ชจ๋“  ์ผ์„ ํ•ด์ค๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๋น„๋™๊ธฐ ํŠน์„ฑ์ด ์žˆ๊ธฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์ฒ˜๋ฆฌ๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋ฉฐ ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค. ZeroMQ์˜ ๋น„๋™๊ธฐ ํŠน์„ฑ์€ ์ด๋ฒคํŠธ ์ค‘์‹ฌ์˜ ํ”„๋ ˆ์ž„์›Œํฌ์—๋„ ์ตœ์ ์ž…๋‹ˆ๋‹ค.
  • ZeroMQ์˜ ๋‹จ์ˆœํ•œ ์™€์ด์–ด ํ”„๋กœํ† ์ฝœ์€ ๋‹ค์–‘ํ•œ ์ „์†ก ํ”„๋กœํ† ์ฝœ์ด ์‚ฌ์šฉ๋˜๋Š” ์š”์ฆ˜์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค. AMQP๋ฅผ ์“ด๋‹ค๋ฉด ๊ทธ ์œ„์— ๋˜ ๋‹ค๋ฅธ ํ”„๋กœํ† ์ฝœ ๋ ˆ์ด์–ด๋ฅผ ์“ด๋‹ค๋Š” ๊ฒƒ์€ ์ข€ ์ด์ƒํ•˜๊ฒŒ ๋Š๊ปด์ง‘๋‹ˆ๋‹ค. ZeroMQ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๊ทธ๋ƒฅ BLOB(Binary Large Object)์œผ๋กœ ๋ณด๊ธฐ์— ๋ฉ”์‹œ์ง€ ์ธ์ฝ”๋”ฉ ๋ฐฉ์‹์„ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹จ์ˆœํžˆ JSON ๋ฉ”์„ธ์ง€๋“ค์„ ๋ณด๋‚ด๋˜์ง€, ์•„๋‹ˆ๋ฉด BSON, Protocol Buffers๋‚˜ Thrift ๊ฐ™์€ ๋ฐ”์ด๋„ˆ๋ฆฌ ๋ฐฉ์‹ ๋ฉ”์‹œ์ง€๋“ค๋„ ๊ดœ์ฐฎ์Šต๋‹ˆ๋‹ค. 

ํ™•์žฅ์„ฑ

ZeroMQ ์†Œ์ผ“๋“ค์€ ์ €์ˆ˜์ค€์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ์‚ฌ์‹ค์€ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. 

  • ํ•˜๋‚˜์˜ ZeroMQ ์†Œ์ผ“์€ ๋ณต์ˆ˜์˜ ์ ‘์ ์„ ๊ฐ€์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ๋“ค ๊ฐ„์— ์ž๋™์œผ๋กœ ๋ฉ”์‹œ์ง€ ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
  • ๋˜ํ•œ ํ•˜๋‚˜์˜ ์†Œ์ผ“์œผ๋กœ ๋ณต์ˆ˜์˜ ์†Œ์Šค์—์„œ ๋ฉ”์‹œ์ง€๋“ค์„ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒŒ์ดํŠธ ์—ญํ• ์„ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

2.4 Apache Kafka

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

2.4.1 ์ฃผ์š” ํŠน์„ฑ๋“ค

  • ๋Œ€์šฉ๋Ÿ‰์˜ ์‹ค์‹œ๊ฐ„ ๋กœ๊ทธ ์ฒ˜๋ฆฌ์— ํŠนํ™”๋˜์–ด ์„ค๊ณ„๋œ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์œผ๋กœ์จ ๊ธฐ์กด ๋ฒ”์šฉ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๋Œ€๋น„ TPS๊ฐ€ ๋งค์šฐ ์šฐ์ˆ˜ํ•ฉ๋‹ˆ๋‹ค. ๋‹จ, ํŠนํ™”๋œ ์‹œ์Šคํ…œ์ด๊ธฐ ๋•Œ๋ฌธ์— ๋ฒ”์šฉ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ ์ œ๊ณตํ•˜๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ๋“ค์€ ์ œ๊ณต๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  • ๋ถ„์‚ฐ ์‹œ์Šคํ…œ์„ ๊ธฐ๋ณธ์œผ๋กœ ์„ค๊ณ„๋˜์—ˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์— ๋น„ํ•ด ๋ถ„์‚ฐ ๋ฐ ๋ณต์ œ ๊ตฌ์„ฑ์„ ์†์‰ฝ๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • AMQP ํ”„๋กœํ† ์ฝœ์ด๋‚˜ JMS API๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ  ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ํ—ค๋”๋ฅผ ์ง€๋‹Œ TCP ๊ธฐ๋ฐ˜์˜ ํ”„๋กœํ† ์ฝœ์„ ์‚ฌ์šฉํ•˜์—ฌ ํ”„๋กœํ† ์ฝœ์— ์˜ํ•œ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œ์ผฐ์Šต๋‹ˆ๋‹ค.
  • Producer๊ฐ€ broker์—๊ฒŒ ๋‹ค์ˆ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•  ๋•Œ ๊ฐ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ „์†กํ•ด์•ผํ•˜๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ, ๋‹ค์ˆ˜์˜ ๋ฉ”์‹œ์ง€๋ฅผ batchํ˜•ํƒœ๋กœ broker์—๊ฒŒ ํ•œ๋ฒˆ์— ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ์–ด TCP/IP ๋ผ์šด๋“œํŠธ๋ฆฝ ํšŸ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋ฉ”์‹œ์ง€๋ฅผ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•˜๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
  • ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ณ„๋„์˜ ์„ค์ •์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ฐ์ดํ„ฐ์˜ ์˜์†์„ฑ(durabiility)์ด ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค.
    • ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” ์ฒ˜๋ฆฌ๋˜์ง€ ์•Š๊ณ  ๋‚จ์•„์žˆ๋Š” ๋ฉ”์‹œ์ง€์˜ ์ˆ˜๊ฐ€ ๋งŽ์„ ์ˆ˜๋ก ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์˜€์œผ๋‚˜, Kafka์—์„œ๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํŒŒ์ผ ์‹œ์Šคํ…œ์— ์ €์žฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋งŽ์ด ์Œ“์•„๋‘์–ด๋„ ์„ฑ๋Šฅ์ด ํฌ๊ฒŒ ๊ฐ์†Œํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋˜ํ•œ ๋งŽ์€ ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์•„๋‘˜ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์‹ค์‹œ๊ฐ„ ์ฒ˜๋ฆฌ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ์ฃผ๊ธฐ์ ์ธ batch ์ž‘์—…์— ์‚ฌ์šฉํ•  ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„๋‘๋Š” ์šฉ๋„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • Consumer์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€(acknowledged message)๋ฅผ ๊ณง๋ฐ”๋กœ ์‚ญ์ œํ•˜๋Š” ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ๊ณผ๋Š” ๋‹ฌ๋ฆฌ ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์‚ญ์ œํ•˜์ง€ ์•Š๊ณ  ํŒŒ์ผ ์‹œ์Šคํ…œ์— ๊ทธ๋Œ€๋กœ ๋‘์—ˆ๋‹ค๊ฐ€ ์„ค์ •๋œ ์ˆ˜๋ช…์ด ์ง€๋‚˜๋ฉด ์‚ญ์ œํ•˜๋„๋ก ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค. ์ฒ˜๋ฆฌ๋œ ๋ฉ”์‹œ์ง€๋ฅผ ์ผ์ • ๊ธฐ๊ฐ„๋™์•ˆ ์‚ญ์ œํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋„์ค‘ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€๊ฑฐ๋‚˜ ์ฒ˜๋ฆฌ ๋กœ์ง์ด ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๊ฒฝ์šฐ consumer๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ๋‹ค์‹œ ์ฒ˜๋ฆฌ(rewind)ํ•˜๋„๋ก ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ธฐ์กด์˜ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” broker๊ฐ€ consumer์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ pushํ•ด ์ฃผ๋Š” ๋ฐฉ์‹์ธ๋ฐ ๋ฐ˜ํ•ด, Kafka๋Š” consumer๊ฐ€ broker๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๋Š” pull ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ consumer๋Š” ์ž์‹ ์˜ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ๋งŒํผ์˜ ๋ฉ”์‹œ์ง€๋งŒ broker๋กœ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
    • ๊ธฐ์กด์˜ push ๋ฐฉ์‹์˜ ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” broker๊ฐ€ ์ง์ ‘ ๊ฐ consumer๊ฐ€ ์–ด๋–ค ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•˜๊ณ  ์–ด๋–ค ๋ฉ”์‹œ์ง€๋ฅผ ์ฒ˜๋ฆฌ ์ค‘์ธ์ง€ ํŠธ๋ž™ํ‚นํ•˜์˜€๋‹ค๋ฉด, Kafka์—์„œ๋Š” consumenr๊ฐ€ ์ง์ ‘ ํ•„์š”ํ•œ ๋ฉ”์‹œ์ง€๋ฅผ broker๋กœ ๋ถ€ํ„ฐ pullํ•˜๋ฏ€๋กœ broker์˜ consumer์™€ ๋ฉ”์‹œ์ง€ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ๋ถ€๋‹ด์ด ๊ฒฝ๊ฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
    • ๋ฉ”์‹œ์ง€๋ฅผ pull ๋ฐฉ์‹์œผ๋กœ ๊ฐ€์ ธ์˜ค๋ฏ€๋กœ, ๋ฉ”์‹œ์ง€๋ฅผ ์Œ“์•„๋‘์—ˆ๋‹ค๊ฐ€ ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” batch consumer์˜ ๊ตฌํ˜„์ด ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • ํ์˜ ๊ธฐ๋Šฅ์€ ๊ธฐ์กด์˜ JMS์˜ AMQP ๊ธฐ๋ฐ˜์˜ RabbitMQ(๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๋ผ์šฐํŒ…, ํŽ˜๋ฐ๋ ˆ์ด์…˜ ๊ธฐ๋Šฅ ๋“ฑ)๋“ฑ์— ๋น„ํ•ด์„œ๋Š” ๋งŽ์ด ๋ถ€์กฑํ•˜์ง€๋งŒ ๋Œ€์šฉ๋Ÿ‰ ๋ฉ”์„ธ์ง€๋ฅผ ์ง€์›ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ํฐ ํŠน์ง•์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋ถ„์‚ฐํ™˜๊ฒฝ์—์„œ ์šฉ๋Ÿ‰ ๋ฟ ์•„๋‹ˆ๋ผ, ๋ณต์‚ฌ๋ณธ์„ ๋‹ค๋ฅธ ๋…ธ๋“œ์— ์ €์žฅํ•จ์œผ๋กœ์จ ๋…ธ๋“œ ์žฅ์• ์— ๋Œ€ํ•œ ์žฅ์•  ๋Œ€์‘์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์šฉ๋Ÿ‰์—๋Š” ํ™•์‹คํ•˜๊ฒŒ ๊ฐ•์ ์„ ์ง€๋‹ˆ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

3. ์˜คํ”ˆ ์†Œ์Šค ๋ฉ”์‹œ์ง€ ํ ๋น„๊ต

3.1 MQ๋ณ„ ์ง€์› ํ”„๋กœํ† ์ฝœ

3.2 MQ๋ณ„ ์ง€์› ํด๋ผ์ด์–ธํŠธ(language API)

3.3 MQ๋ณ„ Producer ์„ฑ๋Šฅ

Kafka: A distributed messaging system for log processing

  • ๋ถ‰์€ ์ƒ‰ ๊ทธ๋ž˜ํ”„๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ํ•œ ๋ฒˆ์— 50๊ฐœ์”ฉ batch๋กœ ์ „์†กํ•œ ๊ฒฐ๊ณผ์ด๋ฉฐ, ์—ฐ๋‘์ƒ‰ ๊ทธ๋ž˜ํ”„๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ „์†กํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค.

3.4 MQ๋ณ„ Consumer ์„ฑ๋Šฅ

Kafka: A distributed messaging system for log processing

  • Kafka์˜ ๊ฒฝ์šฐ 10๋งŒ TPS ์ด์ƒ์˜ ์„ฑ๋Šฅ์„ RabbitMQ๋Š” 2๋งŒ TPS ์ •๋„์˜ ์„ฑ๋Šฅ์„ ๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋‚˜์™€์žˆ๋Š”๋ฐ, ์—ฌ๊ธฐ์„œ ์ƒ๊ฐํ•ด๋ณผ ๋ฌธ์ œ๊ฐ€ ํ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์†”๋ฃจ์…˜์ด๋ผ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์‘๋‹ต์‹œ๊ฐ„์—๋Š” ๊ทธ๋ ‡๊ฒŒ ๋ฏผ๊ฐํ•˜์ง€ ์•Š๋Š” ์ ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ทธ๋ฆฌ๊ณ  ์ผ๋ฐ˜์ ์ธ ์›น ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด 1500~2000 TPS (์—”ํ„ฐํ”„๋ผ์ด์ฆˆ ์‹œ์Šคํ…œ์˜ ๊ฒฝ์šฐ) ๋‚ด์™ธ์ธ ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ด๊ธฐ ๋•Œ๋ฌธ์—, RabbitMQ์˜ 2๋งŒ TPS์˜ ์„ฑ๋Šฅ์€ ์ถฉ๋ถ„ํ•˜๋‹ค๊ณ  ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

3.5 MQ๋ณ„ ๊ด€์‹ฌ๋„ ๋ณ€ํ™”

https://trends.google.com/trends/explore?date=today%205-y&q=kafka,ActiveMQ,RabbitMQ,ZeroMQ

๋งˆ๋ฌด๋ฆฌ

  • ๊ฒฐ๊ตญ์€ ์„œ๋ฒ„๊ฐ€ ์‚ฌ์šฉ์ž์—๊ฒŒ ์–ผ๋งˆ๋‚˜ ๋น ๋ฅด๊ณ  ์•ˆ์ •์ ์œผ๋กœ ์ •๋ณด๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋Š” ์ง€์— ์ดˆ์ ์„ ๋งž์ถ˜ ๊ธฐ์ˆ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“  ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋ฉ”์‹œ์ง€ ํ๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ, ์„œ๋ฒ„์˜ ๋’ท๋‹จ์—์„œ ์‹คํ–‰๋˜๋Š” ์ผ๋ถ€ ์ž‘์—…์„ ๋ฉ”์‹œ์ง€ ํ์— ๋งก๊น€์œผ๋กœ์จ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๊ฒƒ์— ๋Œ€ํ•ด ์ƒ๊ฐํ•ด๋ณด๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.
  • ๋ธ”๋กœ๊ทธ ์ €์ž๋Š” ๋Œ€์šฉ๋Ÿ‰ CEP ์—”์ง„์—์„œ๋Š” Kafka๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๊ณ  ๊ทธ์ด์™ธ์— ์ž์ž˜ํ•œ ๋ฉ”์‹œ์ง€ํ๋Š” ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ActiveMQ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ถŒ์žฅํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • Spring์—์„œ๋Š” Srping AMQP๊ฐ€ ์„œ๋ธŒ ํ”„๋กœ์ ํŠธ๋กœ ์กด์žฌํ•˜๋ฉฐ ๊ธฐ๋ณธ ์˜ˆ์ œ๋Š” RabbitMQ๋กœ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ตœ๊ทผ์— AMQP๋Š” ์•„๋‹ˆ์ง€๋งŒ ๋น ๋ฅธ ์†๋„๋ฅผ ๋‚ด์„ธ์šฐ๋ฉฐ ์—„์ฒญ๋‚œ ์ธ๊ธฐ๋ชฐ์ด๋ฅผ ํ•˜๋Š” Kafka๊ฐ€ ์žˆ๋Š”๋ฐ Spring ์„œ๋ธŒ ํ”„๋กœ์ ํŠธ Spring Kafka๋„ ์žˆ์–ด์„œ ๋น ๋ฅธ ๋ฉ”์‹œ์ง• ํ ์‚ฌ์šฉ์‹œ์— ํ™œ์šฉ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.
  • Kafka์˜ ์ธ๊ธฐ๋ชฐ์ด ์ค‘ ํ•˜๋‚˜๋Š” ๋ฉ”์‹œ์ง• ์ „์†ก์‹œ์— ํ—ค๋”์˜ ํฌ๊ธฐ๊ฐ€ ์ž‘์•„ ์˜ค๋ฒ„ํ—ค๋“œ๋ฅผ ๊ฐ์†Œ์‹œํ‚ค๋ฉฐ ๊ธฐ์กด ๋ฉ”์‹œ์ง• ์‹œ์Šคํ…œ์—์„œ๋Š” broker๊ฐ€ consumer์—๊ฒŒ ๋ฉ”์‹œ์ง€๋ฅผ pushํ•ด์ฃผ๋Š” ๋ฐฉ์‹์ธ๋ฐ ๋ฐ˜ํ•ด, Kafka๋Š” consumer๊ฐ€ broker๋กœ๋ถ€ํ„ฐ ์ง์ ‘ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ง€๊ณ  ๊ฐ€๋Š” pull ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ consumer๋Š” ์ž์‹ ์˜ ์ฒ˜๋ฆฌ๋Šฅ๋ ฅ๋งŒํผ์˜ ๋ฉ”์‹œ์ง€๋งŒ broker๋กœ ๋ถ€ํ„ฐ ๊ฐ€์ ธ์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์ตœ์ ์˜ ์„ฑ๋Šฅ์„ ๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ฐธ๊ณ 

๋ฐ˜์‘ํ˜•