๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
1๏ธโƒฃ Web/Spring

[Web] RabbitMQ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ  (feat. MSA)

by seolhee2750 2023. 4. 2.

๐Ÿ“ RabbitMQ ์ ์šฉ ๊ณ„๊ธฐ

 

ํ˜„์žฌ ์ง„ํ–‰์ค‘์ธ ๋น…๋ฐ์ดํ„ฐ ํ”„๋กœ์ ํŠธ์—์„œ Message Queue๋ฅผ ์ ์šฉํ•  ์ผ์ด ์ƒ๊ฒผ๋‹ค.

 

์‚ฌ์šฉ์ž ์œ ์ž… & ๋ฐ์ดํ„ฐ ๋ณด์ •์„ ํ†ตํ•œ ๋น…๋ฐ์ดํ„ฐ ์ถ”์ฒœ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด

MBTI ํ…Œ์ŠคํŠธ๋ฅผ ์˜ค๋งˆ์ฃผํ•œ 'JUBTI(้…’๋น„ํ‹ฐ์•„์ด)'๋ฅผ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ,

 

ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ๋งˆ์น  ๋•Œ๋งˆ๋‹ค

๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ SpringBoot API๋กœ ๋ฐ›์•„ Flask ์„œ๋ฒ„์— ๋ณด๋‚ด์„œ ๋ฐ์ดํ„ฐ ๋ณด์ • ์ž‘์—…์„ ์ง„ํ–‰ํ•ด์•ผ ํ–ˆ๋‹ค.

(API ์„œ๋ฒ„๋Š” Spring Rest API, Analysis ์„œ๋ฒ„๋Š” Flask๋กœ ๊ตฌ์„ฑ)

 

๊ทธ๋Ÿฐ๋ฐ ํ•ด๋‹น ํ…Œ์ŠคํŠธ๋Š” ๋น„ํšŒ์›์œผ๋กœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ์„œ๋น„์Šค์ด๋ฉฐ,

์นด์นด์˜คํ†ก ๊ณต์œ ํ•˜๊ธฐ ๊ธฐ๋Šฅ๊นŒ์ง€ ์ถ”๊ฐ€ํ•˜์—ฌ ์ตœ๋Œ€ํ•œ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์‰ฝ๊ฒŒ ํ…Œ์ŠคํŠธ ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ–ˆ๊ธฐ์—

๋™์‹œ์— ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋ชฐ๋ฆด ๋•Œ์˜ ์„ฑ๋Šฅ์ƒ ๋ฌธ์ œ์ ์ด ์˜ˆ์ƒ๋˜์—ˆ๋‹ค.

 

 

๐Ÿ’ก ์šฐ๋ฆฌ๋Š” ์ฒซ ๋ฒˆ์งธ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์œผ๋กœ ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ƒ๊ฐํ–ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ›์œผ๋ฉด ์šฐ์„  DB์— ์ €์žฅํ•˜๊ณ , ์Šค์ผ€์ค„๋Ÿฌ๋ฅผ ์ด์šฉํ•˜์—ฌ
์ •ํ•ด์ง„ ์ฃผ๊ธฐ๋งˆ๋‹ค ํ•œ ๋ฒˆ์”ฉ Flask ์„œ๋ฒ„์— ์š”์ฒญ์„ ๋ณด๋‚ด์„œ ์Œ“์ธ ๋ฐ์ดํ„ฐ๋งŒํผ ๋ฐ์ดํ„ฐ ๋ณด์ •์„ ์ง„ํ–‰ํ•˜๋Š” ๋ฐฉ์‹!

 

์œ„์™€ ๊ฐ™์ด ์ง„ํ–‰ํ•˜๋ฉด ๋ฌธ์ œ๋Š” ์—†์ง€๋งŒ, ๊ณ„์†ํ•ด์„œ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ๋ณด์ •์„ ์ง„ํ–‰ํ•˜๋Š” ๊ฒƒ ๋ณด๋‹ค

