λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
πŸ”¬μ•„ν‚€ν…μ²˜/- Enterprise Integration

[Event-Driven-Architecture] Message Oriented Middlewareκ³Ό Message Broker의 차이 및 원리

by Wonit 2021. 5. 19.

λͺ©μ°¨

  • λ―Έλ“€μ›¨μ–΄λž€?
  • MOM μ΄λž€?
    • MOM κ΅¬μ„±μš”μ†Œ
    • MOM vs without MOM
    • Messaging 의 2가지 방식
      • PTP Messaging
      • Pub/Sub Messaging
  • Message Broker
    • λŒ€ν‘œμ μΈ MOM μ†”λ£¨μ…˜

μ˜€λŠ˜μ€ μš”μ¦˜ λ§Žμ€ λΆ„μ•Όμ—μ„œ μ±„νƒλ˜μ–΄ μ‚¬μš©λ˜κ³  μžˆλŠ” Message Oriented Middleware 에 λŒ€ν•΄μ„œ μ•Œμ•„λ³΄λ € ν•œλ‹€.

 

Message Oriented Middleware, MOM μ΄λž€ ν•˜λ‚˜μ˜ μ†Œν”„νŠΈμ›¨μ–΄λ‚˜ μ†”λ£¨μ…˜ λ³΄λ‹€λŠ” 더 μƒμœ„ κ°œλ…μœΌλ‘œ μ•„ν‚€ν…μ²˜ νŒ¨ν„΄μ΄λ‚˜ ν”„λ‘œκ·Έλž˜λ° 기법에 ν•΄λ‹Ήν•œλ‹€κ³  μƒκ°ν•œλ‹€.

 

λ¬Όλ‘  MOM을 μœ„ν‚€ν”Όλ””μ•„μ—μ„œλŠ” μ‘μš© μ†Œν”„νŠΈμ›¨μ–΄ κ°„μ˜ 데이터 톡신을 μœ„ν•œ μ†Œν”„νŠΈμ›¨μ–΄λΌκ³  λΆ€λ₯΄μ§€λ§Œ μš°λ¦¬λŠ” 쑰금 더 큰 κ°œλ…μ—μ„œ μ΄ν•΄ν•΄λ³΄μž.

 

이런 MOM 을 μ΄ν•΄ν•˜κΈ° μœ„ν•΄μ„œλŠ” μš°μ„  Middleware에 λŒ€ν•œ 이해가 μ„ ν–‰λ˜μ–΄μ•Ό ν•œλ‹€.

 

κ°„λ‹¨ν•˜κ²Œ 미듀웨어가 무엇인지 μ•Œμ•„λ³΄λ„λ‘ ν•˜μž.

Middleware, 미듀웨어 λž€?

λ―Έλ“€μ›¨μ–΄λŠ” 단어 뜻 κ·ΈλŒ€λ‘œ 쀑간에 μ‘΄μž¬ν•˜λŠ” μ œν’ˆμ„ μ˜λ―Έν•œλ‹€.

 

λ―Έλ“€μ›¨μ–΄λŠ” 처음 λ“€μ–΄λ³΄μ•˜μ„ μˆ˜λ„ 있고 이미 μ΅μˆ™ν•  μˆ˜λ„ μžˆμ§€λ§Œ μš°λ¦¬λŠ” 이미 미듀웨어λ₯Ό μ‚¬μš©ν•˜κ³  μžˆμ„ μˆ˜λ„ μžˆλ‹€.

 

λ°±μ—”λ“œ κ°œλ°œμ„ ν•΄λ³΄μ•˜λ‹€λ©΄ λ°μ΄ν„°λ² μ΄μŠ€λ₯Ό μ‚¬μš©ν•΄ λ°μ΄ν„°μ˜ μ˜μ†μ„±μ„ κ΄€λ¦¬ν–ˆμ„ 것이닀.

 

이 λ°μ΄ν„°λ² μ΄μŠ€μ˜ ODBC, JDBC λ“±λ“± 이 λ°”λ‘œ λ―Έλ“€μ›¨μ–΄μ˜ ν•œ μ’…λ₯˜λΌκ³  λ³Ό 수 μžˆλ‹€.

 

λ°μ΄ν„°λ² μ΄μŠ€λŠ” λ°μ΄ν„°λ² μ΄μŠ€ λ²€λ”μ—μ„œ μ œκ³΅ν•˜λŠ” ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ›κ²©μœΌλ‘œ DB와 μ—°κ²°ν•˜κΈ° μœ„ν•œ 미듀웨어라고 ν•˜λŠ”λ°, μš°λ¦¬κ°€ μ•Œκ³  μžˆλŠ” κ°€μž₯ 유λͺ…ν•œ λ―Έλ“€μ›¨μ–΄λŠ” μ•žμ—μ„œ μ΄μ•ΌκΈ°ν–ˆλ˜ 것 처럼 JDBCκ°€ μžˆλ‹€.

 

