๊ณต๋ถ€/TIL

[20250312] RabbitMQ์™€ FeignClient ์‰ฝ๊ฒŒ ์ดํ•ดํ•ด๋ณด์ž!

dvlpsy๐ŸŒผ 2025. 3. 12. 12:42
๋ฐ˜์‘ํ˜•

๐Ÿ‡ 1. RabbitMQ – ๋ฉ”์‹œ์ง€๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ์šฐ์ฒด๋ถ€

 

๐Ÿ“Œ RabbitMQ๋ž€?

RabbitMQ๋Š” ์„œ๋น„์Šค์™€ ์„œ๋น„์Šค ๊ฐ„์— ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ์ˆ˜ ์žˆ๋„๋ก ๋•๋Š” **๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค(Message Broker)**์ž…๋‹ˆ๋‹ค.
์šฐ์ฒด๋ถ€์ฒ˜๋Ÿผ ํ•œ ๊ณณ์—์„œ ๋ณด๋‚ธ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ๋‹ค๋ฅธ ๊ณณ์œผ๋กœ ์ „๋‹ฌํ•ด์ฃผ๋Š” ์—ญํ• ์„ ํ•ด์š”.

 

๐Ÿง ์™œ RabbitMQ๊ฐ€ ํ•„์š”ํ• ๊นŒ์š”?

  1. ์„œ๋น„์Šค ๊ฐ„์˜ ์ง์ ‘ ์—ฐ๊ฒฐ ๋ฌธ์ œ
    • ์„œ๋น„์Šค A๊ฐ€ ์„œ๋น„์Šค B์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ๋•Œ, B๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธฐ๋ฉด A๋„ ์˜ํ–ฅ์„ ๋ฐ›์•„์š”.
    • RabbitMQ๋Š” ์ค‘๊ฐ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„ ๋Œ€์‹  ์ „๋‹ฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์„œ๋น„์Šค A๋Š” B์˜ ์ƒํƒœ๋ฅผ ์‹ ๊ฒฝ ์“ธ ํ•„์š”๊ฐ€ ์—†์–ด์š”.
  2. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
    • ์ฆ‰์‹œ ์‘๋‹ต์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ž‘์—…(์˜ˆ: ์ด๋ฉ”์ผ ์ „์†ก, ๋กœ๊ทธ ์ €์žฅ)์„ ๋น„๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•ด ์„ฑ๋Šฅ์„ ๋†’์—ฌ์ค˜์š”.

 

๐Ÿ“Š RabbitMQ์˜ ์ฃผ์š” ๊ฐœ๋…

  1. ํ”„๋กœ๋“€์„œ(Producer): ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋‚ด๋Š” ์—ญํ•  (์˜ˆ: ์ฃผ๋ฌธ ์‹œ์Šคํ…œ์—์„œ ์ฃผ๋ฌธ ์ •๋ณด๋ฅผ ์ „๋‹ฌ)
  2. ํ(Queue): ๋ฉ”์‹œ์ง€๋ฅผ ์ž ์‹œ ๋ณด๊ด€ํ•˜๋Š” ์ €์žฅ์†Œ
  3. ์ปจ์Šˆ๋จธ(Consumer): ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ฒ˜๋ฆฌํ•˜๋Š” ์—ญํ•  (์˜ˆ: ์ด๋ฉ”์ผ ์ „์†ก ์„œ๋น„์Šค)
  4. ์ต์Šค์ฒด์ธ์ง€(Exchange): ๋ฉ”์‹œ์ง€๋ฅผ ์–ด๋–ป๊ฒŒ ํ์— ๋ณด๋‚ผ์ง€ ๊ฒฐ์ •ํ•˜๋Š” ๋ผ์šฐํ„ฐ ์—ญํ• 

 

๐Ÿ”— RabbitMQ์˜ ๋™์ž‘ ํ๋ฆ„

  1. ํ”„๋กœ๋“€์„œ๊ฐ€ ๋ฉ”์‹œ์ง€๋ฅผ RabbitMQ์—๊ฒŒ ๋ณด๋ƒ„
  2. RabbitMQ๋Š” ์ต์Šค์ฒด์ธ์ง€๋ฅผ ํ†ตํ•ด ํ์— ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๊ด€
  3. ์ค€๋น„๋œ ์ปจ์Šˆ๋จธ๊ฐ€ ํ์—์„œ ๋ฉ”์‹œ์ง€๋ฅผ ๊บผ๋‚ด ์ฒ˜๋ฆฌ
  4. ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ๊ฐ€ ๋๋‚˜๋ฉด **ACK(ํ™•์ธ ์‘๋‹ต)**์„ ๋ณด๋ƒ„

 

