
요구사항기능적 요구사항사용자가 입력하는 단어는 검색어의 첫 부분으로 한정5개의 자동완성 검색어가 표시질의는 영어로만 지원Spelling 체크 X시스템의 계산 결과는 순위 모델에 의해 정렬비기능적 요구사항시스템 응답속도는 100밀리초 이내규모 확장성: 초당 24000 건의 질의(QPS) 발생시스템 구조자료 구조나이브한 아키텍처는 아래와 같음query frequencyramen23radiation2간단하게 질의문을 저장하는 query 필드와 빈도를 저장하는 frequency 필드를 저장하는 DB 테이블을 만들어서 SELECT * from frequency_table WHERE query LIKE 'ra%' ORDER BY frequeny DESC LIMIT 5 이렇게 질의할 수도 있겠지만 데이터가 많아지면 ..

DDDDDD는 비즈니스 도메인을 중심으로 소프트웨어를 모델링하는 설계 방법엔티티, 밸류 객체, 애그리거트, 도메인 서비스 등으로 구조화하여비즈니스 복잡성을 효과적으로 다루고 유지보수를 쉽게 만듦1. 도메인(Domain)비즈니스의 문제 영역 (ex: 금융, 쇼핑몰, 물류 등)2. 서브도메인(Subdomain)도메인을 구성하는 하위 영역 (ex: 결제, 주문, 배송 등)3. 유비쿼터스 언어(Ubiquitous Language)도메인 전문가와 개발자가 같은 단어를 같은 의미로 사용하는 공통 언어예: "주문 승인", "상품 할인", "잔액 부족"4. 엔티티(Entity)고유 ID로 식별되는 객체 (ex: 사용자, 주문, 상품 등)5. 밸류 오브젝트(Value Object)고유 ID 없이 값 자체로 의미가 있는 ..

알림 시스템 설계하기 요구 조건알림 지원 형태: 푸시 알림, SMS 메시지, 이메일soft real-time 시스템; 가능한 빨리 전달되어야 하나 약간의 지연은 OKiOS 단말, 안드로이드 단말, 랩톱/데스크탑 지원사용자가 알람을 받지 않도록 설정 가능성능: 약 천만 건의 모바일 푸시 알림 보낼 수 있어야 함시스템 구성알림 메커니즘 동작 방식알림 제공자: 알림 요청을 만들어 사용자 단말에 알림을 실제로 보내는 제3자 알림 서비스에 전송함. 제3자 알림 서비스에는 APNs(iOS), FCM(Android), Twilio(SMS) 등이 있음. 알림 요청을 만들려면 다음과 같은 데이터가 필요.단말 토큰: 알람 요청 보내는데 필요한 고유 식별자payload: 알림 내용을 담은 JSON 딕셔너리시스템 구조도각 서..

분산 키-값 저장소분산 시스템 설계 시 고려해야 할 점들CAP 정리데이터 일관성 (Consistency) : 분산 시스템에 접속하는 모든 클라이언트는 어떤 노드에 접속했느냐에 상관없이 언제나 같은 데이터를 봐야 함가용성 (Availability) : 분산 시스템에 접속하는 클라이언트는 일부 노드에 장애가 발생하더라도 항상 응답을 받을 수 있어야 함파티션 감내 (Partition tolerance): 파티션은 두 노드 사이에 장애가 발생하였음을 의미, 파티션 감내는 네트워크에 파티션이 생기더라도 시스템은 계속 동작함을 의미이 3가지 요소를 동시에 만족시키는 분산 시스템을 설계하는 것은 불가능하다. 네트워크 장애는 피할 수 없는 것으로 여겨지므로, 파티션 감내는 반드시 감내할 수 있도록 설계되어야 함. 보통..

이번 장에서는 어떻게 데이터를 고르게 분산할 수 있는지에 대해 알아본다.일반적으로, 데이터를 N 개의 서버에 나누어서 저장하게 될 때 해시 함수를 이용해서 데이터를 분배해서 저장하는 방법을 생각하게 된다. (해시 테이블과 유사)그러나 이 방법은 다음과 같은 취약점이 있다.특정 서버에 장애가 발생할 경우, 장애가 발생한 서버에 저장된 데이터가 모두 재배치 되어야 한다캐시 서버일 경우, 장애가 발생한 서버에 저장된 키였을 경우 그 키에 대한 데이터가 없는 다른 서버에 접속하게 되어 대규모 cache miss 가 날 수 있다Hotspot key 문제가 발생할 수 있다 → 데이터를 균등하게 배치하지 못해 특정한 샤드에 대한 접근이 많을 경우이다.안정 해시(consistent hash) 는 해시 테이블 크기가 조..