๋ฉ์์ง ํ(Message Queue ์ดํ MQ)๋ ํ๋ก์ธ์ค(ํ๋ก๊ทธ๋จ) ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ๊ตํํ ๋ ์ฌ์ฉํ๋ ํต์ ๋ฐฉ๋ฒ ์ค์ ํ๋๋ก ๋ ํฐ ๊ฐ๋ ์ผ๋ก๋ MOM(Message Oriented Middleware : ๋ฉ์์ง ์งํฅ ๋ฏธ๋ค์จ์ด ์ดํ MOM)๋ฅผ ์๋ฏธํฉ๋๋ค. MOM์ด๋ ๋น๋๊ธฐ ๋ฉ์์ง๋ฅผ ์ฌ์ฉํ๋ ํ๋ก๊ทธ๋จ ๊ฐ์ ๋ฐ์ดํฐ ์ก์์ ์ ์๋ฏธํ๋๋ฐ MOM์ ๊ตฌํํ ์์คํ ์ MQ๋ผ๊ณ ํฉ๋๋ค. MQ๋ ์์ ์ ๋ฆ์ถ ์ ์๋ ์ ์ฐ์ฑ์ ์ ๊ณตํฉ๋๋ค.
๋ฉ์์ง๋ฅผ ๊ตํํ ๋ AMQP(Advanced Message Queuing Protocol ์ดํ AMQP)์ ์ด์ฉํฉ๋๋ค. AMQP๋ ISO ์์ฉ ๊ณ์ธต์ MOM ํ์ค์ผ๋ก JMS(Java Message Service)์ ๋น๊ต๋๋๋ฐ JMS๋ MOM๋ฅผ ์๋ฐ์์ ์ง์ํ๋ ํ์ค API์ ๋๋ค. JMS๋ ๋ค๋ฅธ Java Application ๊ฐ์ ํต์ ์ ๊ฐ๋ฅํ์ง๋ง ๋ค๋ฅธ MOM(AMQP, SMTP ๋ฑ)๋ผ๋ฆฌ๋ ํต์ ํ ์ ์์ต๋๋ค. ๊ทธ์ ๋ฐํด AMQP๋ protocol๋ง ์ผ์นํ๋ค๋ฉด ๋ค๋ฅธ AMQP๋ฅผ ์ฌ์ฉํ Application๊ณผ๋ ํต์ ์ด ๊ฐ๋ฅํฉ๋๋ค. AMQP๋ wire-protocol์ ์ ๊ณตํ๋๋ฐ ์ด๋ octet stream์ ์ด์ฉํด์ ๋ค๋ฅธ ๋คํธ์ํฌ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ ์ ์๋ ํฌ๋งท์ ๋๋ค.
๋ฉ์์ง ํ์ ์ฅ์
- ๋น๋๊ธฐ : Queue์ ๋ฃ๊ธฐ ๋๋ฌธ์ ๋์ค์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
- ๋น๋์กฐ : Application๊ณผ ๋ถ๋ฆฌํ ์ ์์ต๋๋ค.
- ํ๋ ฅ์ฑ : ์ผ๋ถ๊ฐ ์คํจ ์ ์ ์ฒด๋ ์ํฅ์ ๋ฐ์ง ์์ต๋๋ค
- ๊ณผ์ : ์คํจํ ๊ฒฝ์ฐ ์ฌ์คํ์ด ๊ฐ๋ฅํฉ๋๋ค
- ํ์ฅ์ฑ : ๋ค์์ ํ๋ก์ธ์ค๋ค์ด ํ์ ๋ฉ์์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค.
๋ฉ์์ง ํ ์ฌ์ฉ์ฒ
๋ฉ์์ง ํ๋ ๋ค์๊ณผ ๊ฐ์ด ๋ค์ํ ๊ณณ์ ์ฌ์ฉ์ด ๊ฐ๋ฅํฉ๋๋ค.
- ๋ค๋ฅธ ๊ณณ์ API๋ก๋ถํฐ ๋ฐ์ดํฐ ์ก์์
- ๋ค์ํ Application์์ ๋น๋๊ธฐ ํต์ ๊ฐ๋ฅ
- ์ด๋ฉ์ผ ๋ฐ์ก ๋ฐ ๋ฌธ์ ์ ๋ก๋ ๊ฐ๋ฅ
- ๋ง์ ์์ ํ๋ก์ธ์ค ์ฒ๋ฆฌ
๋ฉ์์ง ํ ์ข ๋ฅ
๋ํ์ ์ธ ๋ฉ์์ง ํ ์ข ๋ฅ๋ 3๊ฐ์ง ์ ๋๋ค.
- Kafka
- RabbitMQ
- ActiveMQ
๊ณตํต์ ์ผ๋ก 3๊ฐ์ง ๋ชจ๋ ๋น๋๊ธฐ ํต์ ์ ์ ๊ณตํ๊ณ ๋ณด๋ธ ์ฌ๋๊ณผ ๋ฐ๋ ์ฌ๋์ ๋ถ๋ฆฌํฉ๋๋ค. ํ์ง๋ง ์ ๋ฌด์ ๋ฐ๋ผ์ ๋ค๋ฅธ ๋ชฉ์ ์ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ฑ๊ฒฉ์ Kafka(Apache)์ RabbitMQ, ActiveMQ(Apache)๋ก ๋๋ ์ ์๋๋ฐ Kafka๋ ์ฒ๋ฆฌ๋์ด ๋ง์ ๋ถ์ฐ ๋ฉ์์ง ์์คํ ์ ์ ํฉํ๊ณ RabbitMQ, ActiveMQ๋ ์ ๋ขฐ์ฑ ์๋ ๋ฉ์์ง ๋ธ๋ก์ปค๊ฐ ํ์ํ ๊ฒฝ์ฐ ์ ํฉํฉ๋๋ค. ์ฌ๊ธฐ์ ์ ๋ขฐ์ฑ์ Kafka์ ๋นํด ๋์ ๊ฒ์ด์ง Kafka๊ฐ ์ ๋ขฐ์ฑ์ด ์๋ค๋ ๊ฒ์ ์๋๋๋ค.
RabbitMQ
RabbitMQ๋ AMQT ํ๋กํ ์ฝ์ ๊ตฌํํด ๋์ ํ๋ก๊ทธ๋จ์ผ๋ก์จ ๋น ๋ฅด๊ณ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ผ๋ฉฐ ์ง๊ด์ ์ ๋๋ค.
์ฅ์
- ์ ๋ขฐ์ฑ, ์์ ์ฑ
- ์ ์ฐํ ๋ผ์ฐํ (Message Queue๊ฐ ๋์ฐฉํ๊ธฐ ์ ์ ๋ผ์ฐํ ๋๋ฉฐ ํ๋ฌ๊ทธ์ธ์ ํตํด ๋ ๋ณต์กํ ๋ผ์ฐํ ๋ ๊ฐ๋ฅ)
- ํด๋ฌ์คํฐ๋ง (๋ก์ปฌ๋คํธ์ํฌ์ ์๋ ์ฌ๋ฌ RabbitMQ ์๋ฒ๋ฅผ ๋ ผ๋ฆฌ์ ์ผ๋ก ํด๋ฌ์คํฐ๋งํ ์ ์๊ณ ๋ ผ๋ฆฌ์ ์ธ ๋ธ๋ก์ปค๋ ๊ฐ๋ฅ)
- ๊ด๋ฆฌ UI์ ํธ๋ฆฌ์ฑ (๊ด๋ฆฌ์ ํ์ด์ง ๋ฐ ๋ชจ๋ํฐ๋ง ํ์ด์ง๊ฐ ์ ๊ณต๋จ)
- ๊ฑฐ์ ๋ชจ๋ ์ธ์ด ๋ฐ ์ด์์ฒด์ ๋ฅผ ์ง์
- ์คํ์์ค๋ก ์์ ์ ์ง์ ๊ฐ๋ฅ
Kafka
Kafka๋ ํ์ฅ์ฑ๊ณผ ๊ณ ์ฑ๋ฅ ๋ฐ ๋์ ์ฒ๋ฆฌ๋์ ๋ด์ธ์ด ์ ํ์ด๋ผ๊ณ ๋ณด์๋ฉด ๋ฉ๋๋ค. ํนํ๋ ์์คํ ์ด๊ธฐ ๋๋ฌธ์ ๋ฒ์ฉ ๋ฉ์์ง ์์คํ ์์ ์ ๊ณตํ๋ ๋ค์ํ ๊ธฐ๋ฅ๋ค์ ์ ๊ณต๋์ง ์์ต๋๋ค. ๋ถ์ฐ ์์คํ ์ ๊ธฐ๋ณธ์ผ๋ก ์ค๊ณ๋์๊ธฐ ๋๋ฌธ์ ๊ธฐ์กด ๋ฉ์์ง ์์คํ ์ ๋นํด ๋ถ์ฐ ๋ฐ ๋ณต์ ๊ตฌ์ฑ์ ์์ฝ๊ฒํ ์ ์์ต๋๋ค.
์ฅ์
- ๋์ฉ๋ ์ค์๊ฐ ๋ก๊ทธ ์ฒ๋ฆฌ์ ํนํ๋์ด ์๋ค
- AMQP ํ๋กํ ์ฝ์ด๋ JSM API๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๋จ์ํ ๋ฉ์์ง ํค๋๋ฅผ ์ง๋ TCP ๊ธฐ๋ฐ ํ๋กํ ์ฝ ์ฌ์ฉํจ์ผ๋ก์จ ์ค๋ฒํค๋๊ฐ ๋น๊ต์ ์๋ค.
- ๋ ธ๋ ์ฅ์ ์ ๋ํ ๋์์ฑ์ ๊ฐ์ง๊ณ ์๋ค
- ํ๋ก๋์๋ ๊ฐ ๋ฉ์์ง๋ฅผ ๋ฐฐ์น๋ก ๋ธ๋ก์ปค์๊ฒ ์ ๋ฌํ์ฌ TCP/IP ๋ผ์ด๋ ํธ๋ฆฝ์ ์ค์๋ค
- ๋ฉ์์ง๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ํ์ผ ์์คํ ์ ์ ์ฅํ์ฌ ๋ณ๋์ ์ค์ ์ ํ์ง ์์๋ ์ค๋ฅ ๋ฐ์ ์ ์ค๋ฅ ์ง์ ๋ถํฐ ๋ณต๊ตฌ๊ฐ ๊ฐ๋ฅํ๋ค (๊ธฐ์กด ๋ฉ์์ง ์์คํ ์ ๋ฉ์์ง๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ)
- ๋ฉ์์ง๋ฅผ ํ์ผ์์คํ ์ ์ ์ฅํ๊ธฐ ๋๋ฌธ์ ๋ฉ์์ง๊ฐ ๋ง์ด ์์ฌ๋ ๊ธฐ์กด ๋ฉ์์ง ์์คํ ์ ๋นํด ์ฑ๋ฅ์ด ํฌ๊ฒ ๊ฐ์ํ์ง ์๋๋ค
- window ๋จ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฃ๊ณ ๊บผ๋ผ ์ ์๋ค
ActiveMQ
ActiveMQ๋ ์๋ฐ๋ก ๋ง๋ ์คํ์์ค ๋ฉ์์ง ๋ธ๋ก์ปค์ ๋๋ค. JMS 1.1์ ํตํด ์๋ฐ ๋ฟ๋ง ์๋๋ผ ๋ค๋ฅธ ์ธ์ด๋ฅผ ์ฌ์ฉํ๋ ํด๋ผ์ด์ธํธ๋ฅผ ์ง์ํฉ๋๋ค.
์ฅ์
- ๋ค์ํ ์ธ์ด์ ํ๋กํ ์ฝ ์ง์ (Java, C, C++, C#, Ruby, Perl, Python, PHPํด๋ผ์ด์ธํธ ์ง์)
- OpenWire๋ฅผ ํตํด ๊ณ ์ฑ๋ฅ์ Java, C, C++, C# ํด๋ผ์ด์ธํธ ์ง์
- Stomp๋ฅผ ํตํด C, Ruby, Perl, Python, PHP ํด๋ผ์ด์ธํธ๊ฐ ๋ค๋ฅธ ์ธ๊ธฐ์๋ ๋ฉ์์ง ๋ธ๋ก์ปค๋ค๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ActiveMQ์ ์ ๊ทผ ๊ฐ๋ฅ
- Message Groups, Virtual Destinations, Wildcards์ Composite Destination๋ฅผ ์ง์
- Spring ์ง์์ผ๋ก ActiveMQ๋ Spring Application์ ๋งค์ฐ ์ฝ๊ฒ ์๋ฒ ๋ฉ๋ ์ ์์ผ๋ฉฐ, Spring์ XML ์ค์ ๋ฉ์ปค๋์ฆ์ ์ํด ์ฝ๊ฒ ์ค์ ๊ฐ๋ฅ
- Geronimo, JBoss 4, GlassFish, WebLogic๊ณผ ๊ฐ์ ์ธ๊ธฐ์๋ J2EE ์๋ฒ๋ค๊ณผ ํจ๊ป ํ ์คํธ๋จ
- ๊ณ ์ฑ๋ฅ์ ์ ๋์ ์ฌ์ฉํ ๋์ JDBC๋ฅผ ์ฌ์ฉํ์ฌ ๋งค์ฐ ๋น ๋ฅธ Persistence๋ฅผ ์ง์
- REST API๋ฅผ ํตํด ์น๊ธฐ๋ฐ ๋ฉ์์ง API๋ฅผ ์ง์
- ์น ๋ธ๋ผ์ฐ์ ๊ฐ ๋ฉ์์ง ๋๊ตฌ๊ฐ ๋ ์ ์๋๋ก, Ajax๋ฅผ ํตํด ์์ํ DHTML์ ์ฌ์ฉํ ์น ์คํธ๋ฆฌ๋ฐ ์ง์
์ด๋ ๊ฒ ํด์ ๋ฉ์์ง ํ์ ๋ํ ๊ธฐ๋ณธ์ ์ธ ๊ฐ๋ ๊ณผ ๋ํ์ ์ผ๋ก ๋ช ๊ฐ์ง ์ข ๋ฅ๋ฅผ ์ ๋ฆฌํด๋ณด์์ต๋๋ค.
* ๋ผ์ด๋ ํธ๋ฆฝ(Round-trip) : ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ๋ฐ์ดํฐ ์๋ณต ๊ณผ์ ์ ์๋ฏธํ๋ค. ๋ผ์ด๋ ํธ๋ฆฝ์ด ๋น๋ฒํ๋ค๋ ๊ฒ์ ํด๋ผ์ด์ธํธ์ ์๋ฒ ๊ฐ์ ์์ฒญ๊ณผ ์๋ต์ด ๋น๋ฒํ๋ค๋ ์ด์ผ๊ธฐ์ด๊ณ , ๊ฒฐ๊ตญ ์๋ฒ ์ธก์ ์ฑ๋ฅ์ ๊ทธ๋ฆฌ ์ข์ง ์์ ์ํฅ์ ๋ฏธ์น๋ค. ๋ฐ๋ผ์ ๋ผ์ด๋ ํธ๋ฆฝ์ด ์ ๊ฒ ์ผ์ด๋๋๋ก ์ ์๋๋ ๊ฒ์ด ๋ฐ๋์งํ๋ค.
์ด ๊ธ์ ์๋ ์ฌ์ดํธ๋ฅผ ์ฐธ๊ณ ํ์ฌ ์์ฑ๋์์ต๋๋ค.