데이터는 OSI 7계층을 거쳐 송/수신 된다.
(본 포스팅에선 TCP/IP 4계층이 아닌 OSI 7계층에만 빗대어 진행한다.)
패킷 교환 데이터 네트워크에 대한 글 내에서, PDU(Protocol Data Unit)는 서비스 데이터 단위(SDU)와 관련지어 이해하면 용이하다. 네트워크의 특징이나 서비스는 별개의 “계층” 내에서 주어진다.
예를 들어 전선, 섬유 등을 통해 0과 1로 이루어진 신호를 보내는 것은 물리 계층에 의해,
0과 1의 데이터를 수집하여 와이어의 적절한 곳에 도달하도록 하는 것은 데이터 링크 계층에 의해,
이러한 데이터들을 연결된 네트워크로 전송하는 것은 네트워크 계층에 의해,
그리고 적절한 소프트웨어 애플리케이션의 데이터를 목적지까지 보내는 것은 전송 계층에 의해 행해진다.
세션 계층과 표현 계층을 거쳐 우리가 아는 형태의 파일들(MPEG, JPG)이 응용 계층으로 전달된다.
그 후 응용계층은 그 파일들을 해석하여 우리의 눈앞에 우리가 아는 이미지 혹은 동영상같은 형태로 보여준다.
일단 계층을 나눈 이유는 통신이 일어나는 과정을 단계별로 알 수 있고, 특정 이상한 곳에 이상이 생기면 그 부분만 확인하여 해결하면 되기 때문.
또한 통신을 함에 있어 결국 물리적으로는 통신하는 양쪽의 모든 계층을 거쳐야 하지만 각 계층마다 동일 계층끼리의 프로토콜을 사용하여 논리적으로는 각계층끼리 통신을 한다고 볼 수 있다.
HTTP는 HTML 문서와 같은 리소스들을 가져올 수 있도록 해주는 응용계층의 프로토콜 이다.
HTTP는 웹에서 이루어지는 모든 데이터 교환의 기초이며, 클라이언트-서버 프로토콜이기도 하다.
클라이언트-서버 프로토콜이란 수신자 측(보통 웹브라우저)에 의해 요청이 초기화 되는 프로토콜을 의미한다.
즉, HTTP는 클라이언트가 요청을 생성하기 위한 연결을 연 다음 응답을 받을 때 까지 대기하는 전통적인 클라이언트-서버 모델을 따른다.
또한 HTTP는 stateless 프로토콜이며, 이는 클라이언트와 서버가 각각의 요청 간에 어떠한 상태나 데이터를 유지하지 않음을 의미한다.
(상태를 유지하기 위한 노력으로 쿠키 또는 세션을 사용한다.)
왼쪽의 물건을 요청하는 사람이 클라이언트
오른쪽의 물건을 건내주는 사람이 서버
라고 해보자.
자 그럼 클라이언트가 서버에게 물건을 달라고 하는데 그 물건의 이름이 HTML 이라면
그것이 서버에게 요청하는것이고 request 라고 한다.
그리고 서버가 여기있습니다 라고 물건(HTML)을 주는 행위가 응답, response 이다.
자 HTTP라는 것은 이 request와 response를 나타낸다.
HTML, CSS, JS, 이미지 이러한 파일들이 서로가 주고받는 컨텐츠라면
그 컨텐츠를 주고받기 위해서는 서버와 클라이언트가 서로가 알아들을 수 있는 공통의 약속인
메시지가 필요한데 바로 그 메시지를 HTTP라고 하고
HTTP는 크게 request와 response를 위한 메시지로 구분되어있다.
또한 그 request와 response 메세지의 기본 구성은 아래와 같다.
HTTP 기본구성(구글 이미지 검색)
HTTP의 대표적인 특징 2가지는 아래와 같다.
HTTP는 위의 특성을 통해 연결되어있지 않고 데이터를 보낸다고 생각할 수 있다.
하지만 연결은 전송 계층에서 제어되므로 근본적으로는 HTTP 영역 밖이다.
또한 HTTP는 기본적으로 연결 기반인 TCP표준에 의존한다.
클라이언트와 서버가 HTTP 요청/응답으로 교환하기 전 여러 번 왕복이 필요한 TCP 연결을 설정한다.
HTTP는 요청 메소드를 정의하며, 주어진 리소스(보내는 메세지)에 수행하길 원하는 행동을 나타낸다.
각각의 메소드는 서로 다른 의미를 나타내지만, 일부 기능은 메소드간에 서로 공유하기도 한다.
이 경우 응답메세지에 [HTTP 헤더 항목](http://www.ktword.co.kr/test/view/view.php?m_temp1=5905&id=1515) 중
Allow: GET,POST,HEAD 처럼 보내게 됨
HTTP API 란 HTTP 통신방식을 사용하여 통신을 할 수 있도로 도와주는 Web API 이다.
즉, HTTP는 응용계층간에 통신을 하는 방식인 통신규약인것이고 HTTP API는 이러한 HTTP 통신규약을 사용하여 통신을 실제 할 수 있게 도와주는 API인 것이다.
REST는 Representational State Transfer라는 용어의 약자로 2000년도 로이 필딩의 박사학위 논문에서 최초로 소개된 개념이다. 로이 필딩은 HTTP의 주요 저자 중 한 사람으로서 당시 웹(HTTP)설계의 우수성에 비해 제대로 사용되어지지 못하는 모습에 안타까워하며 웹의 장점을 최대한 활용할 수 있는 아키텍처로서 REST를 발표하였다.
(아키텍처는 구조의 설계라고 이해하면 된다.)
REST의 의미는 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든것을 의미한다.
즉,
URI를 통해 자원(Resource)을 명시하고
HTTP 메소드(POST, GET, PUT, DELETE, PATCH 등)를 통해
해당 자원(URI)에 대한 CRUD Operation을 적용하는것을 의미한다.
URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말한다.
URI는 통합 자원 식별자(Uniform Resource Interface)로 인터넷에 있는 자원을 나타내는 유일한 주소이다.
URI 구성부분을 나타내는 예시
REST는 무상태성 성격을 작는다. 즉, 작업을 위한 상태정보를 따로 저장하고 관리하지 않는다.
세션 정보나 쿠키 정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순 처리한다.
REST의 가장 큰 특징 중 하나는 HTTP 라는 기존 웹 표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. 따라서 HTTP 가 가진 캐싱 기능이 적용 가능하다.
REST API 메세지만 보고도 쉽게 이해 할 수 있는 자체 표현 구조로 되어있다는 특징이 있다.
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어든다.
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.
URI는 자원을 표현함에 중점을 두어야하며 행위에 대한 표현이 들어가선 안된다.
GET /members/delete/1
← 잘못된 URI
DELETE /members/1
← 올바른 URI
METHOD | 역할 |
---|---|
POST | POST를 통해 해당 URI를 요청하면 리소스를 생성합니다. |
GET | GET를 통해 해당 리소스를 조회합니다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다. |
PUT | PUT를 통해 해당 리소스를 수정합니다. |
DELETE | DELETE를 통해 리소스를 삭제합니다. |
http://restapi.example.com/houses/apartments
http://restapi.example.com/animals/mammals/whales
RESTful 이란 REST의 원리를 따르는 시스템을 의미한다.
REST API를 사용한다고 모두 RESTful 한것이 아니다.
예를들면 모든 CRUD 기능을 모두 POST로 처리하는 API 또는 URI 규칙을 올바르게 지키지 않은 API는
REST API를 사용하였지만 RESTful하지 않은것이다.
REST API
REST API 제대로 알고 사용하기 : NHN Cloud Meetup
[Web] HTTP API와 REST API
REST와 RESTful의 차이
[네트워크] REST API란? REST, RESTful이란?
HTTP와 TCP/IP의 이해
HTTP 개요 - HTTP | MDN
http와 tcp/ip의 이해
http://www.ktword.co.kr/test/view/view.php?no=3791
7계층의 설명
https://velog.io/@inyong_pang/OSI-7-%EA%B3%84%EC%B8%B5%EA%B3%BC-TCPIP-%EA%B3%84%EC%B8%B5
https://kkamagistory.tistory.com/205
라우팅
라우팅란 무엇입니까? - 네트워크 라우팅 초보자 설명서- AWS