1.1.2 크고 복잡한 문제 풀기
현실 세계를 관리하는 시스템을 개발할 때 소프트웨어 엔지니어가 마주치는 문제 중 대부분은 매우 복잡해서 순차적으로 처리할 수 없을 정도로 비현실적이다. 이러한 문제의 복잡성은 문제 자체의 크기 또는 우리가 만들려는 시스템을 잘 이해하지 못해서이기도 하다.
확장성
어떤 문제의 크기를 논할 때는 확장성(scalability)을 따지게 된다. 확장성이란 시스템에 자원을 추가하는 방법으로 시스템의 성능을 늘릴 수 있는 시스템의 성질을 말한다. 시스템의 확장성은 다시 수직(vertical) 확장성과 수평(horizontal) 확장성으로 나뉜다.
수직 확장성(스케일업, scaling up)은 기존 프로세서를 더 강력한 것으로 교체하거나 메모리를 증설하는 방법으로 성능을 증가시키는 방법이다. 이 방법으로는 프로세서 속도를 높이는 게 어렵기 때문에 성능 한계에 도달하기 쉽고 그만큼 확장성이 제한된다.