์ถ”์ฒœ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ ๊ฐœ์„ ์˜ ์ •๋„๊ฐ€ ์•„์‰ฝ๋‹ค๋Š” ๊ฒฐ๋ก ์„ ๋„์ถœํ–ˆ๋‹ค.

 

 

๐Ÿ’ก ์ƒˆ๋กœ์šด ๊ฐœ์„  ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ MQ๋ฅผ ์ ์šฉํ•˜์—ฌ MSA๋ฅผ ๊ตฌ์ถ•ํ•˜์ž๋Š” ๊ฒƒ!

๋”์šฑ ์ •๊ตํ•œ ๋ฐ์ดํ„ฐ ๋ณด์ • ๋ฐ ๋น…๋ฐ์ดํ„ฐ ์ถ”์ฒœ ์„ฑ๋Šฅ ๊ฐœ์„ ์„ ์œ„ํ•ด

์‹ค์‹œ๊ฐ„์œผ๋กœ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ ๋ฐ์ดํ„ฐ๋ฅผ Flask๋กœ ๋ณด๋‚ด๊ณ  ๊ณ„์†ํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด์ •ํ•˜๋Š” ๋ฐฉ์‹์„ ์ง€ํ‚ค๊ณ ์ž ํ–ˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ๋งŽ์€ ์‚ฌ์šฉ์ž๊ฐ€ ๋™์‹œ์— ์ ‘์†ํ–ˆ์„ ๋•Œ๋„, API ์„œ๋ฒ„๊ฐ€ ์•ž์—์„œ ์–ด๋–ป๊ฒŒ ์ž‘๋™ํ•˜๊ณ  ์žˆ๋“  ๊ด€๊ณ„์—†์ด

Flask ์„œ๋ฒ„๋Š” API์—์„œ ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ๋“ค์„ ์Œ“์•„๋‘๊ณ  ๊ณ„์†ํ•ด์„œ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์„ ๋ชฉํ‘œ๋กœ ํ–ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ์•„๋ž˜์™€ ๊ฐ™์€ ์ด์œ ๋กœ RabbitMQ ์ ์šฉ์„ ๊ฒฐ์ •ํ–ˆ๋‹ค.

1๏ธโƒฃ ๋ฐ์ดํ„ฐ๋ฅผ ์Œ“์•„๋‘˜ ๊ณณ ํ•„์š” -> Message Queue ์ด์šฉํ•˜์ž.

2๏ธโƒฃ Spring ์„œ๋ฒ„์™€ Flask ์„œ๋ฒ„์˜ ํ†ต์‹ ์ด ํ•„์š” -> AMQP๋ฅผ ์ง€์›ํ•˜๋Š” RabbitMQ ์ด์šฉํ•˜์ž.

 


๐Ÿ“ RabbitMQ์˜ ์“ฐ์ž„

 

RabbitMQ๋Š” AMQP๋ฅผ ๊ตฌํ˜„ํ•œ ๋ฏธ๋“ค์›จ์–ด๋กœ,

์„œ๋น„์Šค์™€ ์„œ๋น„์Šค ์‚ฌ์ด์— ์กด์žฌํ•˜๋ฉฐ ๋ฉ”์‹œ์ง€๋ฅผ ์ „๋‹ฌํ•˜๋Š” ์—ญํ• ์„ ํ•œ๋‹ค.

 

๋ฐฑ์—”๋“œ ์•ˆ์—์„œ๋„ ํ”„๋ก ํŠธ์™€ ๋ฐฑ์œผ๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ๋Š”๋ฐ, ๋ณดํ†ต ํ”„๋ก ํŠธ๋Š” API, ๋ฐฑ์€ Analysis ์„œ๋ฒ„๋กœ ๋ณธ๋‹ค.

์ด ๋•Œ, ๋ฐฑ์—”๋“œ์˜ ํ”„๋ก ํŠธ, ๋ฐฑ์„ ํ•œ ์„œ๋ฒ„์—์„œ ๋Œ๋ฆฌ๋Š” ๊ฒƒ์€ ์œ„ํ—˜ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ทธ ์ด์œ ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋งŽ์•„์งˆ ๊ฒฝ์šฐ ๋ถ„์„ ์„œ๋ฒ„๊ฐ€ ์‚ฌ๋งํ•˜๊ฑฐ๋‚˜,

