๐Ÿ“š Study/TLDR

[WebDev] Patterns for building realtime features

์ ์ด 2025. 2. 12. 21:53
๋ฐ˜์‘ํ˜•

https://zknill.io/posts/patterns-for-building-realtime/?utm_source=tldrwebdev

 

Patterns for building realtime features

Realtime features make apps feel modern, collaborative, and up-to-date. The features predominantly require sharing changes triggered by one user to other users, as the changes are happening. This typically means your server needs to send data to some set o

zknill.io


์‹ค์‹œ๊ฐ„ ๊ธฐ๋Šฅ์€ ์•ฑ์„ ๋” ํ˜„๋Œ€์ ์ด๊ณ , ํ˜‘์—…์ ์ด๋ฉฐ, ์ตœ์‹  ์ƒํƒœ๋กœ ์œ ์ง€๋˜๋„๋ก ํ•ด์ค€๋‹ค. ์ด ๊ธฐ๋Šฅ์€ ์ฃผ๋กœ ํ•œ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐœ์ƒ์‹œํ‚จ ๋ณ€๊ฒฝ์„ ๋‹ค๋ฅธ ์‚ฌ์šฉ์ž๋“ค์—๊ฒŒ ์‹ค์‹œ๊ฐ„์œผ๋กœ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์„ ํ•„์š”๋กœํ•œ๋‹ค.

์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋ฒ„๊ฐ€ ํŠน์ • ํด๋ผ์ด์–ธํŠธ๋“ค์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ด์•ผ ํ•˜๋Š”๋ฐ, ๊ทธ ํด๋ผ์ด์–ธํŠธ๋“ค์€ ์ž์‹ ๋“ค์ด ๋ฐ์ดํ„ฐ๋ฅผ ๋†“์น˜๊ณ  ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

์ด ํŒจํ„ด๋“ค์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์•Œ๋ฆด ์ˆ˜ ์žˆ๋Š” connection์— ์˜์กดํ•œ๋‹ค. ์ด connection์€ ์›น์†Œ์ผ“, sse, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ ๋˜๋Š” polling์ผ ์ˆ˜ ์žˆ๋‹ค. ์ด connection์€ ๋‹จ์ˆœํžˆ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒˆ๋กœ์šด ๋ฐ์ดํ„ฐ๊ฐ€ ์žˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์ง€ ๋ชปํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋Š” ์žˆ๋„๋ก ํ•˜๋ฉด ๋œ๋‹ค.

 

Patterns

Poke / Pull

`poke/pull` ์€ ๊ธฐ์กด ์•ฑ๊ณผ ํ˜ธํ™˜๋  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์žฅ ์‰ฌ์šด ๋ฐฉ๋ฒ•์ด๋‹ค. ์„œ๋ฒ„์—์„œ update๊ฐ€ ์ผ์–ด๋‚ฌ์„ ๋•Œ, ์ด๋ฅผ subscribeํ•˜๊ณ  ์žˆ๋Š” ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ƒˆ๋กœ์šด ๋ณ€๊ฒฝ์„ ๋ฐ˜์˜ํ•˜๋ผ๊ณ  ์•Œ๋ฆฌ๋Š” `poke`๊ฐ€ ์ „์†ก๋œ๋‹ค.

ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ด ์•Œ๋ฆผ์„ ๋ฐ›์œผ๋ฉด, ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ `pull`ํ•˜๊ธฐ ์œ„ํ•œ ์š”์ฒญ์„ ์„œ๋ฒ„์— ๋ณด๋‚ธ๋‹ค. poke/pull ์€ ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ๊ฐ€์ ธ๊ฐ€๊ธฐ ์œ„ํ•œ ์—”๋“œ ํฌ์ธํŠธ๋ฅผ ๊ธฐ์กด์— ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ธฐ์กด ์•ฑ๊ณผ์˜ ํ˜ธํ™˜์— ์œ ๋ฆฌํ•˜๋‹ค. ์ด๋ฏธ ์กด์žฌํ•˜๋Š” `pull API`๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— `poke`๋งŒ ๊ตฌํ˜„ํ•˜๋ฉด ๋œ๋‹ค.

