
구글 드라이브, 드롭박스, 마이크로소프트 원드라이브, 애플 아이클라우드 등의 클라우드 저장소 서비스는 최근 높은 인기를 누리게 된 대표적 클라우드 서비스다. 이번 장에서는 그 가운데 구글 드라이브 서비스를 설계해 보도록 할 것이다. 설계에 들어가기 앞서 일단 구글 드라이브 서비스가 어떤 서비스 인지 알아보자. 구글 드라이브는 파일 저장 및 동기화 서비스로, 문서, 사진, 비디오, 기타 파일을 클라우드에 보관할 수 있도록 한다. 이 파일은 컴퓨터, 스마트폰, 태블릿 등 어떤 단말에서도 이용 가능해야 한다. 아울러 보관된 파일은 친구, 가족, 동료 들과 손쉽게 공유할 수 있어야 한다. 1 문제 이해 및 설계 범위 확정 구글 드라이브를 설계하는 것은 큰 프로젝트다. 그러니 질문을 통해 설계 범위를 좁혀야 한다..

이번 장에서는 유튜브 시스템을 설계하는 면접 문제를 풀어볼 것이다. 이 문제에 대한 답은 넷플릭스나 훌루 같은 비디오 플랫폼을 설계하는 문제에도 적용 가능하다. 유튜브 시스템은 언뜻 보기에는 간단하다. 콘텐츠 창작자가 비디오를 올리고, 시청자는 재생 버튼을 누른다. 그런데 정말 그렇게 간단한가? 실제로는 그렇지 않다. 이 단순성 이면에는 엄청나게 복잡한 수많은 기술이 숨어 있다. 유튜브에 대한 놀라운 통계자료 몇 가지를 살펴보자. 20202년에 조사된 결과다. - 월간 능동 사용자 수: 2십억 - 매일 재생되는 비디오 수: 5십억 - 미국 성인 가운데 73%가 유튜브 이용 - 5천만 명의 창작자 - 유튜브의 광고 수입은 2019년 기준으로 150억 달러이며 이는 2018년도 대비 36% 증가한 수치 - ..

구글 검색 또는 아마존 웹 사이트 검색창에 단어를 입력하다 보면 입력 중인 글자에 맞는 검색어가 자동으로 완서오디어 표시되는 것을 볼 수 있다. 이런 기능은 보통 검색어 자동완성(autocomplete, typeahead, search-as-you-type, incremental search)이라 부른다. 검색어 자동완성은 많은 제품에 중요하게 사용되는 기능이다. 이번 장에서는 이와 관련하여, 가장 많이 이용된 검색어 k개를 자동완성하여 출력하는 시스템을 설계해보도록 하자. 1 문제 이해 및 설계 범위 확정 시스템 설계 면접의 첫 단계는 적절한 질문을 통해 요구사항을 분명히 하는 것이다. 아래는 본 설계 면접 문제와 관련한 질문과 답변 예제다. 지원자: 사용자가 입력하는 단어는 자동완성될 검색어의 첫 부..

