본문 바로가기

가상 면접 사례로 배우는 대규모 시스템 설계 기초

(5)
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 분산 시스템을 위한 유일 ID 생성기 설계 1) 서문- 이번 장에서는 분산 시스템에서 사용될 유일 ID 생성기를 설계해볼 것이다.  이 질문을 받았을 때 여러분은 "auto_increment 속성이 설정된 관계형 데이터베이스의 기본 키를 쓰면 되지 않을까?"  하고 생각할지도 모르겠다.  하지만 분산 환경에서 이 접근법은 통하지 않을 텐데, 데이터베이스 서버 한 대로는 그 요구를 감당할 수 없을 뿐더러,  여러 데이터베이스 서버를 쓰는 경우에는 지연 시간(delay)을 낮추기가 무척 힘들 것이기 때문이다. 2) 문제 이해 및 설계 범위 확정- 시스템 설계 면접 문제를 푸는 첫 단계는 적절한 질문을 통해 모호함을 없애고 설계 방향을 정하는 것이다.   다음은 면접관과 지원자 사이에 오갈 수 있는 질문과 답변의 예시다. 지원자: ID는 어떤 특성을 ..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 1장 사용자 수에 따른 규모 확장성 - 수직적 규모 확장 vs 수평적 규모 확장 1) 서문- 소위 스케일 업(scale up)이라고도 하는 수직적 규모 확장(vertical scaling) 프로세스는 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가하는 행위를 말한다. 반면, '스케일 아웃(scale out)'이라고도 하는 수평적 규모 확장 프로세스는   더 많은 서버를 추가하여 성능을 개선하는 행위를 말한다.  - 서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이며, 이 방법의 가장 큰 장점은 단순함이다.  그러나 불행하게도 이 방법에는 몇 가지 심각한 단점이 있다. (1) 수직적 규모 확장에는 한계가 있다. 한 대의 서버에 CPU나 메모리를 무한대로 증설할 방법은 없다(2) 수직적 규모 확장법은 장애에 대한 자동복구(failover) 방안이나 다..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 뉴스 피드 시스템 설계 1) 서문- 이번 장에서는 뉴스 피드 시스템 설계 문제를 살펴볼 것이다. 뉴스 피드(news feed)란 무엇인가?  페이스북의 도움말 페이지는, "뉴스 피드는 여러분의 홈페이지 중앙에 지속적으로 업데이트되는 스토리들로,  사용자 상태 정보 업데이트, 사진, 비디오, 링크, 앱 활동(app activity), 그리고 여러분이 페이스북에서 팔로하는 사람들,  페이지, 또는 그룹으로부터 나오는 '좋아요(likes)' 등을 포함한다"고 설명하고 있다.  뉴스 피드 시스템 설계는 아주 유명한 면접 문제다.  비슷한 유형의 문제로는 "페이스북 뉴스 피드 설계", "인스타그램 피드 설계", "트위터 타임라인 설계" 등이 있다.  2) 문제 이해 및 설계 범위 확정- 가장 먼저 해야 할 일은, 뉴스 피드 시스템을 설..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 알림 시스템 설계 1) 개요- 알림 시스템(notification system)은 최근 많은 프로그램이 채택한 인기 있는 기능이다.  이 기능을 갖춘 애플리케이션 프로그램은 최신 뉴스, 제품 업데이트, 이벤트, 선물 등 고객에게 중요할 만한 정보를  비동기적으로 제공한다.   이 기능은 이미 우리 일상생활의 중요한 부분으로 자리 잡았다.  이번 장에서는 바로 이 알림 시스템을 설계해 볼 것이다.  - 알림 시스템은 단순히 모바일 푸시 알림(mobile push notification)에 한정되지 않는다.   사실 알림 시스템은 모바일 푸시 알림, SMS 메시지, 그리고 이메일의 세 가지로 분류할 수 있다.   그림 10-1에 각각의 예가 나와 있다.   1단계) 문제 이해 및 설계 범위 확정- 하루에 백만 건 이상의 알림..
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 채팅 시스템 설계 (1) 1) 개요 - 이 글에서는 채팅 시스템을 설계해 볼 것이다  채팅 시스템 하나쯤 사용하지 않는 사람은 드물다   채팅 앱이라고 했을 때, 사람들이 떠올리는 것은 제각각이다.  그러니 요구사항을 확실하게 해 두는 것이 아주 중요하다.  예를 들어, 면접관이 생각하고 있는 게 일대일 채팅 앱일 때 그룹 채팅 앱을 설계하면 곤란할 것이다.  기능 요구사항을 확실히 알아두도록 하자. 1단계) 문제 이해 및 설계 범위 확정 - 어떤 채팅 앱을 설계하려는지 확실히 해 두는 것이 면접에서 가장 중요하다.  현재 시장에 나와 있는 앱들을 보면 페이스북 메신저, 위챗, 왓츠앱처럼   1:1 채팅에 집중하는 앱들이 있는 가 하면  슬랙(Slack) 같은 그룹 채팅에 중점을 둔 업무용 앱이나, 게임 채팅에 쓰이는 디스코드(..