= 상품 정보 같은 리소스가 존재하는 곳과 리소스를 사용하는 앱을 분리시킨 것
클라이언트 = 리소스를 사용하는 앱
서버 = 리소스를 제공하는 곳
리소스를 사용하는 앱(클라이언트)이 요청 -> 리소스가 존재하는 곳(서버)이 응답
클라이언트-서버 아키텍처에서는 요청이 선행되고 그 후에 응답이 온다
일반적으로 서버는 리소스를 전달해 주는 역할만 담당하고 리소스를 저장하는 공간을 별도로 마련하는데 이 공간을 "데이터베이스"라고 함 데이터베이스는 창고와 같은 역할
2티어 아키텍처에 데이터베이스가 추가된 형태가 3티어 아키텍처
손님이 주문을 받는 사람에게 대뜸 찾아가 외계어로 주문을 할 수 없듯, 주문을 하기 위해서는 꼭 지켜야 하는 약속이 존재
웹 애플리케이션 아키텍처에서는 클라이언트와 서버가 서로 HTTP라는 프로토콜을 이용
주요 프로토콜
응용 계층
| 프로토콜 이름 | 설명 |
|---|---|
| HTTP | 웹에서 HTML, JSON 등의 정보를 주고 받는 프로토콜 |
| HTTPS | HTTP에서 보안이 강화된 프로토콜 |
| FTP | 파일 전송 프로토콜 |
| SMTP | 메일을 전송하기 위한 프로토콜 |
| SSH | CLI 환경의 원격 컴퓨터에 접속하기 위한 프로토콜 |
| RDP | Windows 계열의 원격 컴퓨터에 접속하기 위한 프로토콜 |
| WebSocket | 실시간 통신, Push 등을 지원하는 프로토콜 |
전송 계층
| 프로토콜 이름 | 설명 |
|---|---|
| TCP | HTTP,FTP 통신 등의 근간이 되는 인터넷 프로토콜 |
| UDP | (양방향의 TCP와는 다르게) 단방향으로 작동하는 훨씬 더 단순하고 빠르지만, 신뢰성이 낮은 인터넷 프로토콜 |
HTTP API 디자인에는 Best Practice가 존재함
ex)사용자 관리 API
| 요청 | 적절한 메소드 |
|---|---|
| 조회(Read) | GET |
| 추가(Create) | POST |
| 갱신(Update) | PUT 또는 PATCH |
| 삭제(Delete) | DELETE |
URI는 URL을 포함하는 상위개념
= 웹 브라우저를 통해 특정 사이트 진입을 할 때, IP 주소를 대신하여 사용하는 주소
= 브라우저의 검색창에 도메인 이름을 입력하여 해당 사이트로 이동하기 위해서 해당 도메인 이름과 매칭된 IP 주소를 확인하는 작업이 필요한데 이것을 위한 서버가 DNS(Domain Name System)
= 클라이언트와 서버 사이에서 데이터가 교환되는 방식
= 두가지 유형이 있음 -> 요청(Requests), 응답(Responses)
= 구성 파일, API, 기타 인터페이스에서 HTTP Messages를 자동으로 완성함
= HTTP의 큰 특징 중 하나
= HTTP로 클라이언트와 서버가 통신을 주고받는 과정에서, HTTP가 클라이언트나 서버의 상태를 확인하지 않음.
= HTTP는 통신 규약일 뿐이므로 상태를 저장하지 않습니다. 따라서 필요에 따라 다른 방법(쿠키-세션, API 등)을 통해 상태를 확인할 수 있음.
1. 수행할 작업(GET, PUT, POST 등)이나 방식(HEAD or OPTIONS)을 설명하는 HTTP method를 나타낸다.
2. 요청 대상(일반적으로 URL이나 URI) 또는 프로토콜, 포트, 도메인의 절대 경로는 요청 컨텍스트에 작성된다. 이 요청은 HTTP method마다 다름
origin 형식 : '?'와 쿼리 문자열이 붙는 절대 경로. GET, POST, HEAD, OPTIONS 등의 method와 함께 사용
ex) HEAD /test.html?query=alibaba HTTP/1.1
absolute 형식 : 완전한 URL 형식으로, 프록시에 연결하는 경우 대부분 GET method와 함께 사용
ex) GET http://developer.mozilla.org/en-US/docs/Web/HTTP/Messages HTTP/1.1
authority 형식 : 도메인 이름과 포트 번호로 이루어진 URL의 일부분. HTTP 터널을 구축하는 경우, CONNECT와 함께 사용할 수 있음
ex) CONNECT developer.mozilla.org:80 HTTP/1.1
asterisk 형식 : OPTIONS 와 함께 별표(*) 하나로 서버 전체를 표현합니다.
ex) OPTIONS * HTTP/1.1
3. HTTP 버전에 따라 HTTP message의 구조가 달라짐 따라서 start line에 HTTP 버전을 함께 입력해야함
그룹 종류
General headers : 메시지 전체에 적용되는 헤더로, body를 통해 전송되는 데이터와는 관련이 없는 헤더
Request headers : fetch를 통해 가져올 리소스나 클라이언트 자체에 대한 자세한 정보를 포함하는 헤더를 의미. User-Agent, Accept-Type, Accept-Language와 같은 헤더는 요청을 보다 구체화. Referer처럼 컨텍스트를 제공하거나 If-None과 같이 조건에 따라 제약을 추가할 수 있음.
Representation headers : 이전에는 Entity headers로 불렀으며, body에 담긴 리소스의 정보(콘텐츠 길이, MIME 타입 등)를 포함하는 헤더
그룹 종류
Single-resource bodies(단일-리소스 본문) : 헤더 두 개(Content-Type과 Content-Length)로 정의된 단일 파일로 구성
Multiple-resource bodies(다중-리소스 본문) : 여러 파트로 구성된 본문에서는 각 파트마다 다른 정보를 가짐. 보통 HTML form과 관련이 있음.
HTTP/1.1 404 Not Found응답에 들어가는 HTTP headers는 요청 헤더와 동일한 구조를 가짐. 대소문자 구분 없는 문자열, 콜론(:), 값을 입력하고, 값은 헤더에 따라 다름.
그룹 종류
그룹 종류
1. Single-resource bodies(단일-리소스 본문) :