[1권 - 12장] 채팅 시스템 설계 #22
Replies: 9 comments 22 replies
|
[경험 공유] |
|
[질문 아님, 궁금해서 정리 한 것] 종단간 암호화란?.. 종단간 암호화(End-to-End Encryption; E2EE)는 발신원부터 수신원까지 정보의 암호화를 유지한 채로 전송하는 방식이다. 일반적인 온라인 메시지는:
종단간 암호화된 메시지:
장점:
단점:
결론: 종단간 암호화는 대화 시작할 때부터 끝날 때까지 숨겨주는 디지털 금고 같은 것 |
|
채팅이력 저장소에 대해 NoSQL를 선호한다고 한다. 그걸 Redis나 몽고DB로 구현했을 때의 문제점이 있을까? |
|
[아파치 주키퍼를 서비스 탐색 용도로 사용하는 이유와 사례, 그리고 간단한 구현 방안에 대해서] 분산 환경에서 인스턴스가 동적으로 생성되고 제거된다. 이 때, 서비스간 통신을 위해서는 각 인스턴스의 위치(Host와 Port)를 실시간으로 파악해야 한다. 이를 위해 인스턴스의 상태와 구성 정보를 중앙에서 관리해 줄 필요가 생긴다. 서비스 디스커버리는 다음과 같은 기능을 제공해 준다.
// 서비스 등록
public class ServiceRegistry {
private ZooKeeper zk;
private String servicePath = "/services";
public void registerService(String serviceName, String serviceEndpoint) {
// 임시(ephemeral) 노드로 서비스 등록
String path = servicePath + "/" + serviceName;
zk.create(path, serviceEndpoint.getBytes(),
ZooDefs.Ids.OPEN_ACL_UNSAFE,
CreateMode.EPHEMERAL_SEQUENTIAL);
}
public List<String> discoverService(String serviceName) {
// 서비스 조회
String path = servicePath + "/" + serviceName;
List<String> children = zk.getChildren(path, true);
return children.stream()
.map(this::getServiceData)
.collect(Collectors.toList());
}
}서비스 디스커버리의 실제 사용 사례는 다음과 같다.
서비스 디스커버리는 CAP중 CP를 보장한다. 구현시 고려사항은 주키퍼 앙상블의 크기(3-5대 권장) 외에 아래와 같다.
|
|
WebSocket vs WebRTC for Chat Systems? 책보면서 계속 의문이 든 점.. 책에서는 계속 WebSocket으로 설계하던데, WebRTC를 쓰면 어떨까? 장점:
근데 쓰다보니깐 문제점들... 확장성 이슈
신뢰성
내가 생각한 결론:
|
|
[채팅 시스템을 보다가 궁금해짐] |
|
라운드 로빈 로드 밸런싱 환경에서는 클라이언트가 처음 요청을 보낸 서버와 이후 메시지를 받을 서버가 다를 수 있기에 롱폴링이 적절하지 않을 수 있다면 웹소켓은 이 약점을 보완할 수 있을까?
해결 방법: 궁금증: |
|
저장소로서 서버의 DB가 아닌 로컬 스토리지를 사용하는 방식을 함께 고려해보는건 어떨까요? |
|
[서버가 다른 사용자의 채팅은 어떻게 이뤄지는가?] (도와줘 GPT) 1. 클라이언트 → 서버: 메시지 전송
2. 서버 내부 처리서버는 메시지를 받는 순간, 주로 다음 과정을 거칩니다.
3. 서버 → 클라이언트(수신자): 메시지 전달
4. 그룹 채팅(다수 사용자)
|
Uh oh!
There was an error while loading. Please reload this page.
채팅 시스템 설계 파트를 공부하며 토론해 볼 내용을 정리 해봅시다!
All reactions