Cloud & CERT 과제의 첫 번째 주제는 3-Tier Architecture다. 사용자 로그인, 상품 조회, 주문, 회원·주문 정보 저장 기능을 가진 작은 쇼핑몰을 서버 한 대에서 시작한다. 문제가 생길 때마다 구조를 고쳐 나가는 방식으로 진행했고, 각 단계에서 무엇을 배웠는지, 어디서 잘못 생각했는지 순서대로 정리했다.

문제 사용자가 늘자 서버가 느려졌다. 웹 처리가 느린 건지, 주문 로직이 느린 건지, DB 조회가 느린 건지 구분이 안 된다.
처음에는 웹 서버, 애플리케이션, DB를 한 서버에 모두 설치했다. 사용자가 늘자 서버가 느려졌는데, 웹 처리 때문인지 주문 로직 때문인지 DB 조회 때문인지 구분할 수 없었다. 셋이 CPU, 메모리, 디스크를 같이 쓰고 있으니 당연한 결과다. 하나만 고치려고 재시작해도 나머지가 같이 멈췄다.
그래서 서버를 나누기로 했는데, 여기서 첫 번째로 잘못 생각했다. 처음에는 "로그인 서버, 주문 서버, 상품 서버"처럼 기능별로 나누려 했다. 그런데 이건 마이크로서비스 쪽 이야기이고, 문제에서 물은 것은 "웹이냐 로직이냐 DB냐"를 가르는 것이었다. 그래서 기준을 처리 계층으로 바꿨다.
세 계층은 부하 특성도, 상태 유무도 다르다. 그래서 떼어 놓아야 원인을 분리할 수 있고 각각 따로 확장할 수 있다.