Message Broker Introduction.md - 100-hours-a-week/KTB4-17th-wiki GitHub Wiki

๋ฉ”์‹œ์ง€ ๋ธŒ๋กœ์ปค ๋„์ž… ๊ทผ๊ฑฐ

์ฑ„ํŒ… ์„œ๋ฒ„๊ฐ€ ๋‘ ๋Œ€์ด๋ฉด ์‚ฌ์šฉ์ž A์™€ B๊ฐ€ ์„œ๋กœ ๋‹ค๋ฅธ ์„œ๋ฒ„์— WebSocket์œผ๋กœ ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค. A์˜ ์„œ๋ฒ„๋Š” B์˜ ์—ฐ๊ฒฐ์„ ์ง์ ‘ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ RDS์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•˜๋Š” ๊ฒƒ๋งŒ์œผ๋กœ๋Š” B์˜ ์„œ๋ฒ„์— ์ƒˆ ๋ฉ”์‹œ์ง€๋ฅผ ์ฆ‰์‹œ ์•Œ๋ฆด ์ˆ˜ ์—†๋‹ค.

๋ฉ”์‹œ์ง€ ์ €์žฅ์„ ํ™•์ •ํ•œ ์„œ๋ฒ„๊ฐ€ ๋ฐฉ,๋ฉ”์‹œ์ง€,์ˆ˜์‹ ์ž์˜ ID์™€ ๋ณธ๋ฌธ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๋‘ ์ฑ„ํŒ… ์„œ๋ฒ„๊ฐ€ ์ด๋ฅผ ๊ตฌ๋…ํ•œ๋‹ค. ๊ฐ ์„œ๋ฒ„๋Š” ์ž์‹ ์˜ ๋กœ์ปฌ WebSocket ์—ฐ๊ฒฐ์— ์ˆ˜์‹ ์ž๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•ด ์ „๋‹ฌํ•œ๋‹ค. ๋ฉ”์‹œ์ง€ ์›๋ณธ์€ RDS์— ๋‘”๋‹ค. ์ด๋ฒคํŠธ์— ์‹ค๋ฆฐ ๋ณธ๋ฌธ์€ ์ •์ƒ ๊ฒฝ๋กœ์—์„œ ์ฆ‰์‹œ ์ „๋‹ฌํ•˜๊ธฐ ์œ„ํ•œ ์ „๋‹ฌ์šฉ ๋ณต์‚ฌ๋ณธ์ด๊ณ  ์›๋ณธ์€ ํ•ญ์ƒ RDS์— ์žˆ๋‹ค.

sequenceDiagram
    autonumber
    participant A as ์‚ฌ์šฉ์ž A
    participant S1 as ์ฑ„ํŒ… ์„œ๋ฒ„ 1
    participant R as RDS
    participant V as Valkey Pub/Sub
    participant S2 as ์ฑ„ํŒ… ์„œ๋ฒ„ 2
    participant B as ์‚ฌ์šฉ์ž B

    A->>S1: ๋ฉ”์‹œ์ง€ ์ „์†ก
    S1->>R: ๋ฉ”์‹œ์ง€ ์ €์žฅ ๋ฐ commit
    R-->>S1: ์ €์žฅ ์™„๋ฃŒ
    S1->>V: ๋ฐฉ IDยท๋ฉ”์‹œ์ง€ IDยท์ˆ˜์‹ ์ž IDยท๋ณธ๋ฌธ ๋ฐœํ–‰
    V-->>S1: ์ด๋ฒคํŠธ ์ „๋‹ฌ
    V-->>S2: ์ด๋ฒคํŠธ ์ „๋‹ฌ
    S1->>S1: ๋กœ์ปฌ WebSocket ์—ฐ๊ฒฐ ํ™•์ธ
    S2->>S2: ๋กœ์ปฌ WebSocket ์—ฐ๊ฒฐ ํ™•์ธ
    S2-->>B: ์ด๋ฒคํŠธ ๋ณธ๋ฌธ ๊ทธ๋Œ€๋กœ ์ „๋‹ฌ (RDS ์กฐํšŒ ์—†์Œ)

    Note over V,S2: ๊ตฌ๋…์ด ๋Š๊ธฐ๋ฉด ์ด๋ฒคํŠธ๋Š” ๋ณด๊ด€๋˜์ง€ ์•Š์Œ
    S2->>V: ์žฌ๊ตฌ๋…
    S2->>R: ๋งˆ์ง€๋ง‰ ์ˆ˜์‹  ๋ฉ”์‹œ์ง€ ์ดํ›„ ์กฐํšŒ
    R-->>S2: ๋ˆ„๋ฝ ๋ฉ”์‹œ์ง€ ๋ฐ˜ํ™˜
    S2-->>B: ๋ˆ„๋ฝ ๋ฉ”์‹œ์ง€ ์ „๋‹ฌ (๋ฉ”์‹œ์ง€ ID๋กœ ์ค‘๋ณต ์ œ๊ฑฐ)

