๋ชฉ์ฐจ
- ๋ฏธ๋ค์จ์ด๋?
- 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๊ฐ์ง๊ฐ ์กด์ฌํ๋ค๊ณ ํ ์ ์๋ค.
- ๋ฐ์ดํฐ์ ํด๋นํ๋ ๋ฉ์์ง
- ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ Sender, ๋ฐ์ ์
- ๋ฉ์์ง๋ฅผ ๋ฐ๋ Receiver, ์์ ์
- ๋ฉ์์ง๋ฅผ ๊ด๋ฆฌํ๋ ๋ฉ์์ง Provider ๋ฉ์์ง ์ ๊ณต์
Sender์ Receiver๋ ๊ฐ๊ฐ ๋ฉ์์ง๋ฅผ ์ก, ์์ ํ๋ ์ฃผ์ฒด๊ฐ ๋๋ค.
์ด๋ค์ ์ง์ ์ ์ผ๋ก Provider์ธ MOM์ ์ฐ๊ฒฐ๋์ด ๊ฐ๊ฐ์ ํ์ํ ์์ ์ ์ํํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ก์ ์ฃผ์ฒด์๊ฒ ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ Provider๊ฐ ์ง์ ํ destination ์ ์ ์ฅํด์ ์์ฒญ์ด ๋ฐ์ํ ๋๊น์ง ๋ณด๊ดํ๊ฒ ๋๋ค.
MOM vs without MOM
๋ง์ฝ MOM์ด ์๋ค๋ฉด ์ด๋ป๊ฒ ๋ ๊น?
์ผ๋ฐ์ ์ธ ์ํฉ์์ MOM์ ํ์์ฑ์ ํฌ๊ฒ ๋๋๋ฌ์ง์ง ์์ง๋ง ๋ถ์ฐ ํ๊ฒฝ์์ ๊ทธ ์กด์ฌ๊ฐ์ ํ์ธํ ์ ์๋ค.
๋ณดํต ๋ง์ดํฌ๋ก์๋น์ค์ ์ธ์คํด์ค๊ฐ ํ์ฅ์ด ๋๋ฉด ๋ถ์ฐ ์์คํ ๋ฐ ๋ฐ์ดํฐ์ ๋๊ธฐํ์ ๋ํ ์ด์๊ฐ ๋ฐ์ํ๊ฒ ๋๊ณ ํด๋น ์ด์๊ฐ ๋ฐ์ํ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์์ฒญํ์์ ๋, ๋์ผํ ์ฐ์ฐ์ ์ํํ๋๋ผ๋ ๋ฌด๊ฒฐํ์ง ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ์ปค์ง๋ค.
์์ธํ ์ด์ผ๊ธฐ๋ MSA์ ํต์ฌ ๊ตฌ์ฑ ์์ - Message Queueing์์ ํ์ธํ ์ ์๋ค.
MOM์ด ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์
MOM์์ ๋ฉ์์ง๋ฅผ ์ ๋ฌํ๋ ๋ฐฉ์์๋ ํฌ๊ฒ 2 ๊ฐ์ง ๋ฐฉ์์ด ์กด์ฌํ๋ค.
- Point To Point Messaging
- 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
'๐ฌweb application > - System architecture' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
cache 101 - Spring Cache ์ ๋ํ์ฌ (feat. ์บ์๋ก todo list ๋ฅผ ๋ง๋ค์ด๋ณด์) (1) | 2024.03.13 |
---|---|
cache 101 - ์บ์์ ๋ํ ๊ฑฐ์ ๋ชจ๋ ๊ฒ (2) | 2024.02.01 |
Event-Driven-Architecture ์ ๋ํ Overview ์ ์ฌ๋ฌ ๊ณ ๋ ค์ฌํญ๋ค (0) | 2022.08.22 |
CQRS ํจํด์ ๋ํ ์คํด ํ๊ธฐ (5) | 2022.06.11 |
๋๊ธ