HomeAboutMeBlogGuest
© 2025 Sejin Cha. All rights reserved.
Built with Next.js, deployed on Vercel
📯
부스트캠프 7기 BE 멤버쉽 설계
/
채팅 기능을 구현해보려다 궁금증이 생겼습니다. 1. 실시간으로 이루어지는 모든 채팅을 db에 바로 바로 집어넣는 것은 너무 부하가 많아질 것으로 생각합니다. 서버에 캐싱을 해야할 것 같은데, 이 경우 캐싱된 데이터를 db에 주기적으로 반영해줘야할 것 같다고 생각했습니다. 이 외에 다른 방법이 있을까요? 서버가 다운되면 캐싱된 데이터는 다 날아가버릴 것 같은데, 대처 방법이 있을까요? 2. 클라이언트가 채팅방에 들어왔을 때, 채팅 내역을 바로 띄워주기 위해 클라이언트에도 특정 양의 채팅 내역은 캐싱해주면 좋겠다고 생각했습니다. 이 때, 클라이언트 측의 채팅 내역과, 실제 서버에 저장된 채팅 내역이 모종의 이유로 다를 수도 있습니다. 이는 어떻게 감지하고 동기화해줄 수 있을까요?

채팅 기능을 구현해보려다 궁금증이 생겼습니다. 1. 실시간으로 이루어지는 모든 채팅을 db에 바로 바로 집어넣는 것은 너무 부하가 많아질 것으로 생각합니다. 서버에 캐싱을 해야할 것 같은데, 이 경우 캐싱된 데이터를 db에 주기적으로 반영해줘야할 것 같다고 생각했습니다. 이 외에 다른 방법이 있을까요? 서버가 다운되면 캐싱된 데이터는 다 날아가버릴 것 같은데, 대처 방법이 있을까요? 2. 클라이언트가 채팅방에 들어왔을 때, 채팅 내역을 바로 띄워주기 위해 클라이언트에도 특정 양의 채팅 내역은 캐싱해주면 좋겠다고 생각했습니다. 이 때, 클라이언트 측의 채팅 내역과, 실제 서버에 저장된 채팅 내역이 모종의 이유로 다를 수도 있습니다. 이는 어떻게 감지하고 동기화해줄 수 있을까요?

요약
- 대규모에서는 - 분산 시스템을 구축하고 - apache kafka 같은 스트림 서버를 이용해서 분산 처리 - “스트림으로 처리한다” - Redis 같은 캐싱 디비를 이용하자. - 바로 DB에 저장하는게 아니라 - 캐시에 저장 후 - 특정 시점에 DB에 반영
확인
확인
레이블
5주차
 
카카오톡을 생각해보자
→ 채팅이 올라오면 클라이언트 (SQLite 같은 로컬 DB를 사용하는 경우가 많음) 에 저장
 
서버
→ Stream ( apache kafka )
 
→ 저장하는 로직과
→ 응답을 보내주는 로직을 구분
 
 
sendMessage((req, res) ⇒ {
saveMessage(req);
res.send(req.message);
})
 
 
redis
 
실제 MySQL 같은 RDB를 바로 쓰는게 아니라
 
redis에다가 저장하고
 
특정 시점이 되면 MySQL 에 반영