리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨것을
2키어 아키텍처 or 클라이언트-서버 아키텍처 라고 부른다.
리소스를 사용하는
것이 클라이언트 (손님이라고 생각하자)
리소스를 제공하는
것이 서버 (점원)
클라이언트와 서버는 서로 응답을 주고받는 관계다.
손님처럼요청이 선행
되고 점원이그 후에 응답
하는 구조다.
서버는 리소스를 전달
해주는 역할을 담당하고,
리소스를 저장
해주는 공간을 별도로 마련해두는데, 이 공간을 데이터베이스
라고 부른다.
이러한 2티어에 + 데이터베이스 형태가 3티어 아키텍처
라고 부를 수 있다.
클라이언트처럼 사용자가 직접 눈으로 보고, UI를 클릭 또는 터치하는 등의 상호작용을 할 수 있는 앱을 주로 개발하면 프론트엔드 개발자
<->
사용자 눈에 보이지 않지만, 상품 정보를 API로 노출한다든지, 로그인/로그아웃, 권한 관리 등의 사용자 인증을 주로 다루는 개발자는 백엔드 개발자라고 부른다. 백엔드 개발자는 데이터베이스 등의 시스템 설계까지 맡아서 하는 경우가 많다.
위와 같이 클라이언트와 서버를 구별할 수 잇는데,
IOS나 안드로이드(스마트폰/태블릿) 플랫폼, 데스크탑 플랫폼에서 이용하는 앱을
클라이언트로 부르고,
서버는 무엇을 하느냐에 따라서 종류가 결정되기 때문에, 그림과 같이 여러가지로 존재한다.
데이터베이스도 데이터 제공자로 일하므로 서버라고 볼 수 있다.
프로토콜의 정의를 꺼내는 이유는? 컴퓨터와의 약속을 지켜야하기 때문이다!
마찬가지로 클라이언트와 서버도 HTTP라는 프로토콜을 이용해서 대화를 나눈다.
여기서 문제! 클라이언트는 서버가 어떻게 구성되어 있는지 모른다면,
어떻게 자원을 확인하고 요청을 보낼 수 있을까?
그래서~ 서버는 API를 준비해 놓았다!
API = Application Programming Interface
클라이언트에게 리소스를 잘 활용할 수 있도록 인터페이스를 제공해누는것이 API!
보통 인터넷에 있는 데이터를 요청할 때는 HTTP 프로토콜을 사용하고,
URI, URL을 통해서 접근할 수 있다!
HTTP Message의 예시를 가져왔다!
startline 에는 요청
이나 응답의 상태
를 나타내고, 항상 첫 번째 줄에 있어야한다.
HTTP headers는 요청을 지정하거나, 본문을 설명하는 집합라인이다.
body는 요청과 관련된 데이터나 응답과 관련된 데이터를 포함한다. 요청,응답에 따라 선택적으로 사용한다!
HTTP의 큰 특징으로는 무상태성
이 있다. (stateless)
이 뜻이 무엇인가 하면, 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP는 상태를 가지지않기에, 즉 클라이언트나 서버의 상태를 확인하지 않는다는것이다!
클라이언트에서 발생한 (예를 들어 고객이 장바구니에 물건을 넣던지,,하는)상태를 모두
추적하지 않는다. 하지만 고객들의 상태를 저장해둬야 하기에, HTTP가 하지 않기때문에
필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인할 수 있다.