์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ธํ”„๋Ÿฐ ์˜๋ฌธ ๋ธŒ๋žœ๋“œ ๋กœ๊ณ 
์ฑ„๋„ํ†ก ์•„์ด์ฝ˜
BEST

RabbitMQ๋ฅผ ์ด์šฉํ•œ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜ ํ•œ๋ฐฉ์— ํ•ด๊ฒฐํ•˜๊ธฐ

๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋ฐฉ๋ฒ•์ธ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•œ RabbitMQ ํ™œ์šฉ ๋ฐฉ๋ฒ•์„ SpringBoot 3.3 ๊ธฐ๋ฐ˜์œผ๋กœ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํ™œ์šฉ๊นŒ์ง€ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก Toturial ํ˜•ํƒœ๋กœ ์Šต๋“ํ•ฉ๋‹ˆ๋‹ค.

Thumbnail

์ดˆ๊ธ‰์ž๋ฅผ ์œ„ํ•ด ์ค€๋น„ํ•œ
[๋ฐฑ์—”๋“œ, rabbitmq] ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๊ฑธ ๋ฐฐ์šธ ์ˆ˜ ์žˆ์–ด์š”

  • ๊ธฐ์ˆ ๋ฉด์ ‘์—์„œ ๋ฌผ์–ด๋ณด๋Š” ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜์™€ ๋ถ„์‚ฐ์ฒ˜๋ฆฌ์˜ ์ดํ•ด

  • AMQP ํŠน์ง•๊ณผ RabbitMQ์˜ ์ดํ•ด

  • SpringBoot ๊ธฐ๋ฐ˜์˜ RabbitMQ ๋‹จ๊ณ„๋ณ„ ์˜ˆ์ œ ์Šต๋“

  • DB ์—ฐ๋™๊ณผ ๋ฉ”์‹œ์ง€ ํ์˜ Transaction ์ฒ˜๋ฆฌํ•˜๊ธฐ

  • Exchange์™€ Routing Model์˜ ์ดํ•ด

  • Pub/Sub์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋žŒ ์‹œ์Šคํ…œ ๊ตฌํ˜„ํ•˜๊ธฐ

  • Routing Model์„ ํ™œ์šฉํ•œ Log ์ˆ˜์ง‘ํ•˜๊ธฐ

  • Dead Letter Queue์™€ Retry๋ฅผ ์ด์šฉํ•œ ์žฌ์ฒ˜๋ฆฌ ๋ฐฉ์•ˆ

RabbitMQ๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜ ํ•œ๋ฐฉ์— ํ•ด๊ฒฐํ•˜๊ธฐ

๋Œ€์šฉ๋Ÿ‰ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ€์žฅ ๊ธฐ๋ณธ์ด ๋˜๋Š” RabbitMQ๋ฅผ ํ™œ์šฉํ•œ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜์— ๋Œ€ํ•ด ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ€์žฅ ๊ธฐ๋ณธ์ธ ๋ฉ”์‹œ์ง€ ์ „์†ก๋ถ€ํ„ฐ ๊ณ ๊ธ‰ํ™œ์šฉ์ธ Transaction ์ฒ˜๋ฆฌ๊นŒ์ง€ ํ•œ๋ฐฉ์— ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋ณธ ์˜ˆ์ œ์™€ ๊ฐœ๋… ์„ค๋ช…


  • Java์™€ Spring์˜ ๊ธฐ์ดˆ๋งŒ ์žˆ์–ด๋„ ๋”ฐ๋ผ์„œ ์ฝ”๋”ฉํ•˜๋Š”๋ฐ ์ „ํ˜€ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.


  • ๊ธฐ์ดˆ๋ถ€ํ„ฐ ํ™œ์šฉ๊นŒ์ง€ Step by Step ํ˜•ํƒœ๋กœ ๋‹จ๊ณ„๋ณ„ Tutorial ํ•™์Šต์„ ํ†ตํ•ด ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


#RabbitMQ #๋น„๋™๊ธฐ์•„ํ‚คํ…์ฒ˜ #SpringBoot #JPA #MSA

์ด๋Ÿฐ ๋‚ด์šฉ์„ ๋ฐฐ์›Œ์š”

AMQP ์•„ํ‚คํ…์ฒ˜ ์ปจ์…‰

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