์ด ํŒจํ„ด์˜ ๋ฌธ์ œ์ ์€ fan-out์ด๋‹ค. ์„œ๋ฒ„์— ํ•˜๋‚˜์˜ ๋ณ€๊ฒฝใ…‡๋งŒ ์ผ์–ด๋‚˜๋„, ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ์— ๋Œ€ํ•ด fan-out์ด ์ผ์–ด๋‚œ๋‹ค. ์ด๋Š” ๋‹ค์ˆ˜์˜ ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋™์‹œ์— ์„œ๋ฒ„์— pull ์š”์ฒญ์„ ๋ณด๋‚ธ๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค.

๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋™์‹œ์— ์š”์ฒญํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ์บ์‹ฑ์€ ๋งค์šฐ ํšจ๊ณผ์ ์ธ ๋ฐฉ๋ฒ•์ด๋‹ค. ๋”ฐ๋ผ์„œ, ์‘๋‹ต์„ ์บ์‹ฑํ•˜๊ณ  ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ๋™์ผํ•œ ์‘๋‹ต์„ ์ฃผ๋Š” ๊ฒƒ์€ ๋น„๊ต์  ์‰ฝ๋‹ค. ํด๋ผ์ด์–ธํŠธ๋“ค์€ ๊ฑฐ์˜ ๋™์‹œ์— pulll ์š”์ฒญ์„ ๋ณด๋‚ด๊ธฐ ๋•Œ๋ฌธ์—, ์บ์‹ฑ๋œ ์‘๋‹ต์€ ์ถฉ๋ถ„ํžˆ ์ตœ์‹  ์ƒํƒœ๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.

์„œ๋ฒ„๋Š” ๋˜ํ•œ ์ด๋Ÿฌํ•œ `poke`๋ฅผ ๋” ๊ธด ์‹œ๊ฐ„์„ ๋‘๊ณ  ๋ถ„์‚ฐ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”๋ฐ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋™์‹œ์— `pull` ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํด๋ผ์ด์–ธํŠธ ์ˆ˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

Push state

๋‘๋ฒˆ์งธ ํŒจํ„ด์€ `push state`์ด๋‹ค. ์ด ํŒจํ„ด์—์„œ ์„œ๋ฒ„๋Š” ์ด๋ฏธ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ฐ›์•„์•ผํ•  ์ตœ์‹  ์ƒํƒœ๋ฅผ ์•Œ๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ทธ ์ƒํƒœ๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ํ‘ธ์‹œํ•œ๋‹ค. `poke`๋ฅผ ๋ณด๋‚ด๋Š” ๋Œ€์‹ , ์ƒˆ๋กœ์šด ์ƒํƒœ๋ฅผ ์ฆ‰์‹œ ์„œ๋ฒ„์—์„œ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด๋‹ค.

์ด๊ฒƒ์€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ๊ฐ€ `pull`์„ ํ•  ํ•„์š” ์—†์ด ์ฆ‰์‹œ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ๋ฐ›๊ธฐ ๋•Œ๋ฌธ์— fan-out ๋ฌธ์ œ๋ฅผ ์™„ํ™”์‹œํ‚จ๋‹ค. ์ƒํƒœ๋ฅผ ํ‘ธ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ƒํƒœ์™€ ๋™๊ธฐํ™”๋˜์ง€ ์•Š์„ ๊ฐ€๋Šฅ์„ฑ์ด ์ ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค๋ฃจ๊ธฐ๊ฐ€ ์‰ฝ๋‹ค. ๋งค๋ฒˆ ์—…๋ฐ์ดํŠธ๋  ๋•Œ๋งˆ๋‹ค ํด๋ผ์ด์–ธํŠธ๋Š” ์‚ฌ์šฉํ•ด์•ผ ํ•  ์ „์ฒด ์ƒํƒœ์˜ ์‚ฌ๋ณธ์„ ๋ฐ›๊ฒŒ ๋˜๋ฏ€๋กœ, ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐœ์ƒํ•œ ๋ฒ„๊ทธ๋กœ ์ธํ•ด ์ƒํƒœ๊ฐ€ ์—‡๊ฐˆ๋ฆฌ๋Š” ๋ฌธ์ œ๊ฐ€ ๋น ๋ฅด๊ฒŒ ํ•ด๊ฒฐ๋  ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋‚˜ ์ „์ฒด ์ƒํƒœ๋ฅผ ํ‘ธ์‹ฑํ•˜๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„์„ ํŒŒ์•…ํ•˜๊ธฐ ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ์ž‘์€ ๋ณ€๊ฒฝ์ด ์ผ์–ด๋‚˜๋„ ์ „์ฒด ์ƒํƒœ๋ฅผ ์žฌ ์ „์†กํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋Œ€๊ทœ๋ชจ ์ƒํƒœ๋ฅผ ์ฒ˜๋ฆฌ ํ•˜๋Š”๋ฐ์—๋Š” ์ ํ•ฉํ•˜์ง€ ์•Š๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, “walk the dog”๊ฐ€ ์™„๋ฃŒ๋˜์–ด์„œ true๋กœ ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒฝ์šฐ์—๋„, ๋ชจ๋“  “todos”๋ฅผ ๋‹ค์‹œ ์ „์†กํ•ด์•ผ ํ•œ๋‹ค.

 

