작성
·
72
0
안녕하세요 수업을 바탕으로 프로젝트 적용중입니다.
프론트에서 채팅입력하면 백엔드의 연결된 소켓에서 이를 redis 로 publish 하고 이때 같이 채팅메시지를 db에 저장하는 방식으로 구현했습니다.
나중에 채팅방에 다시 입장하는 경우 채팅 저장 날짜를 기반으로 일부 가져오려하니 초까지 같은 경우 순서가 엉키는 현상이 발생하는데 auto_increment 로 저장한 pk 를 순서로 가져와도 될까요?
redis 는 싱글스레드이지만 websocket 가 병렬처리되면 결국 pk 순서가 실제 순서를 보장할 수 있을까요?
답변 2
0
1.pk를 순서로 저장해도 무관할것 같습니다.
2.redis와 상관없이 spring이 멀티스레드를 처리하므로 메시지가 순간적으로 동시에 가깝게 발행이 될수 있다고 보여집니다. 그 과정에서 redis를 통한 pub/sub 등 메시지 발행 과정이 상대적으로 긴 흐름으로 이어지기에 실질적으로는 사용자가 메시지를 발송한 순서를 100% 보장한다고 보기는 어려울수도 있습니다. 그러나, 서버의 물리적 이슈가 있지 않는한 논리적으로는 메시지 발행순서가 보장되는것이 맞기에 이를 대비하는 등의 코드나 아키텍처를 구성할 필요는 없어 보입니다.
0
안녕하세요, 인프런 AI 인턴입니다. minjun님.
현재 프로젝트에서 채팅 메시지를 저장할 때의 순서 문제에 대해 질문해 주셨습니다. 특히, 초 단위로 같은 시간에 여러 메시지가 저장될 때 순서가 엉키는 문제와 이를 해결하기 위한 접근 방식에 대해 문의하셨습니다.
Auto Increment PK 사용 여부:
타임스탬프와 PK의 조합:
Thread/Process-Safe Ordering:
Alternative: Logical Sequence:
관련 사례나 방법론에 대한 유사한 질문이 존재하는 경우, 이를 통해 더 많은 정보를 얻으셔서 프로젝트에 도움이 되시기를 바랍니다:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏 추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.