AMQP ์ปจ์…‰

Routing Model๊ณผ Exchange ์œ ํ˜•๋ณ„ ์˜ˆ์ œ ๋”ฐ๋ผํ•˜๊ธฐ

ํ˜ผ๋™ํ•˜๊ธฐ ์‰ฌ์šด Routing Model Components์™€ Exchange ์œ ํ˜•์— ๋”ฐ๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์ดˆ๊ธ‰, ์ค‘๊ธ‰, ๊ณ ๊ธ‰ ํ™œ์šฉ๊นŒ์ง€ ์Šคํ… ๋ฐ”์ด ์Šคํ…์œผ๋กœ ๋”ฐ๋ผํ•˜๋ฉฐ ๋ฐฐ์›๋‹ˆ๋‹ค.

FanoutExchange, TopicExchange, DirectExchange, HeaderExchange์˜ ํŠน์ง•๊ณผ ํ™œ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

WebSocket๊ณผ STOMP๋ฅผ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋žŒ ๊ตฌํ˜„

๊ฐ„๋‹จํ•œ ์›น ํŽ˜์ด์ง€์—์„œ WebSocket์„ ์ด์šฉํ•œ ์‹ค์‹œ๊ฐ„ ์•Œ๋ฆผ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ๊ฐœ๋ฐœ์ค‘์— ์ƒ๊ธธ ์ˆ˜ ์žˆ๋Š” ์—๋Ÿฌ์™€ ๊ทธ์— ๋”ฐ๋ฅธ ํ•ด๊ฒฐ์ฑ…์„ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์ดํ•ดํ•˜๊ณ  ํ†ต์‹ ์˜ ๊ฐœ๋…์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•ฉ๋‹ˆ๋‹ค.

#WebSocket #STOMP

WebSocket Pub/Sub process

MSA๋กœ ๊ฐ€๊ธฐ ์œ„ํ•ด ์–ด๋–ค ๋ฐฉ์‹์œผ๋กœ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ํ™œ์šฉํ•ด์„œ Dead Letter๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š”์ง€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

#JPA #MSA #DLQ

ํŠธ๋žœ์žญ์…˜ ์ฒ˜๋ฆฌ ๋ฐฉ์‹์— ๋Œ€ํ•ด์„œ ์‚ดํŽด๋ณด๊ณ  TCC๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ๋Œ€์‚ฌ์™€ ๋ณด์ •์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ˆ˜๊ฐ• ์ „ ์ฐธ๊ณ  ์‚ฌํ•ญ

์‹ค์Šต ํ™˜๊ฒฝ

  • Mac์—์„œ ์‹ค์Šตํ•˜์ง€๋งŒ, RabbitMQ๋Š” ์„ค์น˜๊ฐ€ ์‰ฝ๊ธฐ ๋•Œ๋ฌธ์— ์œˆ๋„์šฐ/๋ฆฌ๋ˆ…์Šค ํ™˜๊ฒฝ์—์„œ๋„ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

  • ์‚ฌ์šฉ ๋„๊ตฌ: Spring Boot 3.3 / ์ตœ์‹  ๋ฒ„์ „์˜ RabbitMQ(4.0.3), IntelliJ

ํ•™์Šต ์ž๋ฃŒ

  • PDF๋กœ ํ•™์Šต์ž๋ฃŒ๊ฐ€ ์ œ๊ณต๋˜๋ฉฐ, ๊ฐ ๋‹จ๊ณ„๋ณ„ ์˜ˆ์ œ๋Š” Github์— ์ฑ•ํ„ฐ๋ณ„ ๋ธŒ๋žœ์น˜๋กœ ๋‚˜๋ˆ  ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

  • ๊ฐ ์ฑ•ํ„ฐ๋ณ„ ๊ฐ•์˜ ์ž๋ฃŒ PDF๊ฐ€ ์ฒจ๋ถ€ ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.

  • ํ•„์š”ํ•œ ์˜ˆ์ œ๊ฐ€ ์ถ”๊ฐ€๋กœ ๋” ์žˆ๋‹ค๋ฉด ํ•™์Šต ๊ฒŒ์‹œํŒ์— ์š”์ฒญํ•ด์ฃผ์„ธ์š”.