Java둜 예λ₯Ό λ“€μ–΄ 보자.

 

μš°λ¦¬λŠ” JDBC ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ©΄μ„œ ν˜Ήμ€ JPA ν”„λ‘œκ·Έλž˜λ°μ„ ν•˜λ©΄μ„œ SQL을 직접 ν˜Ήμ€ κ°„μ ‘μ μœΌλ‘œ (객체 νƒ€μž…μœΌλ‘œ) μ§œλ”λΌλ„ JDBC Template 이 μ•Œμ•„μ„œ DB에 맞게 λ³€ν™˜μ„ μ‹œμΌœμ£ΌλŠ”λ°, 이 λ•Œ μ‚¬μš©λ˜λŠ” 것이 λ°”λ‘œ 미듀웨어인 JDBC 이닀.

 

 

μš°λ¦¬λŠ” μ‹€μ œ SQL 에 κ΄€λ ¨λœ μ„ΈνŒ…μ„ 직접 ν•˜μ§€ μ•Šλ”λΌλ„ μ–΄λŠμ •λ„ 미듀웨어가 이λ₯Ό ν•΄κ²°ν•΄μ£Όμ–΄ νŽΈλ¦¬ν•˜κ²Œ μ‚¬μš©ν•  수 있게 λ˜λŠ” 것이닀.

일단 이 미듀웨어에 λŒ€ν•΄μ„œ λ¨Όμ € 우리끼리 μ •μ˜λ₯Ό ν•˜κ³  λ„˜μ–΄κ°€μž

 

λ―Έλ“€μ›¨μ–΄λŠ” μ†Œν”„νŠΈμ›¨μ–΄μ™€ μ†Œν”„νŠΈμ›¨μ–΄ μ‚¬μ΄μ˜ 쀑간에 μœ„μΉ˜ν•΄μ„œ 이 λ‘˜ μ†Œν”„νŠΈμ›¨μ–΄λ₯Ό μ‰½κ²Œ ν†΅ν•©ν•˜κΈ° μœ„ν•΄ μ‘°μ •κ³Ό μ€‘κ°œλ₯Ό ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄λ‹€!

Message Oriented Middleware, MOM μ΄λž€?

 

λ©”μ‹œμ§€ 기반 미듀웨어, Message Oriented MiddlewareλŠ” 미듀웨어 μ’…λ₯˜ 쀑 ν•˜λ‚˜λ‘œ 비동기 λ©”μ‹œμ§€ 전달에 κΈ°μ΄ˆν•œ 미듀웨어이닀.

 

MOM은 λŒ€λΆ€λΆ„ Message Queue λ₯Ό 기반으둜 λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λ©° Microservice와 같은 λΆ„μ‚° ν™˜κ²½μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ£Όκ³ λ°›μœΌλ©΄μ„œ 데이터λ₯Ό κ΅ν™˜ν•  수 μžˆλ„λ‘ ν•΄μ€€λ‹€.

 

λͺ¨λ“  MOM이 Message Queue λ₯Ό 기반으둜 λ™μž‘ν•˜λŠ” 것은 μ•„λ‹ˆλ‹€. μš°λ¦¬κ°€ κ°€μž₯ 많이 μ‚¬μš©ν•˜λŠ” MOM μ†”λ£¨μ…˜μΈ RabbitMQλ‚˜ Kafkaκ°€ Message queueλ₯Ό μ‚¬μš©ν•˜μ§€ λ‹€λ₯Έ MOM μ—μ„œλŠ” λΈŒλ‘œλ“œμΊμŠ€νŠΈ ν˜•μ‹μ΄λ‚˜ λ©€ν‹° 캐슀트 ν˜•μ‹μ˜ λ©”μ‹œμ§€ μ‹œμŠ€ν…œλ„ μžˆλ‹€.

MOM ꡬ성 μš”μ†Œ

MOM의 ꡬ성 μš”μ†ŒλŠ” 총 4가지가 μ‘΄μž¬ν•œλ‹€κ³  ν•  수 μžˆλ‹€.

 

  1. 데이터에 ν•΄λ‹Ήν•˜λŠ” λ©”μ‹œμ§€
  2. λ©”μ‹œμ§€λ₯Ό λ³΄λ‚΄λŠ” Sender, λ°œμ‹ μž
  3. λ©”μ‹œμ§€λ₯Ό λ°›λŠ” Receiver, μˆ˜μ‹ μž
  4. λ©”μ‹œμ§€λ₯Ό κ΄€λ¦¬ν•˜λŠ” λ©”μ‹œμ§€ Provider λ©”μ‹œμ§€ 제곡자

 

