SSE + Redis pub/sub
κΈ°μ‘΄μ SSEλ‘λ§ κ΅¬νν μλ¦Ό κΈ°λ₯μ λ¨μΌ μλ²μμ λ¬Έμ κ° μμ§λ§ λΆμ° μλ²μμ ν κ°μ§ λ¬Έμ κ° λ°μνλ€.
μ¬μ©μκ° "μλ²1"μμ ꡬλ μ νλ©΄ SSE μ°κ²° μ 보λ₯Ό "μλ²1"μ μΈμ€ν΄μ€ λ©λͺ¨λ¦¬μ μ μ₯νλ€.
λ°λΌμ μλ²2μμ μ΄λ²€νΈλ₯Ό λ°νν΄λ μλ²2μλ μ°κ²° μ λ³΄κ° μκΈ° λλ¬Έμ μ κΈ°λ₯μ νμ§ λͺ»νλ€.
pub/subκ³Ό λ³κ²½λ μλ¦Ό κΈ°λ₯ λμ λ°©μ
redis pup/sub μμ€ν μ μ±λμ ꡬλ μ μ²μ ν λͺ¨λ subμκ² λ©μμ§λ₯Ό μ λ¬νλ€.
μ¬κΈ°μλ κ°λ¨νκ² μ€λͺ νμ§λ§ λ€μ μ€λͺ νμλ©΄,
publisherλ λ©μμ§λ₯Ό redis μλ²λ‘ λ°ννκ³ ν΄λΉ topicμ ꡬλ μ(sbscriber)κ° μ‘΄μ¬νλ©΄ λ°νμκ° λ©μμ§λ₯Ό λ°νν κ²½μ° κ΅¬λ μμκ² λ©μμ§κ° μ μ‘λλ€.
μ¦, sender(publisher)λ€μ receiver(subscriber)μκ² μ§μ μ λ¬νλ κ²μ΄ μλλΌ ν΄λΉ μ±λμ λ©μμ§λ₯Ό μ λ¬νλ©΄ κ·Έ λ©μμ§λ₯Ό ꡬλ νκ³ μλ ꡬλ μκ° μ΄λ₯Ό μμ νλ κ²μ΄λ€.

λ°λΌμ pub/subμΌλ‘ ꡬνλ μλ¦Ό flowλ λ€μκ³Ό κ°λ€.
ν΄λΌμ΄μΈνΈκ° SSE μ°κ²° μμ²μ νλ©΄ μλ²λ user_idλ‘ emitter κ°μ²΄μ channelμ μμ±νκ³ κ΅¬λ νλ€.
μλ¦Όμ΄ μλ κΈ°λ₯(리뷰μ λκΈ λ¬κΈ° λ±)μ΄ μμ²μΌλ‘ λ€μ΄μ€λ©΄ μμ² μ 보(dto)λ₯Ό κΈ°λ°μΌλ‘ channelμ μμ±νκ³ μ μ‘ν λ©μμ§μ channelμ publish νλ€.
κ°λ°μκ° κ΅¬νν
publish()κ° λμνλ©΄ ꡬννonMessage()λ₯Ό νΈμΆνλ©΄μ ꡬλ ν subscriberμκ² λ©μμ§λ₯Ό μ μ‘νλ€. κ·Έλ¬λ©΄ clientμκ² μλ¦Όμ΄ μ¨λ€.
ꡬν μ½λ
κΈ°μ‘΄ μ½λλ μμ νμ§ μκ³ v2λ₯Ό μμ±νλ€.

[λ³κ²½ μ½λ]
μ΄λ²€νΈκ° λ°νλλ©΄ ꡬνν publish() λ©μλλ₯Ό νΈμΆνκ² λλ€.
MessageListenerλ₯Ό ꡬνν ꡬν체μ΄λ€. publish()κ° νΈμΆλλ©΄ μ¬κΈ°μ ꡬνν onMessage()κ° νΈμΆλλ€.
κΈ°μ‘΄μλ serviceμμ ν΄λΉ emitterr κ°μ²΄μ μ 보λ₯Ό κ°μ§κ³ ν΄λΌμ΄μΈνΈμκ² μλ¦Όμ 보λμ§λ§,
onMessage()λ₯Ό ν΅ν΄μ μ΄μ κΈ°λ₯μ΄ λμνλ€.
μ΄μ μλ SSE μ°κ²°λ§μ λ΄λΉνμ§λ§ pub/subμ μ μ©ν μ½λλ SSE μ°κ²°κ³Ό λμμ μ±λμ μμ±νκ³ κ΅¬λ νλ€.
SSEλ§ μ¬μ©ν λλ send() λ©μλμμ ν΄λΌμ΄μΈνΈμκ² μλ¦Όμ 보λ΄λ μ± μμ λ΄λΉνμ§λ§
μ§κΈμ RedisSubscriberμ onMessage()μμ λ΄λΉνλ€.
κ²°κ³Ό νμΈ
λ κ°μ μλ² μΈμ€ν΄μ€λ₯Ό μ¬λ¦¬κ³ μλ¦Ό κΈ°λ₯μ΄ μ μ©λ 리뷰μ λκΈμ μμ±νλ κΈ°λ₯μ μννλ€.
[SSE]


리뷰μ μλ¦Ό λ°μ΄ν°λ μ μμ±λμ΄ DBμ λ°μ λμμ§λ§, Clientμκ² μλ¦Όμ΄ λμ°©νμ§ μλλ€.
[SSE + redis pub/sub]


pub/subμ μ μ©νκ²μ 리뷰μ μλ¦Ό λ°μ΄ν°κ° μμ±λμ΄ DBμ λ°μλκ³ Clientμκ²λ μλ¦Όμ΄ μ λμ°©νλ€.
Summary
νλμ μλ²μμλ pub/sub μμ΄λ μ λμνμ§λ§ μλ²μ μΈμ€ν΄μ€κ° λμ΄λκ³ λ³λμ λ‘λλ°Έλ°μ± μμ΄λ μ¬μ©μμκ² μλ¦Όμ΄ λμ°©νλ κ²μ 보μ₯ν μ μμλ€. νμ§λ§ redisκ° μ 곡νλ pub/sub κΈ°λ₯μ νμ©ν΄μ μ¬λ¬ μλ²λ₯Ό μ΄μνλ μλΉμ€μμ μλ¦Όμ΄ λμ°©νλ κ²μ νμΈν μ μμλ€. pub/subμ μ 곡νλ λ€λ₯Έ λ―Έλ€μ¨μ΄λ€λ μ‘΄μ¬νμ§λ§ μ΄λ―Έ 리νλ μ ν ν°μ μ μ₯νλ redis μλ²μ μΊμ±μ λ΄λΉνλ redis μλ²κ° κ°κ° 1κ°μ© μ‘΄μ¬νκΈ° λλ¬Έμ redisλ‘ νμ©ν΄λ΄€λ€.
Last updated