옷이나 생활용품등의 물건을 사려고 쇼핑앱을 이용해본 경험이 있을것이다.
평상시의 앱은 문제없이 잘 동작하고, 구매도 문제없이 할 수 있지만,
앱을 사용하는 도중에 갑자기 인터넷 연결이 끊긴다면 어떻게 될까?
사용하던 대로 잘 잘동하나? 아니다 앱이 멈춰버릴 것이다.
왜 작동하지 않는걸까? 이유는 상품정보를 인터넷과 연결되어있는 서버로부터 가져와야하기 때문이다.
그럼 인터넷에 구애받지 않고 쓸 수 있게 앱안에다가 모든 정보를 넣으면 되는것 아니냐?
만약 그렇게 해서 앱이 만들어졌다고 생각해보자. 쇼핑몰 앱 1.0 버전이라고 가정해보자.
이 앱을 쓰고 있는데 만약 기존 판매리스트에서 신상품이 추가가되어 리스트에 변동이 생겼다.
단 하나의 물품만이 추가됐다, 그런데도 우리는 앱을 업데이트 해서 앱 2.0 버전을 사용해야 한다.
우리가 평상시에 사용하던 앱들도 업데이트를 하지만, 대부분 대대적인 변화가 이루어졌을때
업데이트를 하고 빈번하지 않다, 하지만 위의 상황같은 경우는 앱에 무엇인가가 변경만 됬다하면
계속해서 업데이트를 하면서 앱을 다시 다운받아야되는것이다. 매우 번거로운 일이다.
뭐 그렇게해서 사용한다고 해도, 결제같은경우 은행과 연결하기 위해서는 인터넷이 무조건적으로
필요하기 때문에, 인터넷이 없이 이런 앱을 사용하는것은 불가능하다고 보는게 맞다.
그래서 리소스가 존재하는곳과 리소스를 사용하는곳을 분리시켜야할 필요성이 있다.
이것을 2티어 아키텍처 또는 클라이언트-서버 아키텍처라고 한다.
여기서 클라이언트는 리소스를 사용하는 앱을 가리키고, 서버는 리소스가 존재하는 곳을 가리킨다.
상품정보는 서버에서 다루고, 앱에서는 상품정보를 조회만 하는것이다.
클라이언트가 서버에게 조회하고싶은 목록을 요청하면, 서버는 데이터베이스에서
클라이언트가 조회하고자하는 정보를 빼와서 클라이언트에게 보내준다.(3티어 아키텍처)