1. 문제점
자신이 개발한 서비스의 사용자수가 늘어나고 동시에 접속한다면 서버 하나로는 부족합니다.
이러한 대규모 트래픽을 감당할수 있도록 서버의 성능을 향상시켜야 합니다.
Scalability
시스템의 늘어나는 작업량을 자원을 추가하는 방법으로 처리하는 능력입니다. - 출처 위키피디아
시스템이 더 많은 작업을 처리하기 위해 이를 감당할 리소스를 추가하는 것도
하나의 Scalability라고 할 수 있습니다.
얼마나 많은 트래픽을 처리할 수 있는지, 스토리지 용량을 추가하기가 얼마나 쉬운지,
얼마나 많은 트랜잭션을 처리할 수 있는지 등 시스템 안에서도 많은 부분이 Scalability로 설명됩니다.
이러한 관점에서 시스템의 더 나은 성능을 위해 리소스를 확장하는 방법은 두 가지 방법이 있습니다.
2. 서버 확장 방법 Scale UP, Scale Out
- ScaleUp -
Scale Up이란 서버의 사양을 높이는 것입니다. - 수직적 확장
하나의 기존 서버에 자원 (ex. CPU, RAM, 메모리 등) 을 추가하거나
기존의 서버를 고사양의 서버로 교체하여 성능을 향상시키는 것을 말합니다.
즉, 서버 한 대의 성능만 높이는 것입니다.
서버가 여러 대여도 서비스를 운영할 때 하나의 서버에서만 트래픽을 받는다면
나머지 서버들이 함께 트래픽을 분담하기 위해 존재하는 것이 아니라
현재 운영 중인 서버에 장애가 발생할 때 이를 대체하기 위한 스페어 역할로 존재하는 것이므로
Scale Out이 아닌 Scale Up이라고 할 수 있습니다.
- Scale Out -
Scale Out이란 서버의 수를 늘리는 것에 해당합니다. - 수평적 확장
기존 서버와 비슷한 사양의 새로운 서버 여러 대를 추가하여 서버를 재구성하는 것을 말합니다.
서버를 병렬적으로 확장하는 것이라고 할 수 있습니다.
3. 장단점
ScaleOut과 ScaleUp의 장단점을 비교하여 두방법 중 어떤것이 적합한지 알아보자.
ScaleUp
장점
서버 한 대에 상황에 맞게 부족한 장비를 추가하면 되기 때문에 가장 쉽습니다.
그래서 자원의 변경에 따른 Application의 영향이 적은 편입니다.
쉬운 예로 PC 데스크탑의 성능 업그레이드다. 시간이 지나면 성능이 떨어지기 마련입니다.
이럴 때 성능을 향상시키기 위해 메모리나 다양한 부품을 교체하거나 추가하기도 합니다.
PC를 업그레이드 했다고 해서 초기화되는 것이 아니기 때문에 PC 사용환경을 재설정하거나
기존에 깔려있던 여러 프로그램을 새로 까는 등의 일은 하지 않아도 됩니다.
서버도 마찬가지 입니다.
서버에 여러 장비를 추가하거나 교체해도 이로 인한 관리 비용 및 운영 비용이 거의 발생하지 않고,
기존의 소프트웨어 라이센스를 그대로 이용할 수 있습니다.
또한 한 대의 서버를 통해 모든 요청과 데이터가 처리되기 때문에 클라이언트의 상태정보를 저장하여
stateful한 서비스를 구현하는데 수월하고 이에 대한 데이터 정합성이 보장됩니다.
단점
하지만 고성능의 장비일수록 비용이 많이들고, 서버 자원 추가의 한계가 있습니다.
또한, 일정 수준에 도달하면 추가된 자원 대비 효과는 미미합니다.
그렇기 때문에 서버가가진 최대한의 성능보다 더욱 큰 규모의 트래픽이 들어온다면
결국 버티지 못하고 부하가 발생한다는 문제가 생깁니다.
가장 큰 문제는 사용자가 단시간 안에 급격하게 증가할 경우,
하나의 서버에 모든 트래픽이 집중되어서 장애가 발생할 가능성이 높아집니다.
해당 서버를 대체하여 서비스를 지원할 다른 서버가 없기 때문에 시스템 전체의 중단으로 이어지게 됩니다.
그렇다면 이 Scale Up은 주로 어떤 상황에서 사용될까?
Scale Up을 통해서 서버를 확장하면 모든 데이터 처리가 단일 서버에서 이루어지므로
데이터가 자주 업데이트되어 데이터의 일관성이나 정합성의 보장이 필요한 환경에서 사용됩니다.
대표적으로 데이터베이스 서버에 적합합니다.
Scale Out
장점
기존 서버와 비슷한 사양 혹은 그보다 낮은 사양의 서버를 사용하기 때문에 Scale Up에 비해서 비용이 저렴합니다.
또한 필요에 따라 서버를 증설하고 제거하는 것이 가능하기 때문에 좀 더 유연한 확장이 가능합니다.
여러 서버로 트래픽을 분산시킬 수 있어 장애 발생 가능성이 낮습니다
만약 서버 한 대에 장애가 생겨 운영할 수 없는 상황이 생겨도
나머지 서버들이 작업을 나눠서 처리 하면 되기 때문에 문제 없이 서비스를 제공할 수 있게됩니다.
(Scale UP과의 차이점)
단점
처음부터 애플리케이션을 분산 서버 환경에 맞게 설계한 경우가 아니라면
이를 구성하는 데에 시간적 비용이 발생하며 이러한 환경을 잘 유지하고 관리하기 위해
전문적인 지식과 노하우가 절대적으로 필요합니다.
분산 서버 환경을 위해서는 로드 밸런싱, 데이터 파티셔닝, 데이터와 서비스에 대한 이중화 등의 다양한 지식을 가지고 있어야 하는데 특히 로드밸런싱은 필수적입니다.
로드 밸런싱이란? 병목현상을 방지하기 위해 각 서버에 걸리는 부하를 균등하게 분산시키는 것입니다.
이 외에도 여러 서버들 간에 세션과 같은 상태정보를 어떻게 공유해야 할지에 관한 문제도 해결해야 합니다.
Scale Out은 비교적 단순하지만 많은 처리를 동시에 진행 해야하는 상황에서 주로 사용됩니다.
그렇다면 이 Scale Out은 주로 어떤 상황에서 사용될까?
여러 서버에서 동시에 데이터가 처리되기 때문에 데이터의 변화가 비교적 적게 일어나고
일어나더라도 정합성 유지가 어렵지 않은 경우에 적절합니다. 웹 서버에 적합합니다.
웹 서비스의 로그인을 구현할 때는 stateful한 서비스의 구현은 필수적이기 때문에
이를 구현하기 쉬운 Scale Up을 선택해야 되지 않나라고도 할 수 있지만
Scale Out을 선택해도 Sticky Session, 세션 클러스터링, 세션 스토리지 분리 등의 방식으로
해결할 수 있습니다. -> 후에 공부할 내용
부록 - 데이터 무결성과 정합성
데이터 무결성
- 데이터 값이 정확한 상태
데이터 정합성
- 어떤 데이터들의 값이 서로 일치할 떄 데이터 정합성이 맞다고 표현합니다.
- 중복 데이터를 많이 사용하면 데이터끼리 정합성을 맞추기 어렵고 서로 정합성이 깨지는 경우 발생 가능
무결성과 정합성
- 정합성은 데이터가 서로 모순 없이 일관되게 일치해야 한다는 의미입니다.
- 무결성은 데이터가 정확하고 완전해야 한다는 의미 → 개발자가 의도한 상태로 존재해야 한다.
- 어떤 데이터는 정합성에는 이상이 없으나 무결성은 훼손된 상태일 수 있습니다.
- ex) 중복 데이터가 전부 동일하나 올바르지 않은 값으로 일치하면 정합성은 만족하나 무결성은 훼손된 상태
- ex) 장바구니에 양념치킨을 담았는데 앱을 종료했다가 다시 켰을때 간장치킨이 떠있다
- 무결성의 정의가 더 넓은 개념
- 무결성을 지키는 것이 데이터 모델링의 최고의 목표입니다.
데이터 무결성의 종류
1. 엔티티 무결성(Entity Integrity) = 개체 무결성
- 엔티티에 존재하는 모든 인스턴스는 고유해야 한다.
- 인스턴스를 대표하는 속성(Primary Key)에는 Null 값이 올 수 없다.
- → 엔티티에는 동일한 주 식별자가 존재할 수 없으며 주 식별자 속성은 모르는 값인 Null 값을 허용할 수 없다.
2. 참조 무결성(Referential Integrity)
- 참조 무결성: 엔터티의 왜래 식별자 속성은 참조되는 엔터티의 주 식별자 값과 일치하거나 Null 값이어야 한다.
- 즉 외래 식별자 속성 값이 상위 엔터티의 인스턴스에 반드시 존재하거나 Null 이어야 한다.
- 참조 무결성은 두 엔터티의 연관된 인스턴스 사이에 일관성을 유지하기 위한 제약으로 사용
- 이 제약은 관계형 데이터베이스에서 집합(엔터티) 사이에 연산할 수 있도록 하는 대단히 중요한 개념
- 참조 무결성은 데이터 모델에서 절대적으로 필요한 중요한 요소이며 제약
- 참조 무결성은 FK(Foreign Key) 제약에 의해서 지켜진다.
3. 도메인 무결성
- 도메인 무결성은 속성 값과 관련된 제약
- 엔터티의 특정 속성 값은 동일한 데이터 타입, 길이, Null 허용 여부, 기본 값, 허용 값 등 동일한 범주의 값만이 존재해야 한다.
- 동일한 속성에 사용되는 값들은 동일한 성격의 값이 사용되어야 한다.
- 도메인 무결성 예시
- 고객이름 속성에 "Homer"는 허용, 777은 불가
- 전화번호 속성에 "555-5555"는 허용, "오오오~오오오오"는 불가
- 도메인 무결성은 기본 값, Null 허용 여부, 체크 조건 등으로 지켜질 수 있다.
4. 업무 무결성
- 업무 무결성은 기업에서 업무를 수행하는 방법이나 데이터를 처리하는 규칙
- 넓게 보면 엔터티 무결성이나 참조 무결성, 도메인 무결성도 업무 무결성에 포함
- 업무 무결성 예시
- 주문 금액 3만 원 이상이면 무료배송
- 초회 보험료를 입금하지 않은 보험 계약은 무효
- 업무 무결성은 범위가 넓어 주로 프로그램(의 로직)에서 확인
- 업무 무결성을 물리적으로 강제하는 대표적인 방법에는 트리거가 존재
'프로젝트 > 프로젝트 관련' 카테고리의 다른 글
Block vs Non-Block & Sync vs Async (0) | 2021.12.08 |
---|---|
레플리케이션(Replication), 클러스터링(Clustering), 샤딩(Sharding), MySQL (0) | 2021.12.05 |
Spring fox(Swagger) - API 문서화 (0) | 2021.12.05 |
Redis란 무엇인가? (0) | 2021.12.01 |
Windows10 Redis 다운로드 및 설치 (0) | 2021.12.01 |