Push ops

push ops๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์–ด๋А ๋ถ€๋ถ„์ด ๋ณ€๊ฒฝ๋˜์—ˆ๋Š”์ง€ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋ฉฐ, ์ „์†ก๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ์‚ฌ์ด์ฆˆ๋„ ์ค„์—ฌ์ค€๋‹ค.

์ผ๋ฐ˜์ ์‘๋กœ ์„œ๋ฒ„๋Š” ์ƒํƒœ ๋ณ€๊ฒฝ์„ ๋ฐœ์ƒ์‹œํ‚ค๋Š” ์ž‘์—…์— ๋Œ€ํ•ด ์ดํ•ดํ•˜๊ณ  ์žˆ์œผ๋ฉฐ, ์ด๋ฅผ ์—ฐ๊ฒฐ๋œ ํด๋ผ์ด์–ธํŠธ๋“ค์—๊ฒŒ ์ „์†กํ•  ์ˆ˜ ์žˆ๋‹ค. ์ฆ‰, ์„œ๋ฒ„๋Š” ์ „์ฒด ์ƒํƒœ๋ฅผ ๋ณด๋‚ด๋Š” ๋Œ€์‹  ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์˜ ์ƒํƒœ์™€ ์ผ์น˜ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—…(operation)์„ ์ „์†กํ•œ๋‹ค.

์˜ˆ์ œ์—์„œ์™€ ๊ฐ™์ด, ์ด ์ž‘์—…(operation)์€ id๊ฐ€ 2์ธ todo ํ•ญ๋ชฉ์˜ ์ƒํƒœ๊ฐ€ `completed: true` ๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

๊ฐ ํด๋ผ์ด์–ธํŠธ๋Š” ์ด ์ž‘์—…์„ ๊ธฐ์กด ์ƒํƒœ์— ๋ณ‘ํ•ฉํ•œ๋‹ค. `push state` ์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ ์ฒ˜๋Ÿผ, ์ด๊ฒƒ์€ ์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์ •ํ™•ํžˆ ์ดํ•ดํ•˜๊ณ  ์žˆ๋‹ค๋Š” ๊ฒƒ์— ์˜์กดํ•œ๋‹ค. ๊ทธ๋ ‡์ง€ ์•Š์œผ๋ฉด ์„œ๋ฒ„๊ฐ€ ์ƒ์„ฑํ•œ ์ž‘์—…(operation)๋งŒ์œผ๋กœ๋Š” ํด๋ผ์ด์–ธํŠธ์˜ ์ƒํƒœ๋ฅผ ์„œ๋ฒ„์™€ ๋™๊ธฐํ™” ์‹œํ‚ฌ ์ˆ˜ ์—†๋‹ค.