๐Ÿ“Œ ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ

  • ํ”„๋กœ๋“€์„œ = ํƒ๋ฐฐ๋ฅผ ๋ณด๋‚ด๋Š” ์‚ฌ๋žŒ
  • ํ = ํƒ๋ฐฐ ์ƒ์ž๊ฐ€ ์Œ“์ด๋Š” ์ฐฝ๊ณ 
  • ์ปจ์Šˆ๋จธ = ํƒ๋ฐฐ๋ฅผ ๋ฐฐ๋‹ฌํ•˜๋Š” ์‚ฌ๋žŒ

 

 

๐Ÿ› ๏ธ RabbitMQ์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ
    • ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…(์˜ˆ: ์ด๋ฏธ์ง€ ์ฒ˜๋ฆฌ)์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ˆ˜ํ–‰
  2. ๋ฉ”์‹œ์ง€ ๋ณด์žฅ
    • ๋ฉ”์‹œ์ง€๊ฐ€ ์œ ์‹ค๋˜์ง€ ์•Š๋„๋ก ์•ˆ์ „ํ•˜๊ฒŒ ๋ณด๊ด€
  3. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
    • ์—ฌ๋Ÿฌ ์ปจ์Šˆ๋จธ๊ฐ€ ๋™์‹œ์— ์ž‘์—…์„ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌ (๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ)
  4. ์ง€์†์„ฑ(Persistence)
    • ์‹œ์Šคํ…œ์ด ์žฌ์‹œ์ž‘๋˜์–ด๋„ ๋ฉ”์‹œ์ง€๋ฅผ ์œ ์ง€ ๊ฐ€๋Šฅ

 

๐Ÿ“Œ RabbitMQ ์‚ฌ์šฉ ์‚ฌ๋ก€

  • ๋Œ€๋Ÿ‰์˜ ์ด๋ฉ”์ผ ๋ฐœ์†ก
    • ์‚ฌ์šฉ์ž ์ˆ˜๋ฐฑ๋งŒ ๋ช…์—๊ฒŒ ์ด๋ฉ”์ผ์„ ๋ณด๋‚ผ ๋•Œ, RabbitMQ๊ฐ€ ๊ฐ ์ด๋ฉ”์ผ ๋ฐœ์†ก ์š”์ฒญ์„ ๊ด€๋ฆฌ
  • ๋กœ๊ทธ ์ˆ˜์ง‘
    • ์—ฌ๋Ÿฌ ์„œ๋น„์Šค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋กœ๊ทธ๋ฅผ ํ•˜๋‚˜์˜ ์‹œ์Šคํ…œ์— ๋ชจ์•„์„œ ์ €์žฅ
  • ๊ฒฐ์ œ ์‹œ์Šคํ…œ
    • ๊ฒฐ์ œ ์š”์ฒญ์„ ํ์— ์ €์žฅํ•˜๊ณ  ์ˆœ์ฐจ์ ์œผ๋กœ ์ฒ˜๋ฆฌ

 


๐Ÿ”— 2. FeignClient – ์„œ๋น„์Šค ๊ฐ„ ์ „ํ™”๊ธฐ

 

๐Ÿ“Œ FeignClient๋ž€?

FeignClient๋Š” ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ์•„ํ‚คํ…์ฒ˜์—์„œ ์„œ๋น„์Šค ๊ฐ„ HTTP ํ†ต์‹ ์„ ์‰ฝ๊ฒŒ ํ•ด์ฃผ๋Š” ๋„๊ตฌ์ž…๋‹ˆ๋‹ค.
์—ฌ๋Ÿฌ ์„œ๋น„์Šค๊ฐ€ ์„œ๋กœ ํ•„์š”ํ•œ ์ •๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ›์„ ๋•Œ, ์ง์ ‘ HTTP ์š”์ฒญ์„ ๋งŒ๋“ค์ง€ ์•Š๊ณ  ์ธํ„ฐํŽ˜์ด์Šค๋กœ ๊ฐ„ํŽธํ•˜๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์š”.

 