๋ฐ˜๋Œ€๋กœ ๋ถ„์„์˜ ์–‘์ด ๋งŽ์•„์ ธ์„œ ๋ถ„์„ ์„œ๋ฒ„๊ฐ€ ์‚ฌ๋งํ•˜๊ฒŒ ๋  ์‹œ API๊นŒ์ง€ ํ•จ๊ป˜ ์‚ฌ๋งํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๐Ÿ‘‰ ์˜์กด์„ฑ์ด ๋„ˆ๋ฌด ๋†’์•„์„œ ์ƒ๊ธฐ๋Š” ๋ฌธ์ œ !


๋”ฐ๋ผ์„œ ์„œ๋ฒ„๋Š” ๋ถ„ํ• ํ•ด์ฃผ๊ณ , ๋ถ„ํ• ๋œ ์„œ๋ฒ„๋“ค์€ ๋ฉ”์‹œ์ง€๋ฅผ ํ์— ์ ์žฌํ•˜์—ฌ ์†Œํ†ตํ•˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด

๊ฐ€์šฉ์„ฑ๊ณผ ํ™•์žฅ์„ฑ ์ธก๋ฉด์—์„œ ์ข‹๋‹ค. ์ด๊ฒŒ ๋ฐ”๋กœ MSA(๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜) ๐Ÿ’ฅ

 

์ด ๋•Œ RabbitMQ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฉ”์‹œ์ง€ ํ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•ด์ค€๋‹ค.

RabbitMQ๋Š” AMQP๋ฅผ ๊ตฌํ˜„ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋กœ ๋‹ค๋ฅธ ์‹œ์Šคํ…œ๊ฐ„์— ํšจ์œจ์ ์ธ ๋ฉ”์‹œ์ง€ ๊ตํ™˜์„ ๋•๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

AMQP ์ด์ „ ์ƒ์šฉํ™”๋œ  MQ๋“ค์€ ํ”Œ๋žซํผ ์ข…์†์ ์ธ ์ œํ’ˆ์ด ๋งŽ์•„์„œ ๋ฉ”์‹œ์ง€ ๋ธŒ๋ฆฟ์ง€๊ฐ€ ๋”ฐ๋กœ ํ•„์š”ํ–ˆ๊ณ ,

๊ทธ๋กœ ์ธํ•œ ์†๋„ ์ €ํ•˜๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

 


๐Ÿ“ RabbitMQ ์ ์šฉ ๋ฐฉ์•ˆ

 

0๏ธโƒฃ Spring ์„œ๋ฒ„๋Š” ํ•˜๋‚˜, Flask ์„œ๋ฒ„๋Š” ๋‘ ๊ฐœ๋ฅผ ๋„์›€

1๏ธโƒฃ ์‚ฌ์šฉ์ž๊ฐ€ ํ…Œ์ŠคํŠธ๋ฅผ ์ง„ํ–‰

2๏ธโƒฃ ํ•ด๋‹น ๊ฒฐ๊ณผ๋ฅผ Spring API๋กœ ๋ฐ›์Œ

3๏ธโƒฃ ๋ฐ›์€ ๊ฒฐ๊ณผ๋ฅผ RabbitMQ๋กœ ์ ์žฌ (Spring์— Producer ๊ตฌํ˜„)

4๏ธโƒฃ ์ ์žฌ๋œ ๋‚ด์šฉ์„ ๋‘๊ฐœ์˜ Flask ์„œ๋ฒ„๊ฐ€ ์ฐจ๋ก€๋Œ€๋กœ ๊ฐ€์ ธ๊ฐ (Flask์— Consumer ๊ตฌํ˜„, prefetch count 1๋กœ ์„ค์ •)

