본문 바로가기
서평

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

by jisung-kim 2023. 11. 12.

/

종합평

시스템설계는 개발자에게 무조건 알아야하는 부분이다.

단순히 SI성 개발이 아니라면, 회사는 여러개의 서비스를 운영하고 있다,

고객들이 사용하는 상용서비스, 내부 직원들이 사용하는 관리자 서비스. 대리점들이 사용하는 서비스, 암호화 파일 서버 등 고객 눈에 보이는 서비스는 빙산의 일각이다.

그렇기 때문에 입사하고 가장 먼저 해야하는것이 시스템을 파악하고 서버를 파악하는것이다

WEB,WAS,DB 각각 여러대의 서버가 있고, 이중화까지 되어있다면 정말 수십대의 서버가 돌아간다

이걸 쉽사리 파악하긴 쉽지않다. 하지만 자주 사용하거나 담당하게된 부분의 시스템은 빠르게 이해해야한다. 

그러기 위해선 해당 지식이많이 필요한데 이책은 상당히 도움이 된다.

구매하여 읽어보기를 강추한다. 

 

 

1장 사용자 수에 따른 규모 확장성

 웹 어플리케이션 서버에 대한 간략한 서론이 나온다

WebServer, Web ApplicationServer, DB Server의 기본적인 구성과 더불어 캐시서버, DB 이중화,  메시지큐, CDN에 대한 간략한 설명이 이루어진다. 개요로서 딱 좋다

2장 개략적인 규모 측정

2장에서는 규모를 측정할 수 있는 응단지연시간에 대해 알려준다.

 

3장 시스템 설계면접 공략법

3장에서는 시스템 면접에 대해 알려준다.

본인은 아직 주니어라 그런지 시스템면접을 경험해보지 못했다. 단순히 아키텍쳐 정도만 설명해보라는 질문은 받았었다.

하지만 현회사에서도 그렇고 직전회사에서도 그렇고 8~15년차 시니어를 뽑을때 시스템설계까지 세세하기 물어봤다.

그래서 이책을 산 이유이기도 하다. 3장에서 시스템 면접을 어떻게 파고 들어야하는지 알 수 있었다.

 

4장 처리율 제한 장치의 설계

4장에서는 처리율제한하는 방법에 대해 알려준다. 

토큰버킷, 누출버킷, 고정 윈도 카운터, 이동 윈도 카운터 

네이버 스마트스토어 API 연동할때 호출 제한에 걸려서 고민한적이 있었는데 그때 왜 이렇게 해놨을까 생각했었는데, 4장을 보면서 왜 그랬는지 알게 되었다.

 

5장 안정해시설계

시스템의 수평적 규모 확장성을 높이기 위한 설계, 해시 키 재배치 문제를 해결하기 위해 "안정해시"에 대한 설명을 길게 해준다.해시 공간과 해시 링,  해시 키

그리고 해시 키의 균등분포를 위한 가상 노드에 대한 설명.

 

6장 키-값 저장소 설계

NOSQL DB 설계에대해 알 수 있었다.

NOSQL DB 설계는 굉장히 복잡하고 어려웠으며 나중에 한 번 더 읽어볼 생각이다.

크게 단일서버 키-값 저장소 / 분산 키-값 저장소가 있고,

일관성과 파티션 감내를 지원하는 CP 시스템, 

가용성과 파티션 감내를 지원하는 AP시스템,

일관성과 가용성을 지원하는 CA시스템 으로 나눠진다.

데이터 파티션, 데이터 다중화, 데이터 일관성, 장애처리에 대해서도 알수 있었다.

데이터 파티션, 점진적 규모확장성, 다양성에서도 5장에서 알게된 안정해시가 쓰인다. 

 

7장 분산시스템을 위한 유일 ID생성기 설계

유일성이 보장되는 ID를 생성하는 방법에대해 알려준다.

트위터가 사용하는? 스노플레이크방법에 대해 자세히 알려준다.

간략하게 설명하면 샤인비트 +타임스탬프 + 데이터센터ID + 서버ID + 일련번호 이다.

여기서 재밌는점은 타임스탬프 때문에 69년이 지나면 기원시각을 바꾸거나 ID체계를 바꿔야 한다는 점이다.

 

8장 URL 단축기 설계

tinyURL에 대해 알수 있다.  url을 단축시키는데 해시 함수를 사용하며 hashvalue를 사용하기 위해 base-62 진법을 사용한다.

 

9장 웹크롤러 설계

웹 크롤링은 다양하게 주로 검색엔진인덱싱, 웹 아카이빙, 웹 마이닝, 웹 모니터링 등을 사용하는데 이용된다.

주의해야할 점은 중복콘텐츠, URL중복, 도메인변환기,그리고 불법적인 사이트 검증, 거미덫 그리고 예절..

수집 대상 웹 사이트에 짧은 시간동에 너무 많은 요청을 보낼경우 Dos 공격이 될 수 도 있다.

웹크롤링 분산 설계 등... 

10장 알림 시스템 설계

알림시스템 설계시 고려해야할 점은 APNS(IOS), FM(AOS), SMS메세지 이다.

또, 전송률도 제한해야한다. 너무 잦은 알림은 고객에게 부정적인 느낌을 주기 때문..

메시지 큐, 안정성,보안,이벤트추적 및 모니터링, 알림설정, 전송률제한 등  알림시스템 설계에 대한 내용을 알 수 있다.

 

11장 뉴스피드시스템

뉴스피드 설계 같은경우 '피드발행'과 '뉴스 피드 생성' 두 유형으로 나눠진다.

DNS와 웹서버, 처리율제한장치, 포스팅 저장서비스 , 포스팅전송서비스로 크게 나눠진다.

쓰기 시점에 팬아웃, 읽기 시점에 팬아웃 이 있다.

전자 같은경우 뉴스피드가 실시간으로 갱신되며 친구들에게 즉시 전송된다. 하지만 뉴스피드를 갱신하는데 많은 소요시간이 든다.

후자의 경우 요청 기반 모델이며 사용자가 뉴스피드를 로딩할때 갱신된다. 

가장 뉴스피드시스템의 핵심이 되는 캐시 구조도 아주 자세히 나와있다.

 

12장  채팅 시스템 설계

클라이언트들로부터 메시지 수신, 메시지 수신자 결정 및 전달, 수신자가 접속 상태가 아닌 경우에는 접속할 때까지 메시지 보관, 이렇게 3가지가 간략적인 기능이다.

폴링기법, 웹소켓, 주키퍼로 구현한 탐색, 그리고 종단간 암호화까지

채팅시스템에대한 복잡한 내용을 간편하게 슥 훑을 수 있었다. 

 

13장 검색어 자동완성 시스템

검색어 자동완성 같은경우 트라이 자료구조, 데이터 수집 서비스 ,질의 서비스, 규모 확장이 가능한 저장소, 트라이 연산 등에 대하여 알 수 있다.

서비스 성능에 대한 접두어에 대한 최대길이, 자주 검색하는 인기 검색어에 대한 캐싱, 그리고 데이터를 분석하기 위한 로깅,

부가적인 기능인 혐오표현에 대한 처리방법,  다국어 지원방법에 대해서도 알 수있다.

 

14장 유투브 설계

유투브 설계 같은경우 각 국

15장 구글 드라이브 설계