레디스를 안 쓰고 웹소켓(WebSocket)만 사용하는 경우에는 여전히 실시간 통신 기능은 구현할 수 있습니다. 하지만 레디스와 같은 메시지 브로커나 데이터 저장소를 사용하지 않을 때 발생할 수 있는 몇 가지 제한 사항이 있습니다:
결론적으로, 웹소켓만을 사용하여 실시간 통신 기능을 구현할 수는 있지만, 레디스와 같은 메시지 브로커나 데이터 저장소를 함께 사용함으로써 시스템의 확장성, 안정성, 메시지 관리 능력을 향상시킬 수 있습니다. 따라서, 실시간 통신이 필요한 대규모 시스템이나 복잡한 아키텍처를 구축할 계획이라면, 웹소켓과 함께 레디스를 고려하는 것이 좋습니다.
Redis를 사용한 메시지 발행(publishing)과 구독(subscribing)은 직접적으로 최종 구독자들에게 메시지를 보내는 것이 아닙니다. Redis의 발행/구독(pub/sub) 시스템은 메시지를 중계하는 역할을 합니다. 즉, Redis는 메시지를 직접 구독자에게 전달하지 않고, 해당 메시지를 구독하고 있는 클라이언트(일반적으로 서버 또는 백엔드 시스템)에게 메시지를 전달합니다.
이러한 방식은 주로 다음과 같은 이유로 사용됩니다:
분산 시스템에서의 메시지 동기화: 대규모 분산 시스템에서는 여러 서버 인스턴스가 동시에 운영되는 경우가 많습니다. Redis를 사용하면 모든 서버 인스턴스가 Redis로부터 메시지를 받고, 각 서버 인스턴스에 연결된 클라이언트(웹소켓을 통한 브라우저 등)에게 메시지를 전달할 수 있습니다. 이를 통해 시스템 전체에서 메시지의 일관성을 유지할 수 있습니다.
확장성 및 유연성: Redis를 메시징 중계자로 사용하면 시스템의 확장성이 향상됩니다. 새로운 서버 인스턴스를 추가하거나 제거하는 것이 더 쉬워지며, 모든 메시지는 Redis를 통해 동기화되므로 각 서버는 독립적으로 스케일링될 수 있습니다.
부하 분산: Redis를 사용하면 메시지 전달 부하를 여러 서버 인스턴스에 분산시킬 수 있습니다. 이는 특히 많은 수의 클라이언트와 실시간으로 상호 작용하는 시스템에서 유용합니다.
결과적으로, Redis는 최종 구독자에게 직접적으로 메시지를 발행하지 않고, 대신 메시지를 구독하는 서버나 서비스에 메시지를 전달합니다. 그 후, 이러한 서버나 서비스는 자신과 직접 연결된 클라이언트에게 웹소켓을 통해 메시지를 전달합니다. 이런 방식으로, Redis와 웹소켓 기술은 함께 사용되어 대규모 분산 시스템에서의 메시지 전달을 효율적으로 관리할 수 있습니다.