๋งˆ์ง€๋ง‰์œผ๋กœ `push ops` ๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ž‘์—…์„ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์–ป๋Š” ๋งค์ปค๋‹ˆ์ฆ˜์„ ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค. ์ด๊ฒƒ์€ ์ผ๋ฐ˜์ ์œผ๋กœ ์ดˆ๊ธฐ ์ƒํƒœ๋ฅผ ์„ค์ •ํ•˜๋Š” `initial` ์ž‘์—…์„ ๋จผ์ € ์ œ๊ณตํ•˜๊ณ , ์ดํ›„์˜ ์ž‘์—…์ด ๊ทธ ์œ„์— ์ ์šฉ๋˜๋Š” ์‹์œผ๋กœ ๋ชจ๋ธ๋ง๋œ๋‹ค.

 

Event Sourcing

`event sourcing` ์—์„œ๋Š” ๋ณ€๊ฒฝ์„ ๋‚˜ํƒ€๋‚ด๋Š” ์ž‘์—… ํ˜น์€ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ์ „์†กํ•˜๋Š” ๋Œ€์‹  ๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•œ ‘์ด๋ฒคํŠธ’ ์ž์ฒด๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ „์†กํ•œ๋‹ค.

์ด ์˜ˆ์ œ์—์„œ ๋ณผ ์ˆ˜ ์žˆ๋“ฏ์ด, ์ด๋ฒคํŠธ๋Š” ์—…๋ฐ์ดํŠธ ๋œ ์ƒํƒœ๋ฅผ ํฌํ•จํ•˜๋Š” ๋Œ€์‹  ๋ฐœ์ƒํ•œ ‘์ด๋ฒคํŠธ’๋ฅผ ํฌํ•จํ•œ๋‹ค. ๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์—, ์ด ์ด๋ฒคํŠธ๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์•„๋Š” ๊ฒƒ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์ฑ…์ž„์ด๋‹ค. purists ๋“ค์€ ์ด๊ฒƒ์ด ๋” ๋‚˜์€ ๋ฐ์ดํ„ฐ ํ‘œํ˜„ ๋ฐฉ์‹์ด๋ผ๊ณ  ์ฃผ์žฅํ•˜์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๊ฐ ํด๋ผ์ด์–ธํŠธ๋“ค์ด ๋™์ผํ•œ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๊ตฌํ˜„ํ•ด์•ผํ•œ๋‹ค๋Š” ๋ถ€๋‹ด์ด ์ƒ๊ธด๋‹ค. ์ฆ‰, ์ด ์ด๋ฒคํŠธ๊ฐ€ completed ํ•„๋“œ๋ฅผ true๋กœ ๋ณ€๊ฒฝํ•ด์•ผ ํ•œ๋‹ค๋Š” ์˜๋ฏธ์ž„์„ ์ดํ•ดํ•˜๋Š” ๋กœ์ง์„ ๊ฐ ํด๋ผ์ด์–ธํŠธ์—์„œ ๊ตฌํ˜„ํ•ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

์•„๋งˆ๋„ ๋งŒ์•ฝ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋‹จ์ˆœํžˆ ์—…๋ฐ์ดํŠธ๋œ ์ƒํƒœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๊ฒƒ ์ด์ƒ์˜ ๋ณต์žกํ•œ ๋กœ์ง์„ ๊ฐ–๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, ์ด๋ฒคํŠธ๋ฅผ ๋ณด๋‚ด๋Š” ๊ฒƒ์ด ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํด๋ผ์ด์–ธํŠธ๊ฐ€ completed ํ•„๋“œ๊ฐ€ true๋กœ ๋ณ€๊ฒฝ๋˜์—ˆ์Œ์„ ์—ญ์œผ๋กœ ํ•ด์„ํ•  ํ•„์š” ์—†์ด, ๊ทธ์ € “todo was completed”๋ผ๋Š” ์ด๋ฒคํŠธ๋ฅผ ์ง์ ‘ ๋ฐ›์•„์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

Transports

์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ๋ฅผ ์—ฐ๊ฒฐ๋œ ์ƒํƒœ๋กœ ์œ ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์›น์†Œ์ผ“, sse, ์ด๋ฒคํŠธ ์ŠคํŠธ๋ฆผ, ์ฝ”๋ฉง, ํด๋ง ๋“ฑ์˜ ๋‹ค์–‘ํ•œ ์ „์†ก๋ฐฉ์‹์ด ์žˆ๋‹ค. ๊ฐ ๋ฐฉ์‹์—๋Š” ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ, ์ „๋ฐ˜์ ์œผ๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.

