๐ 1. RabbitMQ – ๋ฉ์์ง๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ์ฐ์ฒด๋ถ
๐ RabbitMQ๋?
RabbitMQ๋ ์๋น์ค์ ์๋น์ค ๊ฐ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋๋ก ๋๋ **๋ฉ์์ง ๋ธ๋ก์ปค(Message Broker)**์
๋๋ค.
์ฐ์ฒด๋ถ์ฒ๋ผ ํ ๊ณณ์์ ๋ณด๋ธ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๋ค๋ฅธ ๊ณณ์ผ๋ก ์ ๋ฌํด์ฃผ๋ ์ญํ ์ ํด์.
๐ง ์ RabbitMQ๊ฐ ํ์ํ ๊น์?
- ์๋น์ค ๊ฐ์ ์ง์ ์ฐ๊ฒฐ ๋ฌธ์
- ์๋น์ค A๊ฐ ์๋น์ค B์๊ฒ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ผ ๋, B๊ฐ ๋ฌธ์ ๊ฐ ์๊ธฐ๋ฉด A๋ ์ํฅ์ ๋ฐ์์.
- RabbitMQ๋ ์ค๊ฐ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ๋์ ์ ๋ฌํด์ฃผ๊ธฐ ๋๋ฌธ์ ์๋น์ค A๋ B์ ์ํ๋ฅผ ์ ๊ฒฝ ์ธ ํ์๊ฐ ์์ด์.
- ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ์ฆ์ ์๋ต์ด ํ์ํ์ง ์์ ์์ (์: ์ด๋ฉ์ผ ์ ์ก, ๋ก๊ทธ ์ ์ฅ)์ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํด ์ฑ๋ฅ์ ๋์ฌ์ค์.
๐ RabbitMQ์ ์ฃผ์ ๊ฐ๋
- ํ๋ก๋์(Producer): ๋ฉ์์ง๋ฅผ ๋ณด๋ด๋ ์ญํ (์: ์ฃผ๋ฌธ ์์คํ ์์ ์ฃผ๋ฌธ ์ ๋ณด๋ฅผ ์ ๋ฌ)
- ํ(Queue): ๋ฉ์์ง๋ฅผ ์ ์ ๋ณด๊ดํ๋ ์ ์ฅ์
- ์ปจ์๋จธ(Consumer): ํ์์ ๋ฉ์์ง๋ฅผ ๊ฐ์ ธ์ ์ฒ๋ฆฌํ๋ ์ญํ (์: ์ด๋ฉ์ผ ์ ์ก ์๋น์ค)
- ์ต์ค์ฒด์ธ์ง(Exchange): ๋ฉ์์ง๋ฅผ ์ด๋ป๊ฒ ํ์ ๋ณด๋ผ์ง ๊ฒฐ์ ํ๋ ๋ผ์ฐํฐ ์ญํ
๐ RabbitMQ์ ๋์ ํ๋ฆ
- ํ๋ก๋์๊ฐ ๋ฉ์์ง๋ฅผ RabbitMQ์๊ฒ ๋ณด๋
- RabbitMQ๋ ์ต์ค์ฒด์ธ์ง๋ฅผ ํตํด ํ์ ๋ฉ์์ง๋ฅผ ๋ณด๊ด
- ์ค๋น๋ ์ปจ์๋จธ๊ฐ ํ์์ ๋ฉ์์ง๋ฅผ ๊บผ๋ด ์ฒ๋ฆฌ
- ๋ฉ์์ง ์ฒ๋ฆฌ๊ฐ ๋๋๋ฉด **ACK(ํ์ธ ์๋ต)**์ ๋ณด๋
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ
- ํ๋ก๋์ = ํ๋ฐฐ๋ฅผ ๋ณด๋ด๋ ์ฌ๋
- ํ = ํ๋ฐฐ ์์๊ฐ ์์ด๋ ์ฐฝ๊ณ
- ์ปจ์๋จธ = ํ๋ฐฐ๋ฅผ ๋ฐฐ๋ฌํ๋ ์ฌ๋
๐ ๏ธ RabbitMQ์ ์ฃผ์ ๊ธฐ๋ฅ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ
- ์๊ฐ์ด ์ค๋ ๊ฑธ๋ฆฌ๋ ์์ (์: ์ด๋ฏธ์ง ์ฒ๋ฆฌ)์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ํ
- ๋ฉ์์ง ๋ณด์ฅ
- ๋ฉ์์ง๊ฐ ์ ์ค๋์ง ์๋๋ก ์์ ํ๊ฒ ๋ณด๊ด
- ๋ก๋ ๋ฐธ๋ฐ์ฑ
- ์ฌ๋ฌ ์ปจ์๋จธ๊ฐ ๋์์ ์์ ์ ๋๋ ์ ์ฒ๋ฆฌ (๋ณ๋ ฌ ์ฒ๋ฆฌ)
- ์ง์์ฑ(Persistence)
- ์์คํ ์ด ์ฌ์์๋์ด๋ ๋ฉ์์ง๋ฅผ ์ ์ง ๊ฐ๋ฅ
๐ RabbitMQ ์ฌ์ฉ ์ฌ๋ก
- ๋๋์ ์ด๋ฉ์ผ ๋ฐ์ก
- ์ฌ์ฉ์ ์๋ฐฑ๋ง ๋ช ์๊ฒ ์ด๋ฉ์ผ์ ๋ณด๋ผ ๋, RabbitMQ๊ฐ ๊ฐ ์ด๋ฉ์ผ ๋ฐ์ก ์์ฒญ์ ๊ด๋ฆฌ
- ๋ก๊ทธ ์์ง
- ์ฌ๋ฌ ์๋น์ค์์ ๋ฐ์ํ๋ ๋ก๊ทธ๋ฅผ ํ๋์ ์์คํ ์ ๋ชจ์์ ์ ์ฅ
- ๊ฒฐ์ ์์คํ
- ๊ฒฐ์ ์์ฒญ์ ํ์ ์ ์ฅํ๊ณ ์์ฐจ์ ์ผ๋ก ์ฒ๋ฆฌ
๐ 2. FeignClient – ์๋น์ค ๊ฐ ์ ํ๊ธฐ
๐ FeignClient๋?
FeignClient๋ ๋ง์ดํฌ๋ก์๋น์ค ์ํคํ
์ฒ์์ ์๋น์ค ๊ฐ HTTP ํต์ ์ ์ฝ๊ฒ ํด์ฃผ๋ ๋๊ตฌ์
๋๋ค.
์ฌ๋ฌ ์๋น์ค๊ฐ ์๋ก ํ์ํ ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ์ง์ HTTP ์์ฒญ์ ๋ง๋ค์ง ์๊ณ ์ธํฐํ์ด์ค๋ก ๊ฐํธํ๊ฒ ์ฒ๋ฆฌํ ์ ์์ด์.
๐ FeignClient์ ์ฃผ์ ๊ฐ๋
- ํด๋ผ์ด์ธํธ(Client): ์์ฒญ์ ๋ณด๋ด๋ ์๋น์ค (์: ์ฃผ๋ฌธ ์๋น์ค)
- ์๋ฒ(Server): ์์ฒญ์ ์ฒ๋ฆฌํ๊ณ ์๋ตํ๋ ์๋น์ค (์: ์ฌ๊ณ ์๋น์ค)
- REST API: ์๋น์ค ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ ๊ท์น (์: GET, POST ์์ฒญ)
๐ FeignClient์ ๋์ ํ๋ฆ
- ์๋น์ค A๊ฐ ์๋น์ค B์ ๋ฐ์ดํฐ๋ฅผ ํ์๋ก ํจ
- FeignClient๊ฐ ์๋น์ค B๋ก HTTP ์์ฒญ(GET, POST)์ ๋ณด๋
- ์๋น์ค B๊ฐ ๋ฐ์ดํฐ๋ฅผ ์๋ต์ผ๋ก ๋ฐํ
- FeignClient๊ฐ JSON ๋ฐ์ดํฐ๋ฅผ Java ๊ฐ์ฒด๋ก ๋ณํํด ๋ฐํ
๐ ๋น์ ๋ก ์ดํดํ๊ธฐ
- ์๋น์ค A = ์ ํ๋ฅผ ๊ฑฐ๋ ์ฌ๋
- ์๋น์ค B = ์ ํ๋ฅผ ๋ฐ๋ ์ฌ๋
- FeignClient = ์ ํ๊ธฐ
๐ ๏ธ FeignClient์ ์ฃผ์ ๊ธฐ๋ฅ
- ๊ฐํธํ HTTP ํต์
- ์ธํฐํ์ด์ค๋ก HTTP ์์ฒญ์ ์ ์ํ๊ณ ์ฝ๊ฒ ํธ์ถ ๊ฐ๋ฅ
- ์๋น์ค ๋์ค์ปค๋ฒ๋ฆฌ ์ฐ๋
- Eureka, Consul๊ณผ ์ฐ๋ํด ์๋น์ค ์์น ์๋ ํ์
- ์ค๋ฅ ์ฒ๋ฆฌ
- ์์ฒญ ์คํจ ์ ์ฌ์๋ ๋ก์ง ๊ตฌํ ๊ฐ๋ฅ
- ๋ก๋ ๋ฐธ๋ฐ์ฑ
- ์ฌ๋ฌ ์๋ฒ์ ๋ถํ๋ฅผ ๊ณ ๋ฅด๊ฒ ๋ถ๋ฐฐ
๐ FeignClient ์ฌ์ฉ ์ฌ๋ก
- ์ฌ์ฉ์ ์ ๋ณด ์กฐํ
- ์ฌ์ฉ์ ์๋น์ค์์ ํ๋กํ ์ ๋ณด๋ฅผ ์ฃผ๋ฌธ ์๋น์ค๋ก ์ ๋ฌ
- ์ฌ๊ณ ํ์ธ
- ์ฃผ๋ฌธ ์์ฑ ์ ์ํ์ ์ฌ๊ณ ์๋์ ์ฌ๊ณ ์๋น์ค์์ ํ์ธ
- ๊ฒฐ์ ์์ฒญ
- ์ฃผ๋ฌธ ์๋น์ค์์ ๊ฒฐ์ ์๋น์ค๋ก ๊ฒฐ์ ์ ๋ณด๋ฅผ ์ ๋ฌ
๐ RabbitMQ vs FeignClient ์ฐจ์ด์ ๋น๊ต
| ํญ๋ชฉ | ๐ RabbitMQ | ๐ FeignClient |
| ๋ชฉ์ | ๋น๋๊ธฐ ๋ฉ์์ง ์ ์ก | REST API ๊ธฐ๋ฐ ๋๊ธฐ ์์ฒญ |
| ๋ฐฉ์ | ๋ฉ์์ง ํ๋ฅผ ํตํ ๋น๋๊ธฐ ์ฒ๋ฆฌ | HTTP ํ๋กํ ์ฝ ๊ธฐ๋ฐ ๋๊ธฐ ํธ์ถ |
| ์ฌ์ฉ ์์ | ๋์ฉ๋ ๋ฐ์ดํฐ, ๋น๋๊ธฐ ์์ ํ์ํ ๋ | ์๋น์ค ๊ฐ ์ค์๊ฐ ์์ฒญ·์๋ต ํ์ํ ๋ |
| ์๋ | ๋๋ฆฌ์ง๋ง ๋น๋๊ธฐ๋ก ๋ณ๋ ฌ ์ฒ๋ฆฌ ๊ฐ๋ฅ | ๋น ๋ฅด์ง๋ง ์์ฒญ-์๋ต์ด ์๋ฃ๋ ๋๊น์ง ๋๊ธฐ |
| ์ ๋ขฐ์ฑ | ๋ฉ์์ง ๋๋ฝ ๋ฐฉ์ง, ์ฌ์๋ ๊ฐ๋ฅ | ์์ฒญ ์คํจ ์ ์ง์ ์ฌ์๋ ๊ตฌํ ํ์ |
| ํ์ฅ์ฑ | ์ฌ๋ฌ ํ์ ์ปจ์๋จธ๋ก ํ์ฅ ์ฌ์ | ๋ถํ๊ฐ ์ปค์ง๋ฉด ๋ณ๋ ๋ก๋๋ฐธ๋ฐ์ ํ์ |
| ๊ตฌํ ๋ณต์ก๋ | ์ค์ ๊ณผ ๊ตฌ์กฐ๊ฐ ๋ณต์กํจ | ์ธํฐํ์ด์ค ์ ์๋ก ๊ฐ๋จํ๊ฒ ๊ตฌํ |
| ๊ธฐ์ ์คํ | RabbitMQ ์๋ฒ, AMQP ํ๋กํ ์ฝ ์ฌ์ฉ | HTTP/HTTPS, RESTful API ๊ธฐ๋ฐ |
๐ ์ด๋ค ๊ฒฝ์ฐ์ RabbitMQ์ FeignClient๋ฅผ ์ฌ์ฉํ ๊น?
โ RabbitMQ๊ฐ ์ ํฉํ ๊ฒฝ์ฐ
- ๋น๋๊ธฐ ์ฒ๋ฆฌ๊ฐ ํ์ํ ๋
- ์: ์ด๋ฉ์ผ ๋ฐ์ก, ๋ก๊ทธ ์์ง, ๊ฒฐ์ ์น์ธ ํ ์๋ฆผ
- ๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณ๋ ฌ๋ก ์ฒ๋ฆฌํ๊ณ ์ถ์ ๋
- ์: ์ฌ์ฉ์ ์์ฒญ์ ๋ชจ์์ ๋ฐฐ์น๋ก ์ฒ๋ฆฌ
- ์๋น์ค ๊ฐ ๊ฒฐํฉ์ ๋์จํ๊ฒ ์ ์งํ๊ณ ์ถ์ ๋
- ์: ์๋น์ค A๊ฐ ๋ค์ด๋์ด๋ ์๋น์ค B๋ ๋ฉ์์ง๋ฅผ ๋ฐ์ ๊ณ์ ์คํ
โ FeignClient๊ฐ ์ ํฉํ ๊ฒฝ์ฐ
- ์ฆ๊ฐ์ ์ธ ์๋ต์ด ํ์ํ ๋
- ์: ์ฌ์ฉ์ ์ธ์ฆ, ์ํ ์ ๋ณด ์กฐํ
- ์๋น์ค ๊ฐ ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ํ์ธํด์ผ ํ ๋
- ์: ์ฃผ๋ฌธ ์์ฑ ์ ์ฌ๊ณ ํ์ธ
- ๊ตฌํ์ ๊ฐ๋จํ๊ฒ ํ๊ณ ์ถ์ ๋
- ์: 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๋ฅผ ์ ํํด์ผ ํ๋ ๊ฒฝ์ฐ
- ์ค์๊ฐ ์๋ต์ด ์ค์ํ ๋
- ์: ์ํ ์ฌ๊ณ ํ์ธ, ์ฌ์ฉ์ ์ธ์ฆ
- ๋น ๋ฅด๊ฒ ๊ฐ๋ฐํ๊ณ ์ ์ง๋ณด์๋ฅผ ์ฝ๊ฒ ํ๊ณ ์ถ์ ๋
- ์: ๋ง์ดํฌ๋ก์๋น์ค ๊ฐ ๊ฐ๋จํ ๋ฐ์ดํฐ ๊ณต์
๐ ๋ ๊น์ด ๊ณต๋ถํ๋ฉด ์ข์ ์ฃผ์
- Kafka vs RabbitMQ – ๋์ฉ๋ ์ด๋ฒคํธ ์ฒ๋ฆฌ ์ฐจ์ด์
- gRPC vs FeignClient – REST์ ๋ฐ์ด๋๋ฆฌ ํต์ ๋น๊ต
- Circuit Breaker – ์๋น์ค ์ฅ์ ๋ฐฉ์ง ๊ธฐ๋ฒ
- Event-Driven Architecture – ์ด๋ฒคํธ ์ค์ฌ ์ํคํ ์ฒ ์ค๊ณ
'๊ณต๋ถ > TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| [20250314] Kafka์ RabbitMQ ์ฝ๊ฒ ์ดํดํด๋ณด์! (0) | 2025.03.14 |
|---|---|
| [20250313] Kafka ํ๊ธฐ (0) | 2025.03.14 |
| [20250311] RabbitMQ ํ๊ธฐ (0) | 2025.03.11 |
| [20250310] 2PC๋ฅผ ์ฌ์ฉํ ํธ๋์ญ์ ์ฒ๋ฆฌ ํ๊ธฐ (0) | 2025.03.10 |
| [20250308] ๋ฐ์ดํฐ ์ผ๊ด์ฑ ์ ์ง 2 ํ๊ธฐ (0) | 2025.03.08 |