Message Queue

Request, Response vs Messaging

λŒ€λΆ€λΆ„ μ›Ή μ„œλ²„λŠ” HTTP Req/Res 방식을 많이 μ‚¬μš©ν•˜λŠ”λ°, λŒ€ν‘œμ μœΌλ‘œ REST APIκ°€ μ‘΄μž¬ν•œλ‹€.

Req/Res 방식은 HTTP ν”„ν† μ½œμ„ 기반으둜 κ΅¬ν˜„λ˜κΈ° λ•Œλ¬Έμ— Stateless νŠΉμ„±μ„ κ°€μ§€κ³ μžˆλ‹€.

ν•˜μ§€λ§Œ ν΄λΌμ΄μ–ΈνŠΈ-μ„œλ²„ 사이에 κ°•ν•œ β€œμ˜μ‘΄μ„±β€μ΄ μ‘΄μž¬ν•˜λ©°, μ„œλ²„κ°€ 싀행쀑이어야 데이터 μ†‘μˆ˜μ‹ μ΄ κ°€λŠ₯ν•˜λ‹€.

또, ν΄λΌμ΄μ–ΈνŠΈλŠ” μ„œλ²„μ—μ„œ 응닡이 올 λ•ŒκΉŒμ§€ λŒ€κΈ° ν•˜κ³ μžˆλ‹€. 즉, 동기식 톡신 방법이닀.

λ°˜λŒ€λ‘œ HTTP 방식보닀 λŠμŠ¨ν•˜κ²Œ κ²°ν•©ν•˜μ—¬ 비동기 μ‹œμŠ€ν…œ 톡합 방식인 λ©”μ‹œμ§•μ΄ μžˆλ‹€.

  • λ©”μ‹œμ§•μ€ 쀑간 μ‹œμŠ€ν…œμ„ ν†΅ν•΄μ„œ λ°œμ‹ μž(publisher)μ—μ„œ μˆ˜μ‹ μž(subscriber) 둜 데이터λ₯Ό 전솑

그림처럼 쀑간에 λ©”μ‹œμ§• μ‹œμŠ€ν…œμ„ 톡해 전솑을 ν•˜κΈ° λ•Œλ¬Έμ— μ±„λ„λ§Œ μ—°κ²°λ˜μ–΄ 있으면 μ„œλ²„λŠ” 데이터λ₯Ό λ°›λŠ” μˆ˜μ‹ μž(ν΄λΌμ΄μ–ΈνŠΈ)κ°€ λˆ„κ΅°μ§€ μ•Œ ν•„μš”κ°€ μ—†λ‹€.

μ΄λŸ¬ν•œ λ©”μ‹œμ§• μ‹œμŠ€ν…œμ—λŠ” λŒ€ν‘œμ μœΌλ‘œ Rabbit MQ, Active MQ, Kafka 등이 μžˆλ‹€.

λ©”μ‹œμ§€ ν”Œλž«νΌμ€ λ©”μ‹œμ§€ 브둜컀, 이벀트 브둜컀둜 λ‚˜λˆŒ 수 μžˆλ‹€.

λ©”μ‹œμ§€ 브둜컀

  • λ©”μ‹œμ§€λ₯Ό λ°›μ•„μ„œ μ²˜λ¦¬ν•˜κ³  λ‚˜λ©΄ μ¦‰μ‹œ, 짧은 μ‹œκ°„λ‚΄μ— μ‚­μ œλ˜λŠ” ꡬ쑰이닀. 즉, λ©”μ‹œμ§€λ₯Ό 보내고 처리 ν›„ μ‚­μ œν•œλ‹€.

  • redis, Rabbit MQκ°€ ν•΄λ‹Ήν•œλ‹€.

이벀트 브둜컀

  • 이벀트, λ©”μ‹œμ§€λΌκ³  λΆ€λ₯΄λŠ” λ ˆμ½”λ“œλ₯Ό 인덱슀λ₯Ό 톡해 κ°œλ³„ μ—‘μ„ΈμŠ€λ₯Ό κ΄€λ¦¬ν•œλ‹€. (??)

  • 업무상 ν•„μš”ν•œ μ‹œκ°„λ™μ•ˆ 이벀트λ₯Ό 보쑴할 수 μžˆλ‹€. 데이터λ₯Ό μ²˜λ¦¬ν•˜κ³  μ‚­μ œν•˜μ§€ μ•ŠλŠ”λ‹€.

  • Kafkaκ°€ ν•΄λ‹Ήν•œλ‹€.

Message Queuing (λ©”μ‹œμ§€ νμž‰) vs pub/sub

νμž‰ μ‹œμŠ€ν…œκ³Ό pub/sub μ‹œμŠ€ν…œμ€ λΆ„μ‚° μ‹œμŠ€ν…œμ—μ„œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” 두 κ°€μ§€ μ£Όμš” νŒ¨ν„΄μ΄λ‹€.

β€œλ©”μ‹œμ§•β€ μ‹œμŠ€ν…œμ„ κ΅¬ν˜„ν•˜λŠ” 방법은 λŒ€ν‘œμ μœΌλ‘œ 두 κ°€μ§€κ°€ μ‘΄μž¬ν•œλ‹€.

  1. λ©”μ‹œμ§€ νμž‰ (Point-to-Point Channel)

λ©”μ‹œμ§€ νμž‰μ€ Point-to-Point Channel λ°©μ‹μœΌλ‘œ, ν•œ μˆ˜μ‹ μž(Consumer)만 λ©”μ‹œμ§€λ₯Ό μˆ˜μ‹ ν•  수 μžˆλ‹€.

μ„œλ²„μ—μ„œ 큐에 λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λ©΄ ν΄λΌμ΄μ–ΈνŠΈλŠ” νμ—μ„œ ν•˜λ‚˜μ”© κΊΌλ‚΄μ„œ μˆ˜μ‹ ν•œλ‹€.

즉, 1:1 ν†΅μ‹ μœΌλ‘œ 이루어진닀.

  • μ†ŒλΉ„μžκ°€ 처리λ₯Ό μ™„λ£Œν•˜κ³  λͺ…μ‹œμ μœΌλ‘œ μ‚­μ œν•  λ•ŒκΉŒμ§€ 큐에 λ‚¨μ•„μžˆλŠ”λ‹€. μ΄λŠ” λ©”μ‹œμ§€κ°€ μ†μ‹€λ˜μ§€ μ•Šλ„λ‘ 보μž₯ν•œλ‹€.

  1. Publish/Subscribe

νμž‰κ³Ό λ°˜λŒ€λ‘œ pub/sub은 μˆ˜μ‹ μž(ν΄λΌμ΄μ–ΈνŠΈ) λͺ¨λ‘μ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•œλ‹€.

publisher(λ°œν–‰μž)κ°€ νŠΉμ • Topic에 λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λ©΄, ν•΄λ‹Ή Topic을 κ΅¬λ…ν•œ subscriber(ν΄λΌμ΄μ–ΈνŠΈ) λͺ¨λ‘μ—κ²Œ λ©”μ‹œμ§€κ°€ μ „μ†‘λœλ‹€.

  • λΈŒλ‘œλ“œμΊμŠ€νŒ…μ— μ ν•©ν•œ 방식이닀.

Last updated