์„ ์ˆ˜ ์ง€์‹ ๋ฐ ์œ ์˜์‚ฌํ•ญ

  • Java ๋ฌธ๋ฒ•์˜ ์ดํ•ด

  • Spring Boot์— ๋Œ€ํ•œ ๊ธฐ๋ณธ ์ˆ˜์ค€์˜ ์ดํ•ด, Spring์„ ๋ชฐ๋ผ๋„ ์ฝ”๋“œ๋ฅผ ๋”ฐ๋ผํ•˜๋ฉด์„œ ํ•™์Šต ํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ๋‚˜ ํŠธ๋ž˜ํ”ฝ์„ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•œ ๊ธฐ๋ณธ ์ง€์‹๋“ค์„ ํ•™์Šตํ•ด๋ณด๊ณ ์ž ํ•˜๋Š” ๋ถ„

  • ๋ณธ ๊ฐ•์˜๋Š” ๋”ฐ๋ผํ•˜๊ธฐ๋ฅผ ํ†ตํ•ด ์กฐ๊ธˆ์”ฉ ์˜ˆ์ œ์˜ ๋‹จ๊ณ„๊ฐ€ ์˜ฌ๋ผ๊ฐ€๋Š” ํ˜•ํƒœ์ž…๋‹ˆ๋‹ค. ์ตœ๋Œ€ํ•œ ์ž…๋ฌธ์ž๋„ ์‰ฝ๊ฒŒ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์ƒ์„ธํ•˜๊ฒŒ ์ฝ”๋“œ ๋ ˆ๋ฒจ์—์„œ ์„ค๋ช…์„ ๋“œ๋ฆฌ๋ฏ€๋กœ ๋ฐ˜๋“œ์‹œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœ ๋“œ๋ฆฝ๋‹ˆ๋‹ค.

์ด๋Ÿฐ ๋ถ„๋“ค๊ป˜
์ถ”์ฒœ๋“œ๋ ค์š”!

ํ•™์Šต ๋Œ€์ƒ์€
๋ˆ„๊ตฌ์ผ๊นŒ์š”?

  • ์ทจ์—…, ์ด์ง์„ ์œ„ํ•ด ๊ธฐ๋ณธ์ ์ธ ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜์˜ ๊ฐœ๋…์„ ์žก๊ณ ์ž ํ•˜๋Š” ๋ถ„

  • ๋Œ€์šฉ๋Ÿ‰ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ๊ธฐ๋ณธ์ ์ธ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๋ฐฐ์šฐ๊ณ  ์‹ถ์œผ์‹  ๋ถ„

  • ๋ถ€ํ•˜ ๋ถ„์‚ฐ์„ ์œ„ํ•œ ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ์„ ๊ตฌ์ถ•ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋ถ„

  • ์ž๋ฐ”/์Šคํ”„๋ง์˜ ๊ธฐ๋ณธ ์ง€์‹์„ ์Šต๋“ํ•œ ๋’ค ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•˜๋Š” ๋ถ„

  • ๋น„๋™๊ธฐ ์•„ํ‚คํ…์ฒ˜๋ฅผ ์‹ค ์„œ๋น„์Šค์— ์ ์šฉํ•˜๊ณ ์ž ํ•˜๋Š” ๋ถ„

์„ ์ˆ˜ ์ง€์‹,
ํ•„์š”ํ• ๊นŒ์š”?

  • Java

  • Spring

์•ˆ๋…•ํ•˜์„ธ์š”
์ฝ”๋“œ๋นŒ๋Ÿฐ์ž…๋‹ˆ๋‹ค.

2,099

๋ช…

์ˆ˜๊ฐ•์ƒ

65

๊ฐœ

์ˆ˜๊ฐ•ํ‰

19

๊ฐœ

๋‹ต๋ณ€

5.0

์ 

๊ฐ•์˜ ํ‰์ 

4

๊ฐœ

๊ฐ•์˜

19๋…„์ฐจ ๋ฐฑ์—”๋“œ ๊ฐœ๋ฐœ์ž


  • Kakao (2018 ~ 2024, ๅ‰ ๋ฆฌ๋”)

  • LF (LG Fashion, 2017, IT ํ”Œ๋žซํผํŒ€ ์ฐจ์žฅ)

  • ์ฟ ํŒก (2013~2017, Sr. Software Engineer)

  • ์˜คํ”ˆ์†Œ์Šค ๊ฐœ๋ฐœ์ž ๋Œ€ํšŒ ์€์ƒ (2012. ์ง€์‹๊ฒฝ์ œ๋ถ€, NIPA)

