채팅 메시지 저장에 관한 질문입니다.
114
작성한 질문수 18
채팅 메시지를 보낼 때마다 db에 접근해서 저장하는 방식이면 디스크 io 작업이 굉장히 잦아질 거 같은데
보통 이런 경우에는 redis 를 쓴다면 redis에 저장해두었다가 스케줄링같은 방식으로 한번에 db에 저장하는 방식을 사용하는 걸까요?
답변 2
0
말씀하신 방법대로 해도 무방하다고는 생각이 되나, 코드의 복잡도가 올라갈것 같고, redis에 저장해두고 스케쥴링 처리 한다고 하더라도 db에 insert해야 하는 데이터의 건수는 동일하게 많기 때문에 새벽같은 서버가 한가한시간이 아니라고 한다면 크게 의미는 없을것 같습니다.
0
안녕하세요, 인프런 AI 인턴입니다. minjun님.
채팅 메시지 저장 시, 디스크 I/O의 잦은 발생을 염려하시고 Redis를 중간 저장소로 사용한 뒤 스케줄링을 통해 한꺼번에 DB에 저장하는 방식에 대한 질문을 주셨습니다.
Redis와 DB 연동 전략
Redis를 캐시로 활용: Redis는 고속의 인메모리 데이터 저장소로 자주 업데이트되는 데이터를 일시적으로 저장하고 빠르게 접근할 수 있도록 돕습니다. 이를 통해 메시지를 즉각적으로 처리하면서도 성능을 유지할 수 있는 장점이 있습니다.
배치 저장 전략: 일정 시간 간격 또는 특정 조건(예: 일정 개수 이상의 메시지 도달 시)에서 Redis에 저장된 메시지를 데이터베이스로 옮겨 저장하는 전략입니다. 이를 통해 데이터베이스 I/O 작업을 줄이고 집합적인 저장을 통한 효율성을 높일 수 있습니다.
장점
- 성능 최적화: 보다 초당 많은 메시지를 효율적으로 관리할 수 있습니다.
- 확장성: 대규모 트래픽을 수용할 수 있도록 구성할 수 있습니다.
- 성능 최적화: 보다 초당 많은 메시지를 효율적으로 관리할 수 있습니다.
주의 사항
- Redis에서의 데이터 유실 가능성: 일시적인 저장소이므로 특정 상황에서 데이터 유실을 대비해야 합니다.
- 데이터 일관성 관리: 메시지가 Redis에 있는 상태와 DB에 반영된 상태의 일치를 보장하도록 설계되어야 합니다.
- Redis에서의 데이터 유실 가능성: 일시적인 저장소이므로 특정 상황에서 데이터 유실을 대비해야 합니다.
관련 있는 더 많은 정보를 보시려면 아래의 유사한 질문을 참고하실 수 있습니다:
- 레디스 pub/sub 질문에 대한 답변 - Redis를 사용한 Pub/Sub의 활용에 대한 기본 설명
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
ERD 질문
0
54
2
StompHandler 관한 질문
0
80
2
리프레시 토큰은 알아서 구현하면 되는건가요??
0
79
2
cors, csrf 직접 구현
0
65
1
JWT 필터구현
0
98
2
강의 잘듣고 있습니다. 혹시 다음 강의 계획은 없으신가요?
0
57
1
STOMP 동작 과정 질문
0
48
1
chain.doFilter()
0
45
1
자바 21로 소스 작성해도 되나요?
0
60
2
메시지 브로커 선택에 관한 질문
0
65
2
WebSocket과 Spring Security 질문
0
81
2
추가 커스텀 구현 질문 있습니다.
0
61
2
connect와 동시에 구독하는데 구독 검증이 꼭 필요한가요?
0
97
2
저도 동일한 질문인데
0
78
3
token이 필요한 엔드포인트에 의도적으로 토큰 누락시 대처
0
67
2
수업자료가 왜 다 나눠져있나요?
0
78
2
메시지 전송 시 검증
0
61
2
JWT 생성 시 subject 설정에 대한 질문
0
158
3
StompHandler 질문 있습니다.
0
82
2
앱 서비스일 경우
0
84
2
웹소켓 서버 재배포시 고려해야 할 상황 질문
0
107
2
배포 오류 질문
0
124
2
/connect 경로에 대한 토큰 검증의 필요성
0
77
1
JwtTokenProvider 작성중 오류 발생으로 문의드립니다.
0
97
2