이번 장에서는 채팅 시스템을 설계해 볼 것이다. 채팅 시스템 하나쯤 사용하지 않는 사람은 드물다. 채팅 앱이라고 했을 때 사람들이 떠올리는 것은 제각가이다. 그러니 요구사항을 확실하게 해 두는 것이 아주 중요하다. 예를 들어 면접관이 생각하고 있는게 일대일 채팅 앱일 때 그룹 채팅 앱을 설계하면 곤란할 것이다. 기능 요구 사항을 확실히 알아두도록 하자. 1 문제 이해 및 설계 범위 확정 어떤 채팅 앱을 설계하려는지 확실히 해 두는 것이 면접에서 가장 중요하다. 현재 시장에 나와 있는 앱들을 보면 페이스북, 메신저, 위챗(WeChat), 왓츠앱(WhatsApp)처럼 1:1 채팅에 집중하느 앱들이 있는가 하면 슬랙(Slack) 같은 그룹 채팅에 중점을 둔 업무용 앱이나, 게임 채팅에 쓰이는 디스코드(Disc..

이번 장에서는 뉴스 피드 시스템 설계 문제를 살펴볼 것이다. 뉴스 피드(newsfeed)란 무엇인가? 페이스북의 도움말 페이지는, "뉴스 피드는 여러분의 홈 페이지 중앙에 지속적으로 업데이트되는 스토리들로, 사용자 상태 정보 업데이트, 사진, 비디오, 링크, 앱 활동(app activity), 그리고 여러분이 페이스북에서 팔로하는 사람들, 페이지, 또는 그룹으로부터 나오는 '좋아요(likes)' 등을 포함한다"고 설명하고 있다. 뉴스 피드 시스템 설계는 아주 유명한 면접 문제다. 비슷한 유형의 문제로는 "페이스북 뉴스 피드 설계", "인스타그램 피드 설계", "트위터 타임라인 설계" 등이 있다. 1 문제 이해 및 설계 범위 확정 가장 먼저 해야 할 일은, 뉴스 피드 시스템을 설계하라고 했을 때 면접관의 ..

알림 시스템은 최근 많은은 프로그램이 최택한 인기있는 기능이다. 이 기능을 갖춘 애플리케이션은 최신 뉴스, 제품 업데이트, 이벤트, 선물 등 고객에게 중요할 만한 정보를 비동기적으로 제공한다. 이 기능은 이미 우리 일상생활의 중요한 부분으로 자리 잡았다. 알림 시스템은 단순히 모바일 푸시알림에 한정되지 않고, 모바일 푸시알림, SMS 메시지, 이메일의 세 가지로 분류할 수 있다. 1 문제 이해 및 설계 범위 확정 하루에 백만 건 이상의 알림을 처리하는 확장성 높은 시스템을 구축하는 게 쉬운 과제는 아니다. 알림 시스템이 어떻게 구현되는지에 대한 깊은 이해가 필요한 작업이다. 이에 관한 문제가 면접에 출제 될 때는 보통 정해진 정답이 없고 문제 자체가 모하하게 주어지는 것이 일반적이므로, 적절한 질문을 통..

이번 장에서는 분산 시스템에서 유일 ID를 생성해볼 것 입니다. 아래 문제 이해 및 설계 범위 확정에서 유일 ID 생성기 요구사항을 확인해봅시다. 유일 ID 를 생성하는데 사용 될 수 있는 기법은 총 네가지 입니다. 다중 마스터 복제, UUID, 티켓 서버, 트위터의 스노플레이크 접근법이 있습니다. 이를 차례로 살펴볼 것입니다. 먼저 다중 마스터 복제 입니다. PPT내용으로 갈음합니다. 그다음 UUID인데, UUID는 중복이 발생할 확률이 극히 낮은 방법입니다. 이 내용도, PPT내용으로 갈음합니다. 그다음 티켓서버입니다. 티켓서버도 PPT내용으로 갈음합니다. 마지막으로 스노플레이크 기법입니다. 이번 장에서 가장 주목할 만한 기법입니다. 분할정복을 활용하여 64비트를 각각 나눠서 해결하는 방법입니다. 단..

먼저 이번 장은 내용이 매우 깁니다. 책 주제에서 채팅시스템 설계와 같은 가장 많은 장으로써, 많은 내용을 다룹니다. 다만 내용이 자세하고 깊다기 보다 개념적으로 어루만지는 느낌이라 ... 보다 자세히 보기 위해선, 인터넷 자료나 데이터 중심 애플리케이션 설계라는 책도 같이 보는 것을 추천드립니다. 이번 장에서는 키-값 저장소 설계입니다. 키-값 저장소는 단일 키-값 저장소로 유지하면 충분하지 않아, 그 이상의 것을 이야기 하기 위해 나옵니다. 그 이상의 것은 분산형 키-값 저장소 입니다. 단일 키-값 저장소의 장점은 전부 메모리에 해시테이블로 저장하는 것인데 이 접근 법은 빠른 속도를 보장합니다. 하지만 모든 데이터를 메모리 안에 두는 것이 불가능하다는 약점이 존재 합니다. 다음과 같은 우회법이 있습니..

이번장에서 이야기 할 주제는 안정 해시 설계입니다. 해시 키를 재 배치하는 문제에 대해서 알아볼 것입니다. 수평적 규모 확장을 하기 위해 데이터를 서버에 균등하게 나누는 것인데, 데이터를 서버에 균등하게 나누었을 때 서버의 변화에 따라 생기는 문제에 대한 내용입니다. 서버를 분산했을 때 임의의 데이터를 어떤 서버에 배치시킨다고 할 때 그 데이터를 대표하는 키를 만들고 키에 모듈러 연산을 수행하여 데이터를 해당 서버로 넣습니다. 이 방법이 가장 간단한 방법인데, 간단한 방법이지만, 안타깝게도 서버의 수가 변경한다면 모듈러 연산의 분모가 변경되므로 전반적인 데이터가 저장될 데이터가 변경되게 됩니다. 캐시미스가 많이 발생할 것이고, 이는 감당하기 힘든 문제입니다. 안정해시는 이 문제를 아름답게 해결합니다. 안..
- Total
- Today
- Yesterday
- 명제논리
- javascript
- 자바스크립트
- 이산수학
- flutter
- 엄청난 인내심과 시뮬레이션을 위한 아레나 툴
- 아레나시뮬레이션
- 그라파나
- paul wilton
- 데이터 중심 애플리케이션 설계
- 최단경로 알고리즘
- Simulation
- beginning javascript
- 이산 수학
- rosen
- 시뮬레이션
- Grafana
- Discrete Mathematics
- arena simulation
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 항해99
- Arena
- 대규모 시스템 설계 기초
- Propositional and Predicate Logic
- 아레나 시뮬레이션
- 로젠
- 아레나
- 백준
- 자바스크립트 예제
- grafana cloud
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 | 29 |
30 | 31 |