Sender와 ReceiverλŠ” 각각 λ©”μ‹œμ§€λ₯Ό 솑, μˆ˜μ‹ ν•˜λŠ” 주체가 λœλ‹€.

 

이듀은 μ§μ ‘μ μœΌλ‘œ Provider인 MOM에 μ—°κ²°λ˜μ–΄ 각각의 ν•„μš”ν•œ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

 

그리고 솑신 μ£Όμ²΄μ—κ²Œ 받은 데이터λ₯Ό Providerκ°€ μ§€μ •ν•œ destination 에 μ €μž₯ν•΄μ„œ μš”μ²­μ΄ λ°œμƒν•  λ•ŒκΉŒμ§€ λ³΄κ΄€ν•˜κ²Œ λœλ‹€.

MOM vs without MOM

λ§Œμ•½ MOM이 μ—†λ‹€λ©΄ μ–΄λ–»κ²Œ 될까?

 

일반적인 μƒν™©μ—μ„œ MOM의 ν•„μš”μ„±μ€ 크게 λ‘λ“œλŸ¬μ§€μ§€ μ•Šμ§€λ§Œ λΆ„μ‚° ν™˜κ²½μ—μ„œ κ·Έ μ‘΄μž¬κ°μ„ 확인할 수 μžˆλ‹€.

 

보톡 λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€μ˜ μΈμŠ€ν„΄μŠ€κ°€ ν™•μž₯이 되면 λΆ„μ‚° μ‹œμŠ€ν…œ 및 λ°μ΄ν„°μ˜ 동기화에 λŒ€ν•œ μ΄μŠˆκ°€ λ°œμƒν•˜κ²Œ 되고 ν•΄λ‹Ή μ΄μŠˆκ°€ λ°œμƒν•˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ 데이터λ₯Ό μš”μ²­ν•˜μ˜€μ„ λ•Œ, λ™μΌν•œ 연산을 μˆ˜ν–‰ν•˜λ”λΌλ„ λ¬΄κ²°ν•˜μ§€ μ•Šμ€ 데이터λ₯Ό 받을 κ°€λŠ₯성이 컀진닀.

 

μžμ„Έν•œ μ΄μ•ΌκΈ°λŠ” MSA의 핡심 ꡬ성 μš”μ†Œ - Message Queueingμ—μ„œ 확인할 수 μžˆλ‹€.

MOM이 λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” 방식

 

MOMμ—μ„œ λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜λŠ” λ°©μ‹μ—λŠ” 크게 2 가지 방식이 μ‘΄μž¬ν•œλ‹€.

  1. Point To Point Messaging
  2. Publish-Subscribe Messaging

Point To Point Messaging

지점 κ°„ λ©”μ‹œμ§• 이라고 ν•˜λŠ” Point-To-Point λ©”μ‹œμ§• λͺ¨λΈμ€ μœ„μ—μ„œ 봀던 그림을 κ·ΈλŒ€λ‘œ μ΄ν•΄ν•˜λ©΄ λœλ‹€.

 

 

λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜λŠ” μƒμ„±μž(sender)λŠ” λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜κ³  λ©”μ‹œμ§€ 큐둜 μ „μ†‘ν•œλ‹€.

 

λ©”μ‹œμ§€ νλŠ” λ©”μ‹œμ§€λ₯Ό μ €μž₯ν•˜κ³  μˆ˜μ‹ μž(receiver)κ°€ μ‚¬μš©ν•˜κΈ° μ „ κΉŒμ§€ 데이터λ₯Ό λ³΄κ΄€ν•˜μ—¬ μˆ˜μ‹ μžμ—κ²Œ λ©”μ‹œμ§€λ₯Ό μ „μ†‘ν•˜κ²Œ λœλ‹€.

Publish-Subscribe Messaging

 

κ²Œμ‹œ-ꡬ독 λ©”μ‹œμ§€λΌκ³  ν•˜λŠ” Pub/Sub Messaging λͺ¨λΈμ€ λ©”μ‹œμ§€λ₯Ό μƒμ‚°ν•˜λŠ” κ²Œμ‹œμž (publisher)와 λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„ν•˜λŠ” κ΅¬λ…μž (subscriber)라고 ν•˜λ©°, λ‘˜ κ°„μ˜ λ©”μ‹œμ§€ κ΅ν™˜μ„ μœ„ν•΄ ν† ν”½ (topic)을 μ΄μš©ν•˜κ²Œ λœλ‹€.

