차단 등 검증 로직의 위치
2
8 asked
WhatsApp 채팅 아키텍처 설계에 대한 질문입니다. 영상에서는 참가자가 ws 서버에 메시지를 보내면 바로 Redis pub/sub으로 들어가고, 람다나 Stream을 통해 DB로 저장하는 방식을 설명하고 있습니다.
하지만 DB 저장에 앞서 채팅방 참가 여부 검증, 메시지 전송 차단/해제, 구독자만 전송 가능 등의 검증(validation)이 필요한 경우가 있을 것 같습니다. 또한 이 경우 사용자에게 메시지 전송 실패/불가라는 즉각적인 피드백도 제공해줘야 할 것입니다. ws 서버에서는 보통 검증 로직은 담당하지 않는 것으로 알고 있는데, 이 경우 어디에 검증 로직을 넣는 게 적당할까요?
Answer 1
0
안녕하세요, 인프런 AI 인턴입니다. 한재현님께서는 WhatsApp 채팅 아키텍처의 설계 관련하여 검증 로직에 대한 질문을 주셨습니다. 이 질문은 백엔드 시스템 설계에서 메시지 전송을 위한 검증 로직의 위치를 결정하는 중요한 주제입니다.
검증 로직의 위치
웹소켓(ws) 서버:
- 즉각적인 피드백 제공: 사용자가 메시지를 보낼 때, 즉각적인 피드백을 제공하기 위해서는 웹소켓 서버에서 가능한 검증을 수행하는 것이 유리할 수 있습니다. 예를 들어, 채팅방 참가 여부와 같은 간단한 검증은 웹소켓 서버에 캐싱된 데이터를 이용하여 빠르게 처리할 수 있습니다.
- 즉각적인 피드백 제공: 사용자가 메시지를 보낼 때, 즉각적인 피드백을 제공하기 위해서는 웹소켓 서버에서 가능한 검증을 수행하는 것이 유리할 수 있습니다. 예를 들어, 채팅방 참가 여부와 같은 간단한 검증은 웹소켓 서버에 캐싱된 데이터를 이용하여 빠르게 처리할 수 있습니다.
미들웨어 또는 API 게이트웨이:
- 공통 검증 로직 적용: 여러 서비스가 연결되는 환경에서는 미들웨어나 API 게이트웨이를 통해 검증 로직을 관리할 수 있습니다. 이는 코드 중복을 줄이고 공통 로직을 한 곳에서 관리하게 해줍니다.
- 공통 검증 로직 적용: 여러 서비스가 연결되는 환경에서는 미들웨어나 API 게이트웨이를 통해 검증 로직을 관리할 수 있습니다. 이는 코드 중복을 줄이고 공통 로직을 한 곳에서 관리하게 해줍니다.
Lambda 또는 Stream 처리 전에:
- 최종 검증 단계: Lambda나 Stream 처리 전에 최종 검증을 통해 데이터의 무결성을 한 번 더 확인할 수 있습니다. 이 단계에서 데이터베이스 조회와 같은 복잡한 검증이 수행될 수 있습니다.
- 최종 검증 단계: Lambda나 Stream 처리 전에 최종 검증을 통해 데이터의 무결성을 한 번 더 확인할 수 있습니다. 이 단계에서 데이터베이스 조회와 같은 복잡한 검증이 수행될 수 있습니다.
피드백 제공
즉각적인 피드백이 필요한 검증 로직은 요청이 처리될 때마다 클라이언트에게 바로 결과를 반환하는 구조가 필요합니다. 이는 비동기적으로도 구현할 수 있으며, 사용자 친화적인 경험을 제공합니다.
관련된 질문과 답변을 통해 더 많은 정보를 얻고자 하신다면 아래 링크를 참고하세요:
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
Substack 1년 제공
1
36
3
특별 학습 자료 프로모션 1년 멤버십 무료 제공 문의드립니다
0
33
2
특별 학습 자료 프로모션 1년 멤버십 제공 관련 문의 드립니다.
0
77
2
simcached를 검색을 했을때 해당 자료가 나오지 않는데 혹시 MemcachedGPU 라고 불리는 기술을 말씀하시는건가요?
0
70
1
유튜브 예제에서 흐름 관련 질문있습니다
0
55
2
Spotify 서비스 설계에서 transcoder service에 대해 문의 드립니다.
0
78
1
특별 학습 자료 프로모션 1년 멤버십 무료 제공 지원 확인 방법
0
105
2
[위치 이름 기반으로 호텔을 조회하는 메서드] 코드 질문 드립니다.
0
54
2
14강. 영화 DVD 대여 시스템 데이터베이스 스키마 설계에서 Inventory 테이블 질문있습니다.
0
86
2
Matching Service의 MQ 필요성, Cassandra의 필요성, Cassandara - RDB 동기화
0
96
2
Imgur 이미지 호스팅 서비스 질문
0
91
2
쿠폰 문의
0
94
1
Redis 랜덤 값 추가 시 메타데이터 저장
0
94
1
Blob Storage에서 파일 업로드에 대한 동시성을 어떻게 제어할 수 있을까요?
0
111
2
채팅을 영속할 DB로 RDB를 선택한 이유도 궁금합니다
0
286
2
URL 단축 서비스에서 redis counter를 사용하는 이유가 무엇인지 궁금합니다.
0
219
2
long url을 파티션키로 지정했을때 장점이 생각 안나네요 ㅎㅎ;;
0
143
2
실제 인터뷰에서도 Object Oriented Design 을 이런 과정으로 하는걸까요?
0
170
1
able to get all students who got a "d+" grade or lower 요구사항
0
123
1
number of copies 컬럼은 Inventory Table에 들어가야하지않을까요?
0
176
3
Spotify 서비스 시스템 디자인 및 스케일링에서 백업 클러스터 사용에 대한 문의
0
97
2
URL 단축 서비스 시스템 디자인 및 스케일링 질문있습니다.
0
197
2
예시 두개가 납득이 잘 가지않네요 ㅠㅠ
1
213
2
강의자료는 제공 불가능할까요?
0
228
1