๐Ÿ“Š FeignClient์˜ ์ฃผ์š” ๊ฐœ๋…

  1. ํด๋ผ์ด์–ธํŠธ(Client): ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ์„œ๋น„์Šค (์˜ˆ: ์ฃผ๋ฌธ ์„œ๋น„์Šค)
  2. ์„œ๋ฒ„(Server): ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‘๋‹ตํ•˜๋Š” ์„œ๋น„์Šค (์˜ˆ: ์žฌ๊ณ  ์„œ๋น„์Šค)
  3. REST API: ์„œ๋น„์Šค ๊ฐ„ ๋ฐ์ดํ„ฐ๋ฅผ ์ฃผ๊ณ ๋ฐ›๋Š” ๊ทœ์น™ (์˜ˆ: GET, POST ์š”์ฒญ)

 

๐Ÿ”— FeignClient์˜ ๋™์ž‘ ํ๋ฆ„

  1. ์„œ๋น„์Šค A๊ฐ€ ์„œ๋น„์Šค B์˜ ๋ฐ์ดํ„ฐ๋ฅผ ํ•„์š”๋กœ ํ•จ
  2. FeignClient๊ฐ€ ์„œ๋น„์Šค B๋กœ HTTP ์š”์ฒญ(GET, POST)์„ ๋ณด๋ƒ„
  3. ์„œ๋น„์Šค B๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ์‘๋‹ต์œผ๋กœ ๋ฐ˜ํ™˜
  4. FeignClient๊ฐ€ JSON ๋ฐ์ดํ„ฐ๋ฅผ Java ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด ๋ฐ˜ํ™˜

 

๐Ÿ“Œ ๋น„์œ ๋กœ ์ดํ•ดํ•˜๊ธฐ

  • ์„œ๋น„์Šค A = ์ „ํ™”๋ฅผ ๊ฑฐ๋Š” ์‚ฌ๋žŒ
  • ์„œ๋น„์Šค B = ์ „ํ™”๋ฅผ ๋ฐ›๋Š” ์‚ฌ๋žŒ
  • FeignClient = ์ „ํ™”๊ธฐ

 

 

๐Ÿ› ๏ธ FeignClient์˜ ์ฃผ์š” ๊ธฐ๋Šฅ

  1. ๊ฐ„ํŽธํ•œ HTTP ํ†ต์‹ 
    • ์ธํ„ฐํŽ˜์ด์Šค๋กœ HTTP ์š”์ฒญ์„ ์ •์˜ํ•˜๊ณ  ์‰ฝ๊ฒŒ ํ˜ธ์ถœ ๊ฐ€๋Šฅ
  2. ์„œ๋น„์Šค ๋””์Šค์ปค๋ฒ„๋ฆฌ ์—ฐ๋™
    • Eureka, Consul๊ณผ ์—ฐ๋™ํ•ด ์„œ๋น„์Šค ์œ„์น˜ ์ž๋™ ํƒ์ƒ‰
  3. ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ
    • ์š”์ฒญ ์‹คํŒจ ์‹œ ์žฌ์‹œ๋„ ๋กœ์ง ๊ตฌํ˜„ ๊ฐ€๋Šฅ
  4. ๋กœ๋“œ ๋ฐธ๋Ÿฐ์‹ฑ
    • ์—ฌ๋Ÿฌ ์„œ๋ฒ„์— ๋ถ€ํ•˜๋ฅผ ๊ณ ๋ฅด๊ฒŒ ๋ถ„๋ฐฐ

 

๐Ÿ“Œ FeignClient ์‚ฌ์šฉ ์‚ฌ๋ก€

  • ์‚ฌ์šฉ์ž ์ •๋ณด ์กฐํšŒ
    • ์‚ฌ์šฉ์ž ์„œ๋น„์Šค์—์„œ ํ”„๋กœํ•„ ์ •๋ณด๋ฅผ ์ฃผ๋ฌธ ์„œ๋น„์Šค๋กœ ์ „๋‹ฌ
  • ์žฌ๊ณ  ํ™•์ธ
    • ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ ์ƒํ’ˆ์˜ ์žฌ๊ณ  ์ˆ˜๋Ÿ‰์„ ์žฌ๊ณ  ์„œ๋น„์Šค์—์„œ ํ™•์ธ
  • ๊ฒฐ์ œ ์š”์ฒญ
    • ์ฃผ๋ฌธ ์„œ๋น„์Šค์—์„œ ๊ฒฐ์ œ ์„œ๋น„์Šค๋กœ ๊ฒฐ์ œ ์ •๋ณด๋ฅผ ์ „๋‹ฌ

 


๐Ÿ” RabbitMQ vs FeignClient ์ฐจ์ด์  ๋น„๊ต

 