๋‚˜์—ดํ•œ ๋ชจ๋“  ์ „์†ก ๋ฐฉ์‹์€ HTTP์œ„์—์„œ ๋™์ž‘ํ•œ๋‹ค. ์ฆ‰, ์ด๋“ค์€ ๋ชจ๋‘ ์„œ๋ฒ„์™€ ํด๋ผ์ด์–ธํŠธ ๊ฐ„์˜ 1:1 ์—ฐ๊ฒฐ ๋ฐฉ์‹์ด๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ํด๋ผ์ด์–ธํŠธ๋Š” ํ•˜๋‚˜์˜ ์„œ๋ฒ„์— ์—ฐ๊ฒฐ๋œ๋‹ค. ์ด์ œ ์„œ๋ฒ„๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์˜ `replicas` ๋กœ ์ˆ˜ํ‰ ํ™•์žฅ๋œ ์‹œ์Šคํ…œ์„ ์ƒ๊ฐํ•ด๋ณด์ž. ์ด ๊ฒฝ์šฐ, ์ƒํƒœ ๋ณ€๊ฒฝ์„ ์œ ๋ฐœํ•œ ์ตœ์ดˆ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•œ ์„œ๋ฒ„๊ฐ€ ๋ชจ๋“  ํด๋ผ์ด์–ธํŠธ ์—ฐ๊ฒฐ์„ ๊ด€๋ฆฌํ•˜๋Š” ์„œ๋ฒ„์™€ ๋‹ค๋ฅผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๋‹ค.

์œ„ ์ด๋ฏธ์ง€์—๋Š” ๋‘ ๋Œ€์˜ ์„œ๋ฒ„ `replica`๊ฐ€ ์žˆ๋‹ค. ๋…น์ƒ‰ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด ํ•ด๋‹น ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ server A์™€ ๊ณต์œ ํ•˜๋ฉด, server A๊ฐ€ ํŒŒ๋ž€์ƒ‰ ํด๋ผ์ด์–ธํŠธ์™€ ์ด ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์€ ๋น„๊ต์  ์‰ฝ๋‹ค. ํ•˜์ง€๋งŒ, server A๊ฐ€ ์ฃผํ™ฉ์ƒ‰ ํด๋ผ์ด์–ธํŠธ ๋‘ ๋ช…๊ณผ ์ด ์—…๋ฐ์ดํŠธ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ์–ด๋ ต๋‹ค. ์™œ๋ƒํ•˜๋ฉด ์ด ํด๋ผ์ด์–ธํŠธ๋“ค์€ server B์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

์ด๊ฒƒ์€ ๋งค์šฐ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฌธ์ œ์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์ˆ˜ํ‰ ํ™•์žฅ๋œ ์„œ๋ฒ„๋“ค ๊ฐ„์˜ ๋™๊ธฐํ™”๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ํ†ตํ•ด ์ด๋ฃจ์–ด์ง„๋‹ค. ํ•˜์ง€๋งŒ, ๊ฐ ์„œ๋ฒ„ `replica`๊ฐ€ ๋ณ€๊ฒฝ ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ง€์†์ ์œผ๋กœ ํด๋งํ•˜๋Š” ๊ฒƒ์€ ๋น„ํšจ์œจ ์ ์ด๋‹ค. `LISTEN/NOTIFY` ๊ฐ™์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์•Œ๋ฆผ ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ๋„ ์ด์ƒ์ ์ธ ํ•ด๊ฒฐ์ฑ…์ด ์•„๋‹ˆ๋‹ค.

์ด๋Ÿฐ ์ƒํ™ฉ์—์„œ Pub/Sub์€ ๊ฝค ์œ ์šฉํ•˜๋‹ค. Pub/Sub ์‹œ์Šคํ…œ์€ ์›น์†Œ์ผ“ ์ธํ”„๋ผ์™€ ํŒฌ์•„์šด์„ ๋Œ€์‹  ์ฒ˜๋ฆฌํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

๋ฐ˜์‘ํ˜•