문제 이해 및 설계 범위 확정
- 사용자는 입력하는 단어는 자동 완성될 검색어의 첫 부분이어야 하나요? 아니면 중간 부분이 될 수도 있나요?(ex. 첫 부분으로 한정하겠습니다.)
- 몇 개의 자동완성 검색어가 표시되어야 하나요?(ex. 5개입니다.)
- 자동 완성 검색어 5개를 고르는 기준이 무엇인가요?(ex. 질의 빈도에 따라 정해지는 검색어 인기 순위를 기준으로 삼겠습니다.)
- 맞춤법 검사 기능도 제공해야 하나요?(ex. 아뇨. 맞춤법 검사나 자동 수정은 지원하지 않습니다.)
- 질의는 영어입니까?(ex. 네 하지만 시간이 허락한다면 다국어 지원을 생각해도 좋습니다.)
- 대문자나 특수 문자 처리도 해야 합니까?(ex. 아뇨 모든 질의는 영어 소문자로 이루어진다고 가정하겠습니다)
- 얼마나 많은 사용자를 지원해야 합니까?(ex. 일간 능동 사용자 기준 천만명 입니다.)
요구 사항 정리
- 빠른 응답 속도: 사용자가 검색어를 입력함에 따라 자동완성 검색어도 충분히 빨리 표시되어야 한다.(100ms 안)
- 연관성: 자동완성되어 출력되는 검색어는 사용자가 입력한 단어와 연관된 것이어야 한다.
- 정렬: 시스템의 계산 결과는 인기도 등 순위 모델에 의해 정렬되어 있어야 한다.
- 규모 확장성: 시스템은 많은 트래픽을 감당할 수 있도록 확장 가능해야 한다.
- 고가용성: 시스템의 일부에 장애가 발생하거나, 느려지거나, 예상치 못한 네트워크 문제가 생겨도 시스템은 계속 사용 가능해야 한다.
개략적 규모 측정
- DAU(일간 능동 사용자)는 천만명
- 평균적으로 한 사용자는 매일 10건의 검색을 수행한다.
- 질의할 때마다 평균 20바이트의 데이터를 입력한다고 가정한다.
- 문자 인코딩 방법으로는 아스키를 사용한다고 가정할 것으로 1 문자는 1바이트이다.
- 질의문은 평균 4개 단어로 이뤄진다고 가정할 것이며 각 단어는 평균적으로 5 글자로 구성된다고 가정
- 질의당 평균 4 * 5 = 20 바이트로 가정
- 검색창에 글자를 입력할 때마다 클라이언트는 검색어 자동완성 백엔드에 요청을 보내며, 평균적으로 1회 검색당 20건의 요청이 백엔드로 전달된다.
- 초당 24,00 건의 질의가 발생할 것이다(10,000,000 * 10 질의 / 일 * 20자 / 24시간/ 3600초)
- 최대 QPS는 48,000
- 질의 가운데 20% 정도는 신규 검색어라고 가정할 것이다(대략 0.4GB)
- 매일 0.4GB 신규 데이터가 시스템에 추가
개략적 설계안 제시 및 동의 구하기
데이터 수집 서비스

- 사용자가 입력한 질의를 실시간으로 수집하는 시스템
- 질의 빈도수에 따라 데이터를 DB에 저장
질의 서비스

select * from frequency_table
where query like 'prefix%'
order by frequency desc
limit 5;
- 주어진 질의에 다섯 개의 인기 검색어를 정렬해 내놓는 서비스
- query: 질의문을 저장하는 필드
- frequency: 질의문이 사용된 빈도를 저장하는 필드
- 가장 많이 사용된 5개 검색어는 SQL을 통해 계산할 수 있다.
- 데이터가 적을 때는 나쁘지 않으나, 양이 많아질수록 데이터베이스 병목이 발생한다.
'대규모 시스템 설계 기초' 카테고리의 다른 글
| Ch05. 안정 해시 설계 (0) | 2025.10.25 |
|---|---|
| Ch04. 처리율 제한 장치의 설계 - 상세 설계 (0) | 2025.10.18 |
| Ch03. 시스템 설계 면접 공략 (0) | 2025.10.07 |