HTTP (HyperText Transfer Protocol)
: 인터넷 상에서 데이터를 주고 받는데 사용되는 프로토콜
클라이언트는 서버에 요청을 하고, 서버는 해당 요청에 대한 응답을 클라이언트에게 보내는 구조로 데이터를 주고 받는다!
Stateless
: 서버가 클라이언트의 상태를 유지하지 않는다!
클라이언트가 A,B,C라는 요청을 순서대로 하고 이에 대한 결과를 이어 서버에 ABC라는 값을 저장하고 싶다고 해보자.
<서버가 상태를 유지할 경우>
클라이언트는 A,B,C 요청을 하기만 하면 서버에 클라이언트의 상태가 유지되어 있기 때문에 A 요청을 했다면 서버에 해당 클라이언트가 A를 요청했다는 상태가 유지되기 때문에 B와 C 요청이 들어왔을 때, 요청에 대한 결과를 이어 붙이기만 하면 된다!
<서버가 상태를 유지할 수 없는 경우>
클라이언트는 우선 A요청을 한다. 다음에 클라이언트가 B 요청을 할 때, 서버는 클라이언트가 A요청을 이미 했다는 사실을 알지 못한다. 따라서 클라이언트는 B 요청을 할 때, 이전에A요청을 했다는 사실도 같이 전달해야 한다.
Stateless의 장점
: 서버에서 상태를 유지하지 않기 떄문에 서버 증설이 쉽다! 따라서 과도한 트래픽이 발생하거나 서버 오류가 발생했을 떄, 대처하기가 쉽다.
하지만 실무에서 모든 것을 Stateless로 개발할 수는 없다!! -> 로그인 같은 기능을 구현할 때에는 로그인 상태가 유지되어야 한다!!
HTTP는 기본적으로 연결을 유지하지 않는다!
-> 이런 점의 문제 : HTTP를 사용할 때마다 TCP 연결을 새로해야함 -> 비용 발생! -> 이를 해결하기 위해 HTTP 지속 연결
: TCP 연결을 한번 하고 종료되기 까지 발생하는 많은 HTTP를 처리
HTTP 메시지에 거의 모든 형태의 데이터를 담아 전송할 수 있다!
GET
: 리소스 조회
POST
: 요청 처리, 메시지 바디를 통해 서버로 요청 데이터 전달!
PUT
: 리소스 대체, 클라이언트가 리소스 위치를 알고 URI 지정!
PATCH
: 리소스 부분 변경
DELETE
: 리소스 삭제
Safe
Idempotent(멱등)
Cachable
상태 코드
: 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능