๋ฉ”์‹œ์ง€ ์ „๋‹ฌ ํ๋ฆ„

  1. ์‚ฌ์šฉ์ž A๊ฐ€ ์ฑ„ํŒ… ์„œ๋ฒ„ 1๋กœ ๋ฉ”์‹œ์ง€๋ฅผ ์ „์†กํ•œ๋‹ค.
  2. ์ฑ„ํŒ… ์„œ๋ฒ„ 1์ด RDS์— ๋ฉ”์‹œ์ง€๋ฅผ ์ €์žฅํ•œ๋‹ค.
  3. ์ €์žฅ์ด ํ™•์ •๋˜๋ฉด ์ฑ„ํŒ… ์„œ๋ฒ„ 1์ด Valkey Pub/Sub์—๋ฐฉ,๋ฉ”์‹œ์ง€,์ˆ˜์‹ ์ž์˜ ID์™€ ๋ฉ”์„ธ์ง€ ๋‚ด์šฉ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•œ๋‹ค.
  4. ๋‘ ์ฑ„ํŒ… ์„œ๋ฒ„๊ฐ€ ์ด๋ฒคํŠธ๋ฅผ ์ˆ˜์‹ ํ•˜๊ณ  ๊ฐ์ž ์ž์‹ ์˜ ๋กœ์ปฌ WebSocket ์—ฐ๊ฒฐ์„ ํ™•์ธํ•œ๋‹ค.
  5. ์ˆ˜์‹ ์ž B๊ฐ€ ์ฑ„ํŒ… ์„œ๋ฒ„ 2์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ์œผ๋ฉด ์ฑ„ํŒ… ์„œ๋ฒ„ 2๊ฐ€ ์ด๋ฒคํŠธ์— ์‹ค๋ฆฐ ๋ณธ๋ฌธ์„ ๊ทธ๋Œ€๋กœ B์—๊ฒŒ ์ „๋‹ฌํ•œ๋‹ค. ์ด๋•Œ๋Š” RDS๋ฅผ ๋‹ค์‹œ ์กฐํšŒํ•˜์ง€ ์•Š๋Š”๋‹ค.

์ „๋‹ฌ ์ •์ฑ…

์ •์ƒ ์ƒํƒœ์—์„œ๋Š” ์˜จ๋ผ์ธ ์•Œ๋ฆผ์„ ์ฆ‰์‹œ ์ „๋‹ฌํ•œ๋‹ค. ๋‹ค๋งŒ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์˜ ๊ตฌ๋…์ด ๋Š๊ธด ๋™์•ˆ ์ด๋ฒคํŠธ๋ฅผ ๋ณด๊ด€ํ•˜๊ฑฐ๋‚˜ ์žฌ์ „์†กํ•˜์ง€ ์•Š๊ณ  RDS๋ฅผ ์กฐํšŒํ•ด ํ•œ๋‹ค.

  • ์ฑ„ํŒ…์„œ๋ฒ„์™€ ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค๊ฐ€ ๋‹ค์‹œ ์—ฐ๊ฒฐ๋˜๋Š” ์ˆœ๊ฐ„
  • ์‚ฌ์šฉ์ž WebSocket์ด ์žฌ์—ฐ๊ฒฐ๋œ ์งํ›„
  • ์‚ฌ์šฉ์ž๊ฐ€ ์ฑ„ํŒ…๋ฐฉ์„ ๋‹ค์‹œ ์—ฐ ์งํ›„

