가상 면접 사례로 배우는 대규모 시스템 설계 기초 책을 바탕으로 정리한 내용입니다.
웹 앱, 데이터베이스, 캐시 등이 전부 서버 한 대에서 실행된다.
{
"id": 12,
"firstName": "John",
"lastName": "Smith",
"address": {
"streetAddress": "21 2nd Street",
"city": "New Tork",
"state": "NY",
"postalCode": 10021
},
"phoneNumbers": [
"212 555-1234",
"646 555-4567"
]
}
사용자가 많아지면 단일 서버로는 충분하지 않아서 여러 서버를 두어야 한다.
하나는 웹/모바일 트래픽 처리 용도이고, 다른 하나는 데이터베이스용이다.
어떤 데이터베이스를 사용할 것인가?
1. 관계형 데이터베이스(Relational Database)
2. 비-관계형 데이터베이스(NoSQL)
구분 | RDBMS | NoSQL |
---|---|---|
DB | MySQL, ORACLE, PostgreSQL, Aurora | MongoDB, CouchDB, Neo4j, HBase, Amazon DynamoDB |
데이터 모델 | 테이블 간 관계를 기반으로 한 정형화된 데이터 모델 | 비정형화된 데이터 모델 키-값(key-value), 그래프(graph), 칼럼(column), 문서(document) 저장소(store) 등 |
확장성 | 수직적 확장방식으로 확장성이 제한적 | 수평적 확장방식으로 확장성이 우수 |
트랜잭션 | ACID 지원 | ACID보다 덜 엄격한 BASE(Basically Available, Soft State Eventual consistency) |
적용 분야 | 고정적인 스키마, 복잡한 관계를 갖는 데이터 | 대규모 데이터, 높은 확장성, 유연한 스키마 등 |
예시 | 금융권, 주문 관리, 인사 관리 등 | 소셜 미디어, IoT 기기 데이터 수집, 로그 데이터 분석 등 |
'스케일 업(scale up)'이라고 불리는 수직적 규모확장(vertical scaling) 프로세스는 서버에 고사양 자원(더 좋은 CPU, 더 많은 RAM 등)을 추가하는 행위이다.
'스케일 아웃(scale out)'이라고 불리는 수평적 규모확장(horizontal scaling) 프로세스는 더 많은 서버를 추가하여 성능을 개선하는 행위이다.
서버로 유입되는 트래픽의 양이 적을 때는 수직적 확장이 좋은 선택이다.
하지만, 수직적 규모 확장에는 한계가 있다.
따라서 대규모 애플리케이션을 지원하는 데는 수평적 규모 확장법이 더 적절하다.
부하 분산 집합(load balancing set)에 속한 웹 서버들에게 트래픽 부하를 고르게 분산하는 역할을 한다.
사용자가 웹 서버에 바로 연결될 때, 웹 서버가 다운되면 사용자는 웹 사이트에 접속할 수 없다. 또한, 너무 많은 사용자가 접속하여 웹 서버가 한계 상황에 도달하게 되면 응답 속도가 느려지거나 서버 접속이 불가능해질 수도 있다.
예제
서버 1
이 다운되면 모든 트래픽은 서버 2
로 전송된다. 따라서 웹 사이트 전체가 다운되는 일이 방지된다. 부하를 나누기 위해 새로운 서버를 추가할 수도 있다.🗒️ 사설 IP 주소: 같은 네트워크에 속한 서버 사이의 통신에만 쓰일 수 있는 IP 주소로, 인터넷을 통해서는 접속할 수 없다. 로드밸런서는 웹 서버와 통신하기 위해 사설 주소를 이용한다.
대부분의 DBMS는 다중화를 지원한다. 구조는 주로 주(master)
- 부(slave)
관계로 되어 있다. 쓰기연산(write operation)은 master
에서만 가능하며, slave
에서는 master
에서 변경된 데이터의 사본을 전달 받아 읽기 연산(read operation)만을 수행한다.
대부분의 애플리케이션은 읽기 연산이 쓰기 연산보다 많기 때문에 일반적으로 부 데이터베이스의 수가 주 데이터베이스의 수보다 많다.
따라서 데이터베이스 다중화는 더 나은 성능, 안정성(reliability), 가용성(availability)의 장점을 갖고 있다.
다음은 로드밸런서와 데이터베이스 다중화를 고려한 설계안이다.
🗒️ 쓰기 연산: insert, update, delete