ํ•ญ๋ชฉ ๐Ÿ‡ RabbitMQ ๐Ÿ”— FeignClient
๋ชฉ์  ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ์ „์†ก REST API ๊ธฐ๋ฐ˜ ๋™๊ธฐ ์š”์ฒญ
๋ฐฉ์‹ ๋ฉ”์‹œ์ง€ ํ๋ฅผ ํ†ตํ•œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ HTTP ํ”„๋กœํ† ์ฝœ ๊ธฐ๋ฐ˜ ๋™๊ธฐ ํ˜ธ์ถœ
์‚ฌ์šฉ ์‹œ์  ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ, ๋น„๋™๊ธฐ ์ž‘์—… ํ•„์š”ํ•  ๋•Œ ์„œ๋น„์Šค ๊ฐ„ ์‹ค์‹œ๊ฐ„ ์š”์ฒญ·์‘๋‹ต ํ•„์š”ํ•  ๋•Œ
์†๋„ ๋А๋ฆฌ์ง€๋งŒ ๋น„๋™๊ธฐ๋กœ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๋น ๋ฅด์ง€๋งŒ ์š”์ฒญ-์‘๋‹ต์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๋Œ€๊ธฐ
์‹ ๋ขฐ์„ฑ ๋ฉ”์‹œ์ง€ ๋ˆ„๋ฝ ๋ฐฉ์ง€, ์žฌ์‹œ๋„ ๊ฐ€๋Šฅ ์š”์ฒญ ์‹คํŒจ ์‹œ ์ง์ ‘ ์žฌ์‹œ๋„ ๊ตฌํ˜„ ํ•„์š”
ํ™•์žฅ์„ฑ ์—ฌ๋Ÿฌ ํ์™€ ์ปจ์Šˆ๋จธ๋กœ ํ™•์žฅ ์‰ฌ์›€ ๋ถ€ํ•˜๊ฐ€ ์ปค์ง€๋ฉด ๋ณ„๋„ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ ํ•„์š”
๊ตฌํ˜„ ๋ณต์žก๋„ ์„ค์ •๊ณผ ๊ตฌ์กฐ๊ฐ€ ๋ณต์žกํ•จ ์ธํ„ฐํŽ˜์ด์Šค ์ •์˜๋กœ ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ตฌํ˜„
๊ธฐ์ˆ  ์Šคํƒ RabbitMQ ์„œ๋ฒ„, AMQP ํ”„๋กœํ† ์ฝœ ์‚ฌ์šฉ HTTP/HTTPS, RESTful API ๊ธฐ๋ฐ˜

 


๐Ÿ“Œ ์–ด๋–ค ๊ฒฝ์šฐ์— RabbitMQ์™€ FeignClient๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

 

โœ… RabbitMQ๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ
    • ์˜ˆ: ์ด๋ฉ”์ผ ๋ฐœ์†ก, ๋กœ๊ทธ ์ˆ˜์ง‘, ๊ฒฐ์ œ ์Šน์ธ ํ›„ ์•Œ๋ฆผ
  2. ๋Œ€๋Ÿ‰์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณ‘๋ ฌ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์˜ˆ: ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ๋ชจ์•„์„œ ๋ฐฐ์น˜๋กœ ์ฒ˜๋ฆฌ
  3. ์„œ๋น„์Šค ๊ฐ„ ๊ฒฐํ•ฉ์„ ๋А์Šจํ•˜๊ฒŒ ์œ ์ง€ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์˜ˆ: ์„œ๋น„์Šค A๊ฐ€ ๋‹ค์šด๋˜์–ด๋„ ์„œ๋น„์Šค B๋Š” ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›์•„ ๊ณ„์† ์‹คํ–‰

โœ… FeignClient๊ฐ€ ์ ํ•ฉํ•œ ๊ฒฝ์šฐ

  1. ์ฆ‰๊ฐ์ ์ธ ์‘๋‹ต์ด ํ•„์š”ํ•  ๋•Œ
    • ์˜ˆ: ์‚ฌ์šฉ์ž ์ธ์ฆ, ์ƒํ’ˆ ์ •๋ณด ์กฐํšŒ
  2. ์„œ๋น„์Šค ๊ฐ„ ์ƒํƒœ๋ฅผ ์‹ค์‹œ๊ฐ„์œผ๋กœ ํ™•์ธํ•ด์•ผ ํ•  ๋•Œ
    • ์˜ˆ: ์ฃผ๋ฌธ ์ƒ์„ฑ ์‹œ ์žฌ๊ณ  ํ™•์ธ
  3. ๊ตฌํ˜„์„ ๊ฐ„๋‹จํ•˜๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์˜ˆ: HTTP ์š”์ฒญ์„ ์ธํ„ฐํŽ˜์ด์Šค๋กœ ์ •์˜ํ•˜๊ณ  ์‚ฌ์šฉ

