가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 정리 1장 규모 확장성
요약
가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰
아키텍처 개념을 실제 설계 판단에 연결하기 위한 참고 노트입니다.
핵심 포인트
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초 리뷰
- 가상 면접 사례로 배우는 대규모 시스템 설계 기초
- 1장 사용자 수에 따른 규모 확장성
- DB 관련으로 고민할 문제
- 캐시
지식 그래프
정리 내용
가상 면접 사례로 배우는 대규모 시스템 설계 기초
학습 목적으로 정리한 내용으로 문제가 있다면 내리겠습니다.
(이 책은 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 인사이트에 있습니다. 저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단 복제를 금합니다.)
1장 사용자 수에 따른 규모 확장성
DB 관련으로 고민할 문제
- 어떤 데이터 베이스를 선택할 것인가?
- 관계형 데이터베이스와 비-관계형 데이터베이스 사이에서 고를 수 있다.
- 수직적 규모 확장과 수평적 규모 확장
- 스케일 업 → 수직적 규모 확장 → 고사양 자원으로 리소스를 업그레이드하는 과정
- 스케일 아웃 → 수평적 규모 확장 → 서버를 추가하여 성능을 개선하는 과정 → 스케일업, 스케일아웃은 각 장단점이 존재하고 현재 시스템의 상황과 트래픽의 상황을 보고 결정해야한다. 이 책에서는 데이터 베이스의 다중화와 읽기, 쓰기 데이터 베이스의 분산으로 트래픽과 부하를 분산한다. 또한 로드벨런스를 사용하여 트래픽을 분산한다고 밝히고 있다.

캐시
캐시는 데이터가 잠시 보관되는 곳으로 데이터베이스보다 훨씬 빠르다. 데이터베이스의 부하 개선을 위해 사용한다.
- 캐시를 사용할 때 주의 할 점
- 캐시는 어떤 상황에 바람직하게 쓰일 수 있는 가?
- 데이터 갱신은 자주 일어나지 않지만 참조(검색)는 빈번하게 일어난다면 캐시를 사용해야한다.
- 캐시는 휘발성 메모리이므로 영구적(영속적)으로 보관할 데이터는 캐시 데이터에 저장하면 안된다.
- 캐시에 보관된 데이터는 어떻게 Expir(만료)되는가?
- 이에 관한 정책 설정이 캐시에서 중요한 포인트이다. 만료된 캐시는 반드시 삭제되어야만 한다.
- 캐시는 어떤 상황에 바람직하게 쓰일 수 있는 가?
무상태(Stateless) 웹 계층
수평적으로 확정하는 방법을 고민하는 순서이다. 상태 정보( 사용자 세션 정보)를 웹 계층에서 제거하여야한다. 바람직한 전략은 상태 정보를 관계형 데이터베이스나 NoSQL같은 지속성 저장소에 보관하고, 필요할 때 가져오도록 하는 것이다. 이렇게 구성된 웹 계층을 무상태 웹계층이라 부른다.
상태 정보 의존적인 아키텍처

결론적인 아키텍처
무상태 아키텍처
1장에서 말한 내용을 적용한 아키텍처이다.
- 웹 서버의 분산, 데이터 베이스의 분산
- 캐싱
- 메시지큐
- 로그, 메트릭, 자동화 등 DevOps 적인 성향의 툴
- CDN
- 로드밸런
데이터 베이스의 확장
데이터 베이스의 확장에는 수직적 확장 (스케일업), 수평적 확장(스케일 아웃)이 있다. 수직적 확장 - 스케일 업 기존 서버에 고성능 자원을 증설하는 방법이다.
- 고성능 자원이라도 한대의 서버로는 감당하기 어려운 한계점이 있다.
- SPOF의 문제가 크다.
- 비용이 많이 든다. 고성능일 수록 가격이 올라가기 마련이다. 수평적 확장 - 스케일 아웃 DB의 수평적 확장은 수로 샤딩(Sharding)이라고도 부르는데 서버를 추가함으로써 부하를 줄이고 성능을 향상시는 작업이다. 샤드는 분할된 데이터베이스에 특정 정책에 따라 데이터를 저장하는 공간을 정한다. 예를 들어 User_id % 4의 정책이라면 나머지값으로 4개의 데이터 베이스 중 어디에 저장되는지 정하는 보관 방식이다. 샤딩 키 샤딩 키란 데이터가 어떻게 분산될지 정하는 하나 이상의 컬럼으로 구성된다. User_id%4의 경우 user_id가 샤딩 키가 된다. 데이터를 고르게 분배할 수 있는 키를 정하는 것이 샤딩의 핵심 기술이다.
- 데이터의 재 샤딩 : 재 샤딩은 다음과 같을 때 필요하다.
- 데이터가 ㅇ너무 많아져서 하나의 샤드로는 더 이상 감당이 힘들 때
- 샤드 간 데이터 분포가 균등하지 않아 샤드의 불균형이 생길 때
- 유명 인사 문제 : 핫스팟 키 문제라고도 불리는 문제는 샤드의 질의가 집중되어 서버에 과부하가 걸리는 문제이다. 샤드에는 Read연산 때문에 과부하가 걸리는 문제이다.
- 조인과 비정규화 : 일단 하나의 데이터베이스를 여러 샤드 서버로 쪼개고 나면, 여러 샤드에 걸친 데이터를 조인하기가 힘들어진다. 이를 해결하는 한 가지 방법은 데이터베이스를 비정규화 하여 하나의 테이블에서 질의가 수행될 수 있도록 하는 것이다.
결론

학습 목적으로 정리한 내용으로 문제가 있다면 내리겠습니다.
(이 책은 한국어판 저작권은 에이전시 원을 통해 저작권자와의 독점 계약으로 인사이트에 있습니다. 저작권법에 의해 한국 내에서 보호를 받는 저작물이므로 무단전재와 무단 복제를 금합니다.)
출처
- 원문: https://www.notion.so/1-245172a556d6802e8450f1274ddbd345
- Vault path: wiki/notes/system-design/가상-면접-사례로-배우는-대규모-시스템-설계-기초---정리-1장-규모-확장성.md