강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

효상님의 프로필 이미지
효상

작성한 질문수

웹소켓/STOMP 채팅서비스(spring, vue, redis)

entity erd설계

실시간 서비스 관련 질문

작성

·

19

·

수정됨

0

아직 완강을 하지 않아 질문드립니다.

 

실시간 서비스에서 MYSQL과 같은 RDBMS로 메세지 읽음 처리를 하면 트래픽이 증가했을 때 문제가 발생할 것 같은데, 그래서 추후에 강의에서 Redis를 도입하는건가요? 또, 실무에서는 보통 어떻게 처리를 해주는지도 궁금합니다!

답변 2

0

bradkim님의 프로필 이미지
bradkim
지식공유자

안녕하세요~!!

 

말씀해주신것처럼 실시간으로 채팅이 쏟아지는데 동기적으로 db에 업데이트 작업을 하는건 부하가 크고 응답속도가 느려질수도 있을것 같습니다. 일단 이 부분 관련해서는 수업에서는 고도화가 되어있지는 않습니다. redis는 해당 이슈관련 외의 목적으로 사용돼요.

 

이경우 실전에서는 여러 대안을 고민을 해볼수 있을겁니다. 그중에 카프카를 도입해서 비동기적으로 읽음여부를 업데이트하는게 가장 현실적인 대안이 될것 같습니다. 읽음여부를 관리하려면 db부하가 없을순 없겠지만, 비동기처리로 인해 성능을 향상시킬수 있을것 같습니다.

 

레디스를 쓸수도 있겠지만 레디스에 올려두기에는 데이터규모가 너무 클것 같다는 생각이듭니다.

0

안녕하세요, 인프런 AI 인턴입니다. 효상님.

실시간 서비스에서 메시지의 읽음 처리처럼 빈번하게 발생하는 트래픽이 RDBMS에 과부하를 줄 수 있다는 점은 유의할 필요가 있습니다. 그렇기 때문에 Redis와 같은 인메모리 데이터 저장소를 사용하는 것이 일반적입니다. Redis는 데이터 접근 속도가 빠르며, 특히 Pub/Sub(게시/구독) 기능과 같이 실시간 메시지 전달에 유용한 기능들을 제공합니다.

  1. Redis 사용 이유:

    • Redis는 RDBMS에 비해 읽기, 쓰기 속도가 매우 빠릅니다. 이는 특히 메모리를 사용하는 인메모리 데이터베이스라는 구조 때문인데요, 따라서 실시간 읽음 상태 등의 빠른 반응이 필요한 데이터 처리에 적합합니다.
    • Redis의 TTL(Time-To-Live) 기능은 데이터의 수명을 설정할 수 있어, 불필요한 데이터를 자동으로 삭제해주는 장점이 있습니다.
  2. 실무 적용 사례:

    • 실무에서는 메시지의 상태 변화와 같은 빈번한 요청이 Redis에서 먼저 처리되고, 주기적으로 혹은 특정 이벤트에 따라 MySQL과 같은 RDBMS에 데이터를 동기화하는 방식을 채택하기도 합니다. 이를 통해 RDBMS의 부하를 줄이면서도 데이터의 일관성을 유지할 수 있습니다.

관련 내용으로 유익한 정보를 얻으실 수 있는 질문 링크를 추가로 참고해보세요:
- Redis로 실시간 채팅 구현 문의: 실시간 서비스에서 Redis를 활용하는 예시와 실무 팁을 얻을 수 있습니다.
- Websocket과 Redis의 조합에 관한 질문: 실시간 통신 시 Redis의 활용 방법을 자세히 설명합니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

효상님의 프로필 이미지
효상

작성한 질문수

질문하기