클라이언트 - 서버 아키텍처, 2티어 아키텍처라고도 불리우는 설계 방식에 대해 알아보자!
우리가 만약 쇼핑몰 앱을 열었을때, 와이파이나 데이터를 통해 인터넷이 연결 되어 있지 않다면 어떻게 될까? 모두 다 알고 있듯이 쇼핑몰 앱은 동작하지 않는다.
쇼핑몰 앱은 상품정보를 서버로부터 받아오기 때문이다.
서버와 클라이언트 , 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨것을 2-Tier 아키텍처, 클라이언트 - 서버 아키텍처 라고 부른다.
클라이언트는 서버에게 요청을 하고 , 서버는 클라이언트에게 응답을 한다.
서버는 리소스를 응답해주는 역할만 담당한다. 리소스를 저장하는 공간, 데이터베이스를 따로 추가한 경우에는 3티어 아키텍처 라고 한다.
클라이언트와 서버간의 통신을 알아보려면 , 프로토콜이라는 개념을 이해해야 한다.
프로토콜은 통신규약 즉 약속이다. 클라이언트와 서버는 서로 HTTP라는 프로토콜을 이용해서 서로 대화를 나누다. HTTP를 이용해 주고받은 메세지는 HTTP message라고 한다.
서버는 클라이언트에게 리소스를 잘 활용할수 있도록 인터페이스를 제공해야한다 이것을 API라고 한다.
API(Application Programming Interface)
앱이 요청할 수 있고 프로그래밍이 가능한 인터페이스
IP는 Internet Protocol의 줄임말 인터넷상에서 사용하는 주소체계를 의미.
네트워크를 통해 데이터를 보낼때, 데이터를 IP 패킷이라고 하는 일련의 메세지로 보낸다.
데이터를 보내기 위해 사용하는 전송 제어 프로토콜이 TCP와 UDP가 있다.
TCP는 데이터가 안전하게 전송되지만 지연이 발생한다. 파일전송
UDP는 패킷이 순서대로 도착하지않거나 도착하지 않을수 있지만, 속도가 빠르므로 음성 통화나 비디오 스트리밍으로 이용한다.
네트워크에 연결된 특정 PC의 주소를 나타내는 체계를 IP address(Internet Protocol address, IP 주소)
인터넷에 연결된 모든 PC는 IP 주소체계를 따라 네 덩이의 숫자로 구분된다. IPv4
nslookup codestates.com
을 터미널에 입력하면 IPv4주소를 확인할 수 있다.
IPv4로 할당할 수 있는 PC가 한계를 넘어서게 되어 IPv6가 나왔다.
웹 브라우저를 통해 특정 사이트에 진입을 할 때, IP 주소를 대신하여 사용하는 주소
google.com
DNS는 호스트의 도메인 이름을 IP 주소로 변환하거나 반대의 경우를 수행할 수 있도록 개발된 데이터베이스 시스템
HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않는다. Stateless(무상태성)이 HTTP의 가장 큰 특징이다.
클라이언트가 서버에게 보내는 메세지
HTTP 메소드
- GET : 클라이언트는 웹 서버에서 리소스를 요청합니다.
- POST : 클라이언트는 웹 서버의 리소스에 데이터를 제출합니다.
- PUT : 클라이언트는 웹 서버의 리소스를 대체합니다.
- DELETE : 클라이언트가 웹 서버에서 리소스를 삭제합니다.
모든 HTTP 요청은 요청 라인으로 시작한다.
Get /home.html HTTP/1.1
여기서 GET
은 HTTP 메서드이고 /home.html
은 요청된 리소스이며 HTTP 1.1은 사용된 프로토콜 이다.
수행할 작업을 설명하는 HTTP 메소드를 나타낸다.
요청 대상(URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대경로는 요청 컨텍스트에 작성된다.
요청 형식
origin 형식 :
'?'
와 쿼리 문자열이 붙는 절대 경로입니다. GET, POST, HEAD, OPTIONS 등의 method와 함께 사용합니다.
POST / HTTP 1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0
absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용합니다.
GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 일부분 입니다. HTTP 터널을 구축하는 경우,CONNECT
와 함께 사용할 수 있습니다.
CONNECT developer.mozilla.org:80 HTTP/1.1
asterisk 형식 :OPTIONS
와 함께 별표(*
) 하나로 서버 전체를 표현합니다.
OPTIONS * HTTP/1.1
HTTP 버전에 따라 HTTP message의 구조가 달라진다. 그래서 마지막에 HTTP버전을 입력한다.
요청의 Headers는 기본 구조를 따른다. 헤더 이름, 콜론 : , 값을 입력한다.
Host: example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
Accept: */*
Accept-Language: en
Content-type: text/json
Host
헤더는 서버의 호스트를 지정하고 리소스가 요청되는 위치를 나타낸다.
User-Agent
헤더는 웹 서버에 요청하는 애플리케이션을 알려주고 여기에는 종종 운영 체제(Windows, Mac, Linux), 버전 및 응용 프로그램 공급업체가 포함된다.
Accept
헤더 는 클라이언트가 응답으로 수락할 콘텐츠 유형을 웹 서버에 알려준다.
Accept-Language
헤더는 클라이언트가 선호하는 언어와 선택적으로 로케일을 나타낸다.
Content-type
헤더는 요청 본문에서 전송되는 콘텐츠의 유형을 나타낸다 .
요청의 본문은 마지막에 위치하면서 , HTTP POST 및 PUT 메서드를 사용하여 데이터를 전송할 때 요청 본문이 포함된다.
body 두종류
Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성됩니다.
Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 지닙니다. 보통 HTML form과 관련이 있습니다.
서버가 클라이언트에게 보내는 메세지
HTTP/1.1 200 OK
1. 현재 프로토콜의 버전 (HTTP/1.1)
2. 상태 코드
3. 상태 텍스트 - 상태 코드에 대한 설명
⭐ 상태 코드
Date: Fri, 11 Feb 2022 15:00:00 GMT+2
Server: Apache/2.2.14 (Linux)
Content-Length: 84
Content-Type: text/html
Date
헤더는 HTTP 응답이 생성된 날짜와 시간을 지정한다 .
Server
헤더는 응답을 생성하는 데 사용되는 웹 서버 소프트웨어를 설명한다 .
Content-Length
헤더는 응답의 길이를 설명한다 .
Content-Type
헤더는 반환된 리소스의 미디어 유형을 설명한다(예: HTML 문서, 이미지, 비디오).
헤더 다음은 응답 본문으로써 이미지, 비디오, HTML 문서 및 기타 미디어 유형이 포함될 수 있다.
두종류
Single-resource bodies(단일-리소스 본문) :
길이가 알려진 단일-리소스 본문은 두 개의 헤더(Content-Type, Content-Length)로 정의합니다.
길이를 모르는 단일 파일로 구성된 단일-리소스 본문은 Transfer-Encoding이chunked
로 설정되어 있으며, 파일은 chunk로 나뉘어 인코딩되어 있습니다.
Multiple-resource bodies(다중-리소스 본문) : 서로 다른 정보를 담고 있는 body입니다