
웹의 기본 아키텍처는 클라이언트 / 서버 / 데이터베이스이다.
요즘에는 웹의 요구사항이 복잡해지면서 서버가 웹서버 / 웹 애플리케이션 서버로 나뉘는 형태로 발전해왔다. 웹 서버는 정적인 데이터를 서빙하고, 웹 애플리케이션 서버 동적으로 변하는 데이터를 서빙한다.
이와 같은 나눔은 관심사의 분리, 관측가능한 시스템, 효율적인 리소스 사용의 장점이 있다.
스케일 업(scale up): 하나의 서버의 사양을 높여 더 많은 요청을 처리하도록 한다.
스케일 다운(scale out): 서버의 댓수를 늘린다.
| 스케일 업 | 스케일 다운 | |
|---|---|---|
| 유지보수 및 관리 | 쉬움 | 여러 노드에 적절히 부하분산 필요 |
| 확장성 | 제약이 있음 | 비교적 자유로움 |
| 장애복구 | 서버가 1대, 다운타임이 있음 | 장애 탄력성이 있음 |
위의 표를 통해 비교를 하면 스케일업 보다는 스케일 다운이 더 좋아보이지만
데이터베이스를 스케일 아웃하면 어떨까에는 제약이 있다.
스케일다운을 하려면 상태가 없어야하는데 데이터라는 상태를 관리하고 있기 때문에 서버보다 스케일 아웃을 하기 위한 비용이 많이 든다.
이로 인해 현대 서버 아키텍처는 상태관리를 데이터베이스에 위임하고 서버는 상태관리를 하지 않도록 발전해왔다.
이런 어려움을 이기고 대용량 시스템은 어떠해야하는가?