https://velog.io/@sdb016/RabbitMQ-%EA%B8%B0%EC%B4%88-%EA%B0%9C%EB%85%90

 

๊ฒฐ๊ณผ

Spring API์—์„œ๋Š” ๊ณ„์†ํ•ด์„œ ์‚ฌ์šฉ์ž์˜ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ RabbitMQ๋กœ ์ ์žฌํ•˜๊ณ ,

API์˜ ๋™์ž‘ ์—ฌ๋ถ€์™€ ๊ด€๊ณ„ ์—†์ด Flask์—์„œ๋Š” ๊ณ„์†ํ•ด์„œ Queue๋ฅผ ์ง€์ผœ๋ณด๋ฉฐ ์ ์žฌ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ์œผ๋ฉด ๊ฐ€์ ธ์˜จ๋‹ค.

์ ์žฌ๋œ ๋ฉ”์‹œ์ง€๊ฐ€ ์—ฌ๋Ÿฌ ๊ฐœ ์žˆ์„ ๊ฒฝ์šฐ์—๋Š” Flask ์„œ๋ฒ„ ๋‘ ๊ฐœ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ ๋‚˜๋ˆ ๊ฐ€์ง„๋‹ค.

ex) 1๋ฒˆ, 2๋ฒˆ, 3๋ฒˆ ๋ฉ”์‹œ์ง€๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•  ๋•Œ
1๋ฒˆ์„ Flask1์ด ๋ฐ›๊ณ , 2๋ฒˆ์€ Flask2๊ฐ€ ๋ฐ›๋Š”๋ฐ, 1๋ฒˆ์ด ์˜ค๋ž˜๊ฑธ๋ ค์„œ 2๋ฒˆ์ด ๋จผ์ € ๋๋‚œ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๋ฉด
3๋ฒˆ ๋ฉ”์‹œ์ง€๋Š” ๋ถ„์„์ด ๋๋‚œ Flask2์ด ๋ฐ›์•„ ๋ถ„์„์„ ์‹œ์ž‘ํ•œ๋‹ค.

 

๐Ÿ‘‰ MQ๋ฅผ ํ†ตํ•ด MSA๋ฅผ ๊ตฌ์ถ•ํ•จ (๊ฐ ์„œ๋ฒ„์˜ ์˜์กด์„ฑ ์ค„์ž„)

๐Ÿ‘‰ ๊ณ„์†ํ•ด์„œ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๋ฐ์ดํ„ฐ ๋ณด์ •์„ ์ง„ํ–‰ํ•จ์œผ๋กœ์จ ์ถ”์ฒœ ์‹œ์Šคํ…œ์˜ ์ •ํ™•์„ฑ ๋†’์ž„

 


๐Ÿ“Œ RabbitMQ์˜ ์ž์„ธํ•œ ๊ตฌํ˜„ ๋ฐฉ์‹์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”!

https://seolhee2750.tistory.com/267

 

[Web] ๋กœ์ปฌ ํ™˜๊ฒฝ์—์„œ SpringBoot์™€ Flask์— RabbitMQ ์ ์šฉํ•˜๊ธฐ

๐Ÿ“ RabbitMQ ์„ค์น˜ 1๏ธโƒฃ RabbitMQ ๋ฐ Erlang ์„ค์น˜ ์„ค์น˜๋Š” ์•„๋ž˜ ์‚ฌ์ดํŠธ๋ฅผ ์ฐธ๊ณ ํ–ˆ๋‹ค. Windows10์— RabbitMQ ๋น ๋ฅด๊ฒŒ ์„ค์น˜ํ•˜๊ธฐ (with Erlang), ๊ทธ๋ฆฌ๊ณ  RabbitMQ management ๋„์šฐ๊ธฐ (tistory.com) Windows10์— RabbitMQ ๋น ๋ฅด๊ฒŒ ์„ค์น˜ํ•˜

seolhee2750.tistory.com

 


์ฐธ๊ณ 

 

 

 

 

 

 

 

 

 

๋Œ“๊ธ€