๐Ÿง ์ •๋ฆฌํ•˜์ž๋ฉด...

  • RabbitMQ: ๋А์Šจํ•œ ๊ฒฐํ•ฉ, ๋น„๋™๊ธฐ ์ž‘์—…, ๋Œ€๋Ÿ‰ ์ฒ˜๋ฆฌ์— ๊ฐ•ํ•จ
  • FeignClient: ๋น ๋ฅด๊ณ  ์ง๊ด€์ ์ธ HTTP ํ†ต์‹ , ๋™๊ธฐ ํ˜ธ์ถœ์— ์ ํ•ฉ

 

๐Ÿ“ฃ Tip!

  • ๋น„๋™๊ธฐ + ํ™•์žฅ์„ฑ์ด ์ค‘์š”ํ•˜๋‹ค๋ฉด → RabbitMQ
  • ๊ฐ„๋‹จํ•œ ์„œ๋น„์Šค ๊ฐ„ ํ˜ธ์ถœ์ด๋ผ๋ฉด → FeignClient

 


๐Ÿ“Œ RabbitMQ vs FeignClient – ๋” ๊นŠ์ด ์•Œ์•„์•ผ ํ•  ์ค‘์š”ํ•œ ์š”์†Œ๋“ค

RabbitMQ์™€ FeignClient๋Š” ๊ฐ๊ธฐ ๋‹ค๋ฅธ ๋ชฉ์ ๊ณผ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ๋งž๋Š” ๊ฐ•๋ ฅํ•œ ๋„๊ตฌ์ง€๋งŒ, ์‹ค์ œ๋กœ ์‹œ์Šคํ…œ์„ ์„ค๊ณ„ํ•˜๊ณ  ๊ตฌ์ถ•ํ•  ๋•Œ๋Š” ๋” ๋งŽ์€ ์š”์†Œ๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜๋Š” RabbitMQ์™€ FeignClient๋ฅผ ๋น„๊ตํ•  ๋•Œ ๋” ๊นŠ์ด ์ดํ•ดํ•ด์•ผ ํ•  ๊ฐœ๋…๊ณผ ๋‹ค๋ฅธ ๋Œ€์•ˆ ๊ธฐ์ˆ , ๊ทธ๋ฆฌ๊ณ  ์‹ค๋ฌด์—์„œ ์ž์ฃผ ๋งˆ์ฃผํ•˜๋Š” ๋ฌธ์ œ์™€ ํ•ด๊ฒฐ ๋ฐฉ์•ˆ์ด์—์š”.

 

 


๐Ÿง  1. RabbitMQ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

 

โœ… ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ

  • ๋ณ‘๋ชฉ ํ˜„์ƒ ํ•ด๊ฒฐ: ํ์— ๋„ˆ๋ฌด ๋งŽ์€ ๋ฉ”์‹œ์ง€๊ฐ€ ์Œ“์ด๋ฉด ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์ด ์ €ํ•˜๋  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • ํ๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ๋กœ ๋‚˜๋ˆ  ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ (Multiple Queues + ์—ฌ๋Ÿฌ Consumer)
    • Prefetch ์„ค์ •์„ ํ†ตํ•ด ํ•œ ๋ฒˆ์— ๊ฐ€์ ธ์˜ค๋Š” ๋ฉ”์‹œ์ง€ ์ˆ˜ ์กฐ์ ˆ
  • ๋ฉ”์‹œ์ง€ ํฌ๊ธฐ: RabbitMQ๋Š” **์ž‘์€ ๋ฉ”์‹œ์ง€(๋ช‡ KB)**์— ์ ํ•ฉํ•ด์š”. ํฐ ํŒŒ์ผ(์ด๋ฏธ์ง€, ๋™์˜์ƒ)์„ ์ „์†กํ•˜๋ฉด ์„ฑ๋Šฅ์ด ๋–จ์–ด์ ธ์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • ๋ฉ”์‹œ์ง€์—๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ๋งŒ ๋‹ด๊ณ , ์‹ค์ œ ํฐ ๋ฐ์ดํ„ฐ๋Š” S3 ๊ฐ™์€ ์ €์žฅ์†Œ์— ๋ณด๊ด€

 