๊ฐ ์กฐํšŒ๋Š” ์‚ฌ์šฉ์ž์˜ ๋งˆ์ง€๋ง‰ ์ˆ˜์‹  ๋ฉ”์‹œ์ง€ ID ๋˜๋Š” ๋ฐฉ๋ณ„ ๋งˆ์ง€๋ง‰ ๋ฉ”์‹œ์ง€ ์ˆœ๋ฒˆ ์ดํ›„๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์ด๋ฏธ ์ „๋‹ฌ๋œ ๋ฉ”์‹œ์ง€๋Š” ๋ฉ”์‹œ์ง€ ID๋กœ ์ค‘๋ณต ์ œ๊ฑฐํ•œ๋‹ค. ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์— ์ฑ„ํŒ…์˜ ๋ณธ๋ฌธ์„ ๋‹ด์ง€ ์•Š๋Š” ์ด์œ ๋Š” ์ฑ„ํŒ… ๋ฉ”์„ธ์ง€๋Š” ์œ ์‹ค๋˜๋ฉด ์•ˆ๋˜๋Š”๋ฐ pub/sub์€ ๊ตฌ๋…์ด ์—†์–ด์ง€๋ฉด ๋ฐ์ดํ„ฐ๊ฐ€ ๋ฒ„๋ ค์ง€๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ ์œ ์‹ค์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์–ด์„œ RDS์— ์ €์žฅํ•ฉ๋‹ˆ๋‹ค. Valkey Pub/Sub ์ „๋‹ฌ ํŠน์„ฑ

๋ณธ๋ฌธ์„ ์ด๋ฒคํŠธ์— ์‹ฃ๋Š” ์ด์œ 

๋ฉ”์‹œ์ง€ ์›๋ณธ์€ ์œ ์‹ค๋˜๋ฉด ์•ˆ ๋˜๋Š” ๋ฐ์ดํ„ฐ์ด๋ฏ€๋กœ RDS์— ์ €์žฅํ•œ๋‹ค. ๊ทธ ์œ„์—์„œ ์ •์ƒ ์ „๋‹ฌ ๊ฒฝ๋กœ์—๋Š” ๋ณธ๋ฌธ์„ ์ด๋ฒคํŠธ์— ํ•จ๊ป˜ ์‹ค์–ด RDS ์žฌ์กฐํšŒ ์—†์ด ์ฆ‰์‹œ ์ „๋‹ฌํ•œ๋‹ค. ์ด๋ฒคํŠธ์˜ ๋ณธ๋ฌธ์€ ์ „๋‹ฌ์šฉ ๋ณต์‚ฌ๋ณธ์ด๊ณ  ์›๋ณธ์€ RDS์— ์žˆ์œผ๋ฏ€๋กœ ์ด๋ฒคํŠธ๊ฐ€ ์œ ์‹ค๋˜์–ด๋„ ๋ฐ์ดํ„ฐ๋Š” ๋ณด์กด๋  ์ˆ˜ ์žˆ๋‹ค. ๋ฉ”์„ธ์ง€ ๋ธŒ๋กœ์ปค์—์„œ ๋ฉ”์„ธ์ง€๊ฐ€ ์œ ์‹ค๋œ ๊ฒฝ์šฐ๋Š” RDS ์›๋ณธ์—์„œ ๋‚ด์šฉ์„ ๊ฐ€์ ธ์˜จ๋‹ค. ID๋งŒ ์‹ฃ๊ณ  ์ „๋‹ฌ ๋•Œ๋งˆ๋‹ค RDS๋ฅผ ๋‹ค์‹œ ์ฝ์œผ๋ฉด ์‹ค์‹œ๊ฐ„ ์ „๋‹ฌ ๊ฒฝ๋กœ์— ๋ฉ”์‹œ์ง€๋งˆ๋‹ค RDS SELECT๊ฐ€ ๋ถ™์–ด ์ง€์—ฐ๊ณผ RDS ๋ถ€ํ•˜๊ฐ€ ๋Š˜์–ด๋‚  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฉ”์„ธ์ง€๋ฅผ ๋ธŒ๋กœ์นด์—์‹ค์œผ๋ฉด ์ •์ƒ ๊ฒฝ๋กœ์—์„œ DB ์ฝ๊ธฐ๋ฅผ ์—†์•จ ์ˆ˜ ์žˆ๋‹ค.