작년 10월 원티드에서 진행한 백엔드 온보딩 챌린지에서 멘토님이 속하신 스터디에서 이 책을 다루셨던 것이 기억난다.
실제로 멘토링 후 백엔드 개발자가 읽어야 할 책들을 여러 개 추천해 주셨는데, 그 중 하나가 이 책이다.
그 책들을 꾸준히 완독해 나가는 중이고, 확실히 백엔드 개발 공부는 책을 통해서 간접 경험을 쌓거나 직접 적용하기에 용이하다고 생각이 들었다.
회사에 이 도서를 요청했고, 오늘 첫 페이지를 펼쳤다.
단일 서버
- 가장 기초적인 서버 구성 단위
- 데이터 베이스 서버도 보통 1개를 둔다.
- RDBMS 많이 사용
- 비정형 데이터이거나, 직렬화 역직렬화 하거나, 많은 양의 데이터를 저장할 경우 비-관계형 데이터베이스가 바람직함.
- 모든 트래픽을 하나의 서버가 감당한다.
수직적 규모 확장 & 수평적 규모 확장
- 스케일 업
- 서버에 고사양 자원을 추가하는 행위
- 유입되는 트래픽의 양이 적을 경우 용이
- 단순하다는 장점
- 한 대의 서버에 CPU나 메모리를 무한대로 증설 못한다는 단점
- 장애 복구 방안이나 다중화 방안을 제시하지 못한다는 단점
- 스케일 아웃
- 서버를 여러 대 추가하는 행위
- 로드 밸런서
- 부하 분산 집합에 속한 웹 서버들에게 고르게 부하를 분산하는 역할
- 하나의 서버가 다운 될 경우 다른 서버로 요청을 나눔. 우아하게 장애 대처 가능.
- 데이터베이스 다중화
- 마스터는 쓰기, 슬레이브는 읽기
- 병렬 처리 되는 질의 수가 늘어나므로 성능이 좋음
- 자연 재해 등의 재난, 장애 상황 대처 가능
- 고가용성 => 장애 서버 대신 다른 서버로 대체 가능
- 최신 데이터가 아닌 슬레이브는 복구 스크립트로 최신화 가능
캐시
- 값 비싼 연산 결과 또는 자주 참조되는 데이터를 메모리 안에 두고, 뒤이은 요청이 빨리 처리될 수 있도록 하는 저장소
- 데이터베이스의 커넥션에 따라 결정되는 서버의 성능을 개선
- 캐시할 데이터의 종류, 크기, 액세스 패턴에 맞는 캐시 전략을 선택
- 데이터 갱신보다 참조가 빈번할 경우 고려 가능
- 영속성 데이터의 저장은 바람직하지 않음
- 데이터 만료 정책을 수립해야함
- 일관성 유지에 만전을 기해야 함.
콘텐츠 전송 네트워크 (CDN)
- 정적 컨텐츠를 전송할 수 있는 지리적으로 분산된 서버의 네트워크
- 정적 컨텐츠를 캐시 가능함.
- 사용자에게 가장 가까운 CDN 서버가 정적 컨텐츠를 전달 => 성능 개선에 용이함.
- 데이터 전송 양에 따라 비용이 청구됨.
- 적절한 만료 시한의 필요성
- CDN과 캐시를 적절히 배치하면 더 나은 성능을 보장한다.
무상태 웹 계층 (stateless)
- 수평적으로 확장해볼 방법을 고려해보자.
- 웹 계층에서 상태 정보를 제거하기 위해 RDBMS 나 NOSQL에 보관하고 필요할 때 가져온다.
- 클라이언트에서 웹 서버로 http 요청을 할 경우, 상태 정보가 DB에 분리되어 있으므로, 구조가 단순하고 안정적이며, 규모 확장이 쉽다.
- 여러 데이터 센터를 지원할 경우 장점이 부각된다.
데이터 센터
- 같은 리전에 다른 데이터 센터를 이용할 경우, 장애 상황을 극복할 수 있다.
- 트래픽 우회, 데이터 동기화, 테스트와 배포등에 기술적 난제를 극복해야 한다.
- 더 큰 규모로 확장하기 위해 시스템의 컴포넌트를 분리해야 하는데, 이때 메시지 큐를 이용할 수 있다.
메시지 큐
- 메시지의 무손실을 보장하는 비동기 통신을 지원하는 컴포넌트
- 메시지 버퍼의 역할을 수행하며 비동기적으로 전송한다.
- 발행자와 구독, 소비자의 구조
- 서버간 결합이 느슨해져서 규모 확장성 보장에 용이하다.
로그 , 메트릭 그리고 자동화
- 에러 로그를 모니터링하는 것이 중요하다.
- 메트릭을 잘 수집하면 사업 현황에 관련된 유용한 정보를 얻고 시스템의 현재 상태를 손쉽게 파악 가능하다.
데이터베이스의 규모 확장
- 수직적 확장
- 고성능의 자원을 증설하는 방법
- 아마존의 AWS가 그 예시
- SPOF로 인한 위험성이 크다
- 비용이 많이 든다는 단점
- 수평적 확장
- 샤딩을 통해 가능
- 해시 함수를 이용하여 샤드를 정한다.
- 샤딩 전략을 구현할 때 샤딩키를 정하는 것이 관건
- 데이터의 재 샤딩, 유명 인사의 조회 문제, 조인과 비정규화 같은 이슈를 극복하는 것이 관건이다.
반응형
'🏛️ Architecture' 카테고리의 다른 글
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 3장 시스템 설계 면접 공략법 (2) | 2023.02.23 |
---|---|
[가상 면접 사례로 배우는 대규모 시스템 설계 기초] 2장 개략적인 규모 추정 (1) | 2023.02.19 |
[만들면서 배우는 클린 아키텍처] Chapter10. 아키텍처 경계 강제하기 (0) | 2022.11.15 |
[만들면서 배우는 클린 아키텍처] Chapter9. 애플리케이션 조립하기 (0) | 2022.11.11 |
[만들면서 배우는 클린 아키텍처] Chapter6. 영속성 어댑터 구현하기 (0) | 2022.10.31 |