โœ… ์‹ ๋ขฐ์„ฑ ๋ณด์žฅ

  • ๋ฉ”์‹œ์ง€ ์œ ์‹ค ๋ฐฉ์ง€: RabbitMQ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋ฉ”๋ชจ๋ฆฌ์— ์ €์žฅํ•ด์š”. ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋˜๋ฉด ์œ ์‹ค๋  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • Persistent๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ๋””์Šคํฌ์— ์ €์žฅ
    • Publisher Confirms๋กœ ๋ฉ”์‹œ์ง€๊ฐ€ ์ œ๋Œ€๋กœ ์ „๋‹ฌ๋๋Š”์ง€ ํ™•์ธ
    • Dead Letter Queue(DLQ) ์‚ฌ์šฉ: ์ฒ˜๋ฆฌ ์‹คํŒจํ•œ ๋ฉ”์‹œ์ง€๋ฅผ ๋ณ„๋„ ํ์— ์ €์žฅํ•ด ์žฌ์‹œ๋„

 

โœ… ์šด์˜ ๋ฐ ์œ ์ง€๋ณด์ˆ˜

  • ๋ชจ๋‹ˆํ„ฐ๋ง: RabbitMQ์˜ ํ ๊ธธ์ด๋‚˜ ์†Œ๋น„ ์†๋„๋ฅผ ๋ชจ๋‹ˆํ„ฐ๋งํ•ด์•ผ ๋ณ‘๋ชฉ์ด๋‚˜ ์žฅ์• ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ฐœ๊ฒฌํ•  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • RabbitMQ Management Plugin์œผ๋กœ ์‹ค์‹œ๊ฐ„ ๋ชจ๋‹ˆํ„ฐ๋ง
    • Prometheus, Grafana ์—ฐ๋™ํ•ด ์‹œ๊ฐํ™” ๋ฐ ์•Œ๋ฆผ ์„ค์ •

 

โœ… RabbitMQ์˜ ๋Œ€์•ˆ ๊ธฐ์ˆ 

Kafka ๋กœ๊ทธ ๊ธฐ๋ฐ˜, ๋Œ€๊ทœ๋ชจ ํŠธ๋ž˜ํ”ฝ ์ฒ˜๋ฆฌ, ๊ณ ์† ์ŠคํŠธ๋ฆฌ๋ฐ ๋น…๋ฐ์ดํ„ฐ, ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์‹œ์Šคํ…œ
ActiveMQ JMS(Java Message Service) ์ง€์›, ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ Java ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ๊ณผ ํ†ตํ•ฉ ์‹œ
Redis Pub/Sub ๋ฉ”๋ชจ๋ฆฌ ๊ธฐ๋ฐ˜, ๋งค์šฐ ๋น ๋ฅธ ์†๋„, ๋‹จ์ˆœํ•œ ๋ฉ”์‹œ์ง€ ์ฒ˜๋ฆฌ ๋น ๋ฅธ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ, ์บ์‹ฑ
SQS(AWS) AWS์˜ ๊ด€๋ฆฌํ˜• ํ ์„œ๋น„์Šค, ์œ ์ง€๋ณด์ˆ˜ ๋ถˆํ•„์š” ํด๋ผ์šฐ๋“œ ๊ธฐ๋ฐ˜ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

 


๐Ÿ”— 2. FeignClient๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ถ”๊ฐ€๋กœ ๊ณ ๋ คํ•ด์•ผ ํ•  ์‚ฌํ•ญ

 

โœ… ์„ฑ๋Šฅ ๋ฐ ํ™•์žฅ์„ฑ

  • ์š”์ฒญ ์ง€์—ฐ(latency): ์„œ๋น„์Šค ๊ฐ„ REST ํ˜ธ์ถœ์€ ๋„คํŠธ์›Œํฌ ์˜ค๋ฒ„ํ—ค๋“œ๋กœ ์ธํ•ด ์ง€์—ฐ์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • Hystrix๋‚˜ Resilience4j๋กœ Circuit Breaker(์žฅ์•  ๊ฐ์ง€) ์ ์šฉ
    • Feign์˜ Retryer๋กœ ์ž๋™ ์žฌ์‹œ๋„ ๊ตฌํ˜„
    • ๋ถ€ํ•˜๊ฐ€ ํฐ ๊ฒฝ์šฐ gRPC๋‚˜ WebClient๋กœ ์ „ํ™˜

 

