์ด๋ฒ ํฌ์คํ ์ ๋ณธ๊ฒฉ์ ์ผ๋ก rabbitMq ํ๊ฒฝ์ค์ ๊ณผ ๊ตฌํํ ์ํคํ ์ฒ๋ฅผ ๋ฏธ๋ฆฌ ์ ์ํ๊ณ ์ ํ๋ค.
๋จผ์ ํด๋ผ์ด์ธํธ๋ react, angular ๊ฐ์ SPA๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ฉฐ, ์๋ฒ๋ springboot๋ก ๊ตฌํํ๋ค. ์ด ์ํคํ ์ฒ์์ rabbitMq๋ ๋ค์๊ณผ ๊ฐ์ด ํ์ฉํ๊ณ ์ ํ๋ค.
ํฐ ํ๋ฆ์ Springboot์์ Publish ๋ ๋ฉ์์ง๋ฅผ rabbitMq๋ก send ํ๊ณ , Consumer๋ rabbitMq๋ก๋ถํฐ ๋ฉ์์ง๋ฅผ ์ ๋ฌ๋ฐ์ ๋ผ์ด๋๋ก๋น ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌํ๊ฒ ๋๋ค. ์ด๋ rabbitMq์ TCP ํต์ ํ๋ ํ๋กํ ์ฝ์ AMQP์ STOMP๋ฅผ ํผ์ฉํด์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๊ทธ ์ด์ ๋ Springboot์์ rabbitmq์ ์ฐ๋ํ ๋ ์ง์๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ STOMP๊ฐ ์ง์๋์ง ์์ AMQP์ ํผ์ฉํ๊ฒ ๋์๋ค. ํน์ ์ง์๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋ค๋ฉด ๋๊ธ๋ก ๊ผญ ์๋ ค์ฃผ์ธ์๐ข(๋ฉฐ์น ์ ์ฝ์งํด๋ ์๋ค๋ ๊ฒฐ๋ก ์ด ๋์ด.)
๐ ๋ผ์ด๋ ๋ก๋น(Round Robin)
RabbitMQ์์ ๋ผ์ด๋ ๋ก๋น์ ์ฌ๋ฌ ์ปจ์๋จธ ์ค์์ ๋ฉ์์ง๋ฅผ ๊ท ๋ฑํ๊ฒ ๋ถ๋ฐฐํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ๋งํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ํ์ ์ฌ๋ฌ ๋ฉ์์ง๊ฐ ์๊ณ ๋ ๊ฐ์ ์ปจ์๋จธ๊ฐ ๋ฉ์์ง๋ฅผ ์ฒ๋ฆฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๋ฉด, ๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์์๋ ๋ฉ์์ง๋ฅผ ์์ฐจ์ ์ผ๋ก ์ปจ์๋จธ์๊ฒ ํ ๋นํฉ๋๋ค. ๋ฐ๋ผ์ ๋ ์ปจ์๋จธ ๋ชจ๋ ๋ฉ์์ง๋ฅผ ๊ณตํํ๊ฒ ์ฒ๋ฆฌํ๊ฒ ๋ฉ๋๋ค.
๋ผ์ด๋ ๋ก๋น ๋ฐฉ์์ ๊ธฐ๋ณธ์ ์ผ๋ก RabbitMQ์์ ์ฌ์ฉ๋๋ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ๋๋ค. ๋ฐ๋ผ์ ๋ณ๋์ ์ค์ ์ด๋ ์ฝ๋ ๋ณ๊ฒฝ ์์ด ์ฌ์ฉํ ์ ์์ต๋๋ค. ํ์ง๋ง ์ปจ์๋จธ์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋ฐ๋ผ ๋ฉ์์ง ์ฒ๋ฆฌ ์๋๊ฐ ์ฐจ์ด๊ฐ ์์ ๊ฒฝ์ฐ์๋ ํ ์ชฝ ์ปจ์๋จธ์๊ฒ ๋ฉ์์ง๊ฐ ๋ชฐ๋ฆฌ๋ ํ์์ด ๋ฐ์ํ ์ ์์ต๋๋ค. ์ด๋ฐ ๊ฒฝ์ฐ์๋ RabbitMQ์์ ์ ๊ณตํ๋ ๋ค๋ฅธ ๋ฐฉ์์ ๋ฉ์์ง ์ ๋ฌ ๋ฐฉ์์ ์ฌ์ฉํ๊ฑฐ๋, ์ปจ์๋จธ ์ธก์์ ์ฒ๋ฆฌ ๋ฅ๋ ฅ์ ๋์ด๋ ๋์์ ๊ณ ๋ คํด ๋ณผ ์ ์์ต๋๋ค.
RabbitMq ์ค์น
์ค์น๊ณผ์ ์์ Erlang๊ณผ RabbitMq ๊ทธ๋ฆฌ๊ณ Springboot์ ๋ฒ์ ๋๋ฌธ์ ๊ฝค ์ค๋์๊ฐ ์ฝ์ง์ ํ๋ค;;; ๋ฒ์ ์ด ๋ง์ง ์์ผ๋ฉด ์์ ๋์ํ์ง ์์ผ๋ ๋ฒ์ ์ ์ ์ํด์ ํ๊ฒฝ์ค์ ์ ํด์ผํ๋ค.
RabbitMQ๋ Erlang OTP ํ๋ซํผ ์์ ๊ตฌ์ถ๋์ด ์๊ธฐ ๋๋ฌธ์ RabbitMQ๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ๋จผ์ Erlang์ ์ค์นํด์ผ ํ๋ค. Springboot ๋ฒ์ ์ ๋ฐ๋ผ ํธํ๋๋ Erlang๊ณผ RabbitMQ ๋ฒ์ ์ด ๋ค๋ฅด๊ธฐ ๋๋ฌธ์ ๊ผญ ํ์ธ์ด ํ์ํ๋ค. ๋๋ Springboot 2.7.7 ๊ธฐ์ค์ผ๋ก ์์ฑ๋์๋ค. Erlang์ ํธํ๋๋ RabbitMQ ๋ฒ์ ์ RabbitMQ ํํ์ด์ง์์ ํ์ธ ๊ฐ๋ฅํ๋ค.
* RabbitMQ Erlang Version Requirements : https://www.rabbitmq.com/which-erlang.html
๐Erlang
Erlang์ Ericsson์์ ๊ฐ๋ฐํ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์ด๋ฉฐ, ๋ถ์ฐ ์์คํ ๊ณผ ์ค์๊ฐ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ ์ธ์ด๋ก ์๋ ค์ ธ ์์ต๋๋ค. ํนํ, ๋ง์ ์ฌ์ฉ์๊ฐ ๋์์ ์ ์ํ๋ ๋๊ท๋ชจ ์๋ฒ ์ดํ๋ฆฌ์ผ์ด์ ์ ์ ํฉํ๋ฉฐ, ์์ ์ฑ๊ณผ ํ์ฅ์ฑ์ด ๋ฐ์ด๋๋ค๋ ํน์ง์ด ์์ต๋๋ค. Erlang์ OTP(Open Telecom Platform)๋ผ๋ ํ๋ ์์ํฌ์ ํจ๊ป ์ฌ์ฉ๋์ด ๋คํธ์ํฌ ํต์ , ๋ถ์ฐ ์ฒ๋ฆฌ, ๋ณ๋ ฌ ์ฒ๋ฆฌ ๋ฑ์ ๊ตฌํํ ์ ์์ต๋๋ค.
1. Erlang ์ค์น
Next ๋๋ฌ ๊ธฐ๋ณธ์ผ๋ก ์ค์นํด์ค๋ค. ๊ผญ C ๋๋ผ์ด๋ธ์ ์ค์นํด์ค๋ค..! ์ ๋งํ๋ฉด D ๋๋ผ์ด๋ธ์ ์ค์นํ๋ ๊ฒ์ ์ ํธํ๋ ํธ์ด์ง๋ง Erlang, Java์ ๊ฐ์ Develop Kit๋ค์ C ๋๋ผ์ด๋ธ์ ์ค์นํ๋ค. ๋์ค์ ๊ณ ์ํ๊ณ ์ถ์ง ์์ผ๋ฉด,.. C ๋๋ผ์ด๋ธ์ ์ค์นํ์.
2. ํ๊ฒฝ๋ณ์
์๋์ฐ CMD์์ Erlang์ ์ฌ์ฉํ๊ธฐ ์ํด ์์คํ ํ๊ฒฝ๋ณ์ Path๋ฅผ \bin ๊ฒฝ๋ก๋ก ์ก์์ค๋ค.
3. RabbitMq ์ค์น
* rabbitMq install : https://www.rabbitmq.com/download.html
์ํ๋ ๋ฒ์ ์ ์ ํํด install ํด์ค๋ค. Erlang ์ค์น์ ๋์ผํ๊ฒ Next ๋ก ์ค์นํด์ค๋ค. ์ค์น๊ฐ ๋๋๋ฉด server๊ฐ ์๋์คํ๋๋ค.
rabbitMQ Command๋ฅผ ์ด์ด rabbitMq์ ๋ํ ๋ช ๋ น์ด๋ฅผ ์คํํ ์ ์๋ค. ์์ผ๋ก CMD๋ผ๊ณ ์นญํ๋ ๊ฒ์ด Command Prompt๋ผ๊ณ ์๊ฐํ๋ฉด ๋๋ค.
4. rabbitMq Manager UI ํ๋ฌ๊ทธ์ธ ์ค์น
rabbitMq๋ ctl ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋น์ค ๋๋ฏ๋ก ๋์ผ๋ก ํ์ธ์ด ์ด๋ ต๋ค. ๋ฐ๋ผ์ ํ๋ฌ๊ทธ์ธ ์ค์นํด Manager ๋์๋ณด๋๋ก ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ๋ค. ์์์ ๋งํ๋ Command Prompt ๋ฅผ ์คํํด ์๋ ๋ช ๋ น์ด๋ก ์ค์นํ์.
rabbitmq-plugins enable rabbitmq_management
์ค์น๋ฅผ ์๋ฃํ์ผ๋ฉด http://localhost:15672/๋ฅผ ํตํด ๋ก๊ทธ์ธ ํ๋ฉด์ผ๋ก ์ ์ํ๋ค. ๋ง์ฝ, ์ด ํ๋ฉด์ด ์ ์์ ์ผ๋ก ๋์ค์ง ์๋๋ค๋ฉด? Erlang ๋ฒ์ ๊ณผ RabbitMq ๋ฒ์ ์ด ๋ง์ง ์์ ์ ๋๋ก ์๋น์ค๊ฐ ์คํ๋์ง ์์๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์์ ์ผ๋ก ์ค์น๊ฐ ๋์์ง๋ง ๋ฒ์ ์ด ๋ง์ง ์์ผ๋ฉด localhost๊ฐ ์คํ๋์ง ์์ผ๋ ๋ฐ๋์ RabbitMq ํํ์ด์ง์์ ๋ฒ์ ์ฒดํฌ๋ฅผ ํด์ผํ๋ค.
๋๋ ์ด๊ฑธ๋ก ์ผ์ฃผ์ผ์ ์ฝ์งํ๊ณ ์ฝ 8๋ฒ์ ์ค์น๊ณผ์ ์ ๋ฐ๋ณตํ๋ค;;; ๋ฒ์ ์ ๋ง์ถ์๋๋ฐ๋ localhost๋ก ์ ์๋์ง ์๋๋ค๋ฉด ์๋ฒ๊ฐ ์คํ์ค์ธ์ง ์ฒดํฌํด๋ณด๊ณ ์๋ฒ ์ฌ๊ธฐ๋๊ณผ ์ปดํจํฐ ์ฌ๋ถํ ๋ฑ๋ฑ ๋ค์ํ ๋ฐฉ๋ฒ์ผ๋ก ์๋ํด๋ด์ผ ํ๋ค. RabbitMq์ ๋ํ ์๋ฃ๊ฐ ์น์ ํ๊ฑฐ๋ ๊ต๋ณด์ฌ๊ฐ ๋ง๋ค๋ฉด ์ด๋ฐ ์ฝ์ง์ ํ์ง ์์๊ฒ ์ง๋ง ๋ง์ ๊ตฌ๊ธ๋ง๊ณผ ํฌ์คํ ์ ๋ด๋ ์์์น๋ชปํ ๋ฌธ์ ๊ฐ ๋ง์๋ค. ๋๋ ์ด๋ฒ์ RabbitMq๋ฅผ ์ ๋๋ก ๋ชจ๋ฅด๊ณ ๊ณต๋ถํ๋ฉด์ ์ฝ์งํ ๊ณผ์ ์ ํฌ์คํ ํ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋ฌด์กฐ๊ฑด ์ ๋ต์ ์๋ ๊ฑฐ๋ผ๊ณ ์๊ฐํ๋ค. ๋ฐ๋ผ์ ์ข์ ์๊ฒฌ์ด ์๋ค๋ฉด ์ธ์ ๋ ๋๊ธ๋ก ๋ฌ์์ฃผ์ธ์ :)
์ด ํ๋ฉด์ ๋ณด์๋ค๋ฉด RabbitMq ์ค์น ํ ๊ธฐ๋ณธ ๊ณ์ ์ธ guest/guest ๋ก ๋ก๊ทธ์ธํ ์ ์๋ค.