인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

minjun님의 프로필 이미지

작성한 질문수

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

채팅 메시지 저장에 관한 질문입니다.

작성

·

52

0

채팅 메시지를 보낼 때마다 db에 접근해서 저장하는 방식이면 디스크 io 작업이 굉장히 잦아질 거 같은데

보통 이런 경우에는 redis 를 쓴다면 redis에 저장해두었다가 스케줄링같은 방식으로 한번에 db에 저장하는 방식을 사용하는 걸까요?

답변 2

0

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

말씀하신 방법대로 해도 무방하다고는 생각이 되나, 코드의 복잡도가 올라갈것 같고, redis에 저장해두고 스케쥴링 처리 한다고 하더라도 db에 insert해야 하는 데이터의 건수는 동일하게 많기 때문에 새벽같은 서버가 한가한시간이 아니라고 한다면 크게 의미는 없을것 같습니다.

0

인프런 AI 인턴님의 프로필 이미지

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

채팅 메시지 저장 시, 디스크 I/O의 잦은 발생을 염려하시고 Redis를 중간 저장소로 사용한 뒤 스케줄링을 통해 한꺼번에 DB에 저장하는 방식에 대한 질문을 주셨습니다.

Redis와 DB 연동 전략

  1. Redis를 캐시로 활용: Redis는 고속의 인메모리 데이터 저장소로 자주 업데이트되는 데이터를 일시적으로 저장하고 빠르게 접근할 수 있도록 돕습니다. 이를 통해 메시지를 즉각적으로 처리하면서도 성능을 유지할 수 있는 장점이 있습니다.

  2. 배치 저장 전략: 일정 시간 간격 또는 특정 조건(예: 일정 개수 이상의 메시지 도달 시)에서 Redis에 저장된 메시지를 데이터베이스로 옮겨 저장하는 전략입니다. 이를 통해 데이터베이스 I/O 작업을 줄이고 집합적인 저장을 통한 효율성을 높일 수 있습니다.

  3. 장점

    • 성능 최적화: 보다 초당 많은 메시지를 효율적으로 관리할 수 있습니다.
    • 확장성: 대규모 트래픽을 수용할 수 있도록 구성할 수 있습니다.
  4. 주의 사항

    • Redis에서의 데이터 유실 가능성: 일시적인 저장소이므로 특정 상황에서 데이터 유실을 대비해야 합니다.
    • 데이터 일관성 관리: 메시지가 Redis에 있는 상태와 DB에 반영된 상태의 일치를 보장하도록 설계되어야 합니다.

관련 있는 더 많은 정보를 보시려면 아래의 유사한 질문을 참고하실 수 있습니다:

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

minjun님의 프로필 이미지

작성한 질문수

질문하기