โœ… ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ

  • ์„œ๋น„์Šค ์žฅ์•  ์‹œ ๋Œ€์ฒ˜: ํ˜ธ์ถœํ•œ ์„œ๋น„์Šค๊ฐ€ ์ฃฝ๊ฑฐ๋‚˜ ๋А๋ฆฌ๋ฉด ์ „์ฒด ์„œ๋น„์Šค๊ฐ€ ์ค‘๋‹จ๋  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • Fallback์„ ์ •์˜ํ•ด ์‹คํŒจ ์‹œ ๊ธฐ๋ณธ ์‘๋‹ต ๋ฐ˜ํ™˜
    • Timeout ์„ค์ •์œผ๋กœ ๊ธด ์š”์ฒญ์„ ์ œํ•œ

 

โœ… ๋ณด์•ˆ

  • ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ: ์„œ๋น„์Šค ๊ฐ„ ํ†ต์‹  ์ค‘ ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ๊ฐ€ ์™ธ๋ถ€๋กœ ๋…ธ์ถœ๋  ์ˆ˜ ์žˆ์–ด์š”.
    ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•:
    • HTTPS ์‚ฌ์šฉ
    • JWT๋‚˜ OAuth2๋ฅผ ์ด์šฉํ•ด ์„œ๋น„์Šค ๊ฐ„ ์ธ์ฆ

 

โœ… FeignClient์˜ ๋Œ€์•ˆ ๊ธฐ์ˆ 

๊ธฐ์ˆ ํŠน์ง•์–ธ์ œ ์‚ฌ์šฉ?

๊ธฐ์ˆ  ํŠน์ง• ์–ธ์ œ ์‚ฌ์šฉํ• ๊นŒ?
RestTemplate Spring์—์„œ ์ œ๊ณตํ•˜๋Š” ๊ธฐ๋ณธ HTTP Client ๊ฐ„๋‹จํ•œ HTTP ํ˜ธ์ถœ ์‹œ
WebClient ๋น„๋™๊ธฐ ๋ฐฉ์‹, ์„ฑ๋Šฅ ์šฐ์ˆ˜, ๋” ์œ ์—ฐํ•œ ์„ค์ • ์ง€์› ๋†’์€ ์„ฑ๋Šฅ๊ณผ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•  ๋•Œ
gRPC HTTP/2 ๊ธฐ๋ฐ˜, ๋น ๋ฅด๊ณ  ํšจ์œจ์ ์ธ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ†ต์‹  ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ „์†ก, ๋‚ฎ์€ ์ง€์—ฐ ์‹œ๊ฐ„
OpenFeign FeignClient์˜ ํ™•์žฅ ๋ฒ„์ „, ์Šคํ”„๋ง ๋ถ€ํŠธ์™€ ํ†ตํ•ฉ ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค์—์„œ ๊ฐ„ํŽธํ•œ REST ํ˜ธ์ถœ

 


๐Ÿ“š 3. RabbitMQ vs FeignClient – ๊นŠ์ด ์žˆ๋Š” ๋น„๊ต