์ฃผ์š” ๋ถ„์•ผ
Java, Spring, MSA ํ™˜๊ฒฝ์—์„œ ์˜ค๋žœ ์‹œ๊ฐ„ ์ผ์„ ํ•˜์˜€์Šต๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ๋ฐ ๋งˆ์ดํฌ๋กœ ์„œ๋น„์Šค ์•„ํ‚คํ…์ณ ์„ค๊ณ„, ๋ณต์žกํ•œ ๋„๋ฉ”์ธ์˜ ์—”ํ‹ฐํ‹ฐ ์„ค๊ณ„ ๊ฒฝํ—˜๊ณผ ํŒ€์„ ์ด๋Œ์–ด๋ณธ ๊ฒฝํ—˜์„ ํ†ตํ•ด ๊ธฐ์ˆ ์  ์ง€์‹๊ณผ 10๋…„ ์ด์ƒ์˜ ๋ฉด์ ‘๊ด€ ๊ฒฝํ—˜์„ ํ†ตํ•ด ์ธํ„ฐ๋ทฐ๋ฅผ ์ค€๋น„ํ•˜๋Š” ๋ฐฉ๋ฒ•๊ณผ ์ปค๋ฆฌ์–ด์˜ ๋กœ๋“œ๋งต ๋ฐฉํ–ฅ์„ ์žก๋Š”๋ฐ ๋„์›€์„ ๋“œ๋ฆฌ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.


๊ฐ•์˜ ๊ฒฝ๋ ฅ

  • 2024.11 ๋Œ€๊ตฌ๋Œ€ํ•™๊ต ๊ฒฝ์‚ฐ์ด๋…ธ๋ฒ ์ด์…˜ ์•„์นด๋ฐ๋ฏธ ์ทจ์—… ํŠน๊ฐ•

  • 2024.10 ํ•œ๋น›๋ฏธ๋””์–ด ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ทจ์—… ์„ธ๋ฏธ๋‚˜ 2์ฐจ ํŠน๊ฐ•

  • 2024.09 ๋ถ€์‚ฐ๋Œ€ํ•™๊ต SW์œตํ•ฉ๊ต์œก์› ์ทจ์—… ํŠน๊ฐ•

  • 2024.04 ํ•œ๋น›๋ฏธ๋””์–ด ์ฃผ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ทจ์—… ์„ธ๋ฏธ๋‚˜ ํŠน๊ฐ•

     

์ €์„œ (๊ฐœ๋ฐœ์ž ๊ธฐ์ˆ  ๋ฉด์ ‘ ๋…ธํŠธ, ํ•œ๋น›๋ฏธ๋””์–ด, 2024.03)

  • ๊ต๋ณด๋ฌธ๊ณ  ์‹ค์‹œ๊ฐ„ ๊ฒ€์ƒ‰ 1์œ„ (2024.04.07)

๋”๋ณด๊ธฐ

์ปค๋ฆฌํ˜๋Ÿผ

์ „์ฒด

22๊ฐœ โˆ™ (5์‹œ๊ฐ„ 4๋ถ„)

ํ•ด๋‹น ๊ฐ•์˜์—์„œ ์ œ๊ณต:

์ˆ˜์—…์ž๋ฃŒ
๊ฐ•์˜ ๊ฒŒ์‹œ์ผ: 
๋งˆ์ง€๋ง‰ ์—…๋ฐ์ดํŠธ์ผ: 

์ˆ˜๊ฐ•ํ‰

์•„์ง ์ถฉ๋ถ„ํ•œ ํ‰๊ฐ€๋ฅผ ๋ฐ›์ง€ ๋ชปํ•œ ๊ฐ•์˜์ž…๋‹ˆ๋‹ค.
๋ชจ๋‘์—๊ฒŒ ๋„์›€์ด ๋˜๋Š” ์ˆ˜๊ฐ•ํ‰์˜ ์ฃผ์ธ๊ณต์ด ๋˜์–ด์ฃผ์„ธ์š”!