κ²Œμ‹œμžκ°€ 토픽에 λŒ€ν•œ λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜λ©΄ κ΅¬λ…μžλŠ” ꡬ독 쀑인 ν† ν”½μ—μ„œ λ©”μ‹œμ§€λ₯Ό μ†ŒλΉ„ν•  수 μžˆλ‹€.

 

λŒ€ν‘œμ μΈ 비동기 λ©”μ‹œμ§• λͺ¨λΈμ΄λ‹€.

 

지점 κ°„ λ©”μ‹œμ§•κ³Ό λŒ€λΉ„λ˜λŠ” κ°œλ…μ€ λ°”λ‘œ ꡬ독 쀑인 λͺ¨λ“  μˆ˜μ‹ μžκ°€ ν•΄λ‹Ή λ©”μ‹œμ§€λ₯Ό μ΄μš©ν•  μˆ˜μžˆλ‹€λŠ” 것이닀.

 

Message Broker λž€?

λ©”μ‹œμ§€ λΈŒλ‘œμ»€λŠ” MOMκ³Ό λŒ€μ‘°λ˜λŠ” κ°œλ…μ΄ μ•„λ‹ˆλΌ MOM 내에 μ‘΄μž¬ν•˜λŠ” Message Provider λ₯Ό μ˜λ―Έν•œλ‹€.

 

Message Providerκ°€ μ–΄λ–€ λ°©μ‹μœΌλ‘œ λ©”μ‹œμ§€λ₯Ό μ œκ³΅ν•˜λŠ”μ§€μ— λ”°λΌμ„œ Broker의 μŠ€νŽ™κ³Ό 방식이 달라지며 μ•žμ—μ„œ λ³Έ 2가지 λ©”μ‹œμ§€ 전달 방식이 λ°”λ‘œ Message Broker 에 λŒ€ν•œ 전달 방식이라고 ν•  수 μžˆλ‹€.

 

IBM μ—μ„œλŠ” Message Brokerλ₯Ό λ‹€μŒκ³Ό 같이 μ •μ˜ν•˜κ³  μžˆλ‹€.

 

Message brokers are an inter-application communication technology to help build a common integration mechanism to support cloud native, microservices-based, serverless and hybrid cloud architectures.

λ©”μ‹œμ§€ 브둜컀(Message Broker)λŠ” ν΄λΌμš°λ“œ λ„€μ΄ν‹°λΈŒ, λ§ˆμ΄ν¬λ‘œμ„œλΉ„μŠ€ 기반, μ„œλ²„λ¦¬μŠ€ 및 ν•˜μ΄λΈŒλ¦¬λ“œ ν΄λΌμš°λ“œ μ•„ν‚€ν…μ²˜λ₯Ό μ§€μ›ν•˜λŠ” 곡톡 톡합 λ©”μ»€λ‹ˆμ¦˜μ„ κ΅¬μΆ•ν•˜λŠ” 데 도움이 λ˜λŠ” μ• ν”Œλ¦¬μΌ€μ΄μ…˜ κ°„ 톡신 κΈ°μˆ μž…λ‹ˆλ‹€.

 

Message Broker λŠ” λ©”μ‹œμ§€λ₯Ό μƒμ„±ν•˜λŠ” μ†‘μ‹ μžμ™€ λ©”μ‹œμ§€λ₯Ό λ°›λŠ” μˆ˜μ‹ μžμ— μ˜ν•΄μ„œ λ™μž‘ν•˜κ²Œ 되며, μ†‘μ‹ μžκ°€ Message Queue에 데이터λ₯Ό μ°¨λ‘€λ‘œ λ„£μœΌλ©΄ μˆ˜μ‹ μžκ°€ ν•΄λ‹Ή Messageλ₯Ό μ°¨λ‘€λŒ€λ‘œ μ΄μš©ν•˜κ²Œ λ˜λŠ” Store-And-Forward 방식이닀.

 

λŒ€ν‘œμ μΈ Message Broker μ†”λ£¨μ…˜

μš°λ¦¬λŠ” 이 Message Brokerλ₯Ό μ΄μš©ν•΄μ„œ MOM을 κ΅¬μΆ•ν•˜κ²Œ 될 것인데, λŒ€ν‘œμ μœΌλ‘œλŠ” λ‹€μŒκ³Ό 같은 λ©”μ‹œμ§€ λΈŒλ‘œμ»€κ°€ μ‘΄μž¬ν•œλ‹€

  • AWS의 Simple Queue Servier, SQS
  • Apache의 Kafka
  • Mozila의 RabbitMQ

λŒ“κΈ€