ํ•ญ๋ชฉ ๐Ÿ‡ RabbitMQ ๐Ÿ”— FeignClient
๋ชฉ์  ๋น„๋™๊ธฐ ๋ฉ”์‹œ์ง€ ํ ๊ธฐ๋ฐ˜ ์ฒ˜๋ฆฌ REST ๊ธฐ๋ฐ˜ ์„œ๋น„์Šค ๊ฐ„ ์ง์ ‘ ํ˜ธ์ถœ
ํ”„๋กœํ† ์ฝœ AMQP (Advanced Message Queuing Protocol) HTTP/HTTPS
์„ฑ๋Šฅ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ๋กœ ๋†’์€ ์„ฑ๋Šฅ (๋Œ€๋Ÿ‰ ๋ฉ”์‹œ์ง€ ๊ฐ€๋Šฅ) ๋™๊ธฐ ํ˜ธ์ถœ๋กœ ์ œํ•œ์  (์„œ๋น„์Šค ์‘๋‹ต ๋Œ€๊ธฐ)
์žฅ์•  ๋ณต๊ตฌ ๋ฉ”์‹œ์ง€ ์œ ์‹ค ๋ฐฉ์ง€(ACK), ์žฌ์‹œ๋„(DLQ) ์žฅ์•  ์‹œ ๊ธฐ๋ณธ ์‘๋‹ต(Fallback) ์ œ๊ณต ๊ฐ€๋Šฅ
ํ™•์žฅ์„ฑ ๋‹ค์ˆ˜์˜ Consumer๋ฅผ ์ถ”๊ฐ€ํ•ด ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ ๋กœ๋“œ๋ฐธ๋Ÿฐ์„œ(Eureka)๋กœ ํ™•์žฅ ๊ฐ€๋Šฅ
๋ณต์žก๋„ ์„ค์ • ๋ฐ ์ธํ”„๋ผ ๋ณต์žก ๊ตฌํ˜„ ๊ฐ„๋‹จ, Spring Boot์—์„œ ์‰ฝ๊ฒŒ ์‚ฌ์šฉ
์ฃผ์š” ๋ฌธ์ œ ๋ฉ”์‹œ์ง€ ์ •์ฒด, ํ ๊ด€๋ฆฌ ๋ถ€๋‹ด ๋„คํŠธ์›Œํฌ ์ง€์—ฐ, ์žฅ์•  ์‹œ ์ „์ฒด ์„œ๋น„์Šค ์˜ํ–ฅ
์ ํ•ฉํ•œ ์ž‘์—… ๋น„๋™๊ธฐ ๋Œ€๋Ÿ‰ ์ž‘์—…(์ด๋ฉ”์ผ, ๋กœ๊ทธ, ์ด๋ฒคํŠธ) ๋™๊ธฐ ์‹ค์‹œ๊ฐ„ ์š”์ฒญ(์ƒํ’ˆ ์กฐํšŒ, ๊ฒฐ์ œ ํ™•์ธ)
์šด์˜ ๋ถ€๋‹ด RabbitMQ ์„œ๋ฒ„ ์œ ์ง€, ๋ชจ๋‹ˆํ„ฐ๋ง ํ•„์š” ๊ด€๋ฆฌ๊ฐ€ ์ƒ๋Œ€์ ์œผ๋กœ ์‰ฌ์›€

 


๐ŸŽฏ 4. ์‹ค๋ฌด์—์„œ ์–ด๋–ป๊ฒŒ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?

 

โœ… RabbitMQ๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ๋น„๋™๊ธฐ๋กœ ๋Œ€๊ทœ๋ชจ ์ž‘์—…์„ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์˜ˆ: ์ด๋ฉ”์ผ ๋ฐœ์†ก, ์ฃผ๋ฌธ ํ›„ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ, ๋กœ๊ทธ ์ˆ˜์ง‘
  • ์„œ๋น„์Šค ๊ฐ„ ๋А์Šจํ•œ ๊ฒฐํ•ฉ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ
    • ์˜ˆ: ๊ฒฐ์ œ ์™„๋ฃŒ ํ›„ ๋‹ค์–‘ํ•œ ํ›„์† ์ž‘์—…

โœ… FeignClient๋ฅผ ์„ ํƒํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

  • ์‹ค์‹œ๊ฐ„ ์‘๋‹ต์ด ์ค‘์š”ํ•  ๋•Œ
    • ์˜ˆ: ์ƒํ’ˆ ์žฌ๊ณ  ํ™•์ธ, ์‚ฌ์šฉ์ž ์ธ์ฆ
  • ๋น ๋ฅด๊ฒŒ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜๋ฅผ ์‰ฝ๊ฒŒ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ
    • ์˜ˆ: ๋งˆ์ดํฌ๋กœ์„œ๋น„์Šค ๊ฐ„ ๊ฐ„๋‹จํ•œ ๋ฐ์ดํ„ฐ ๊ณต์œ 

 


๐Ÿ“Œ ๋” ๊นŠ์ด ๊ณต๋ถ€ํ•˜๋ฉด ์ข‹์€ ์ฃผ์ œ

  1. Kafka vs RabbitMQ – ๋Œ€์šฉ๋Ÿ‰ ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ ์ฐจ์ด์ 
  2. gRPC vs FeignClient – REST์™€ ๋ฐ”์ด๋„ˆ๋ฆฌ ํ†ต์‹  ๋น„๊ต
  3. Circuit Breaker – ์„œ๋น„์Šค ์žฅ์•  ๋ฐฉ์ง€ ๊ธฐ๋ฒ•
  4. Event-Driven Architecture – ์ด๋ฒคํŠธ ์ค‘์‹ฌ ์•„ํ‚คํ…์ฒ˜ ์„ค๊ณ„