HTTP (2) | Network

October 25, 2023

HTTPNetwork

이 글은 모든 개발자를 위한 HTTP 웹 기본 지식 강의를 듣고 정리한 내용입니다.

HTTP 기본

HTTP (HyperText Transfer Protocol)
모든 것이 HTTP이다! HTML뿐만 아니라 거의 모든 것을 전송할 수 있도록 바뀌었다.

모든 것을 HTTP 메세지에 담아 전송한다.

HTTP의 역사

기반 프로토콜

HTTP/1.1의 스펙을 학습하면 그 이후 버전은 성능을 개선한 것이기 때문에 이해하기에 큰 문제가 되지 않을것이다.

HTTP 특징

HTTP의 특징은 다음과 같습니다

  1. 클라이언트 서버 구조
  2. 무상태 프로토콜(Stateless), 비연결성
  3. HTTP 메세지
  4. 단순함, 확장 가능

1. 클라이언트 서버 구조

클라이언트와 서버를 분리했다는 점이 중요하다.

  • 비지니스 로직과 데이터는 서버에 넣는다.
  • 클라이언트는 UI, 사용성에 집중한다.
  • 서로의 역할에 집중해, 독립적으로 진화할 수 있다.

2-1. 무상태 프로토콜 (Stateless)

HTTP는 무상태 프로토콜을 지향한다. 서버가 클라이언트의 상태를 보존하지 않는다는 의미이다.

Stateful vs Stateless

Stateful

Stateless

Stateless의 실무한계

2-2. 비연결성 (connectionless)

연결을 유지하는 모델

연결을 유지하지 않는 모델

단점

3. HTTP 메세지

HTTP 요청 메세지 예시

GET /search?q=hello&hl=ko HTTP/1.1 
Host: www.google.com

HTTP 응답 메세지 예시

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423

<html>
  <body>...</body>
</html>

공식 스펙

HTTP-message = start-line           시작라인  
               *(header-field CRLF) 헤더    
               CRLF empty line      공백 라인  
               [message body]

HTTP 메서드

HTTP API를 만들어 보자

요구 사항 - 회원 정보 관리 API를 만들어라.

API URI 설계

좋은 URI 설계는 ?? 가장 중요한 것은 Resource 식별

  • 회원이라는 개념 자체가 바로 Resource이다!
  • 회원이라는 Resource만 식별하면 된다. -> 회원 Resource를 URI에 매핑!

리소스와 행위를 분리하자

가장 중요한 것은 리소스를 식별하는 것!

HTTP 주요 메서드 정리

최근 스펙은 리소스라고 하기보다는 Representation이라고 한다.

HTTP 기타 메서드

GET, POST

GET

GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
  1. 클라이언트가 /members/100를 달라고 요청한다.
GET /members/100 HTTP/1.1
Host: localhost:8080
  1. 서버가 응답 데이터를 만들어서 클라이언트에게 보낸다
HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 34

{
  "username": "young",
  "age": 20
}

POST

  1. 클라이언트가 리소스 등록 메세지를 전달한다.
POST /members HTTP/1.1
Content-Type: application/json

{
  "username": "young",
  "age": 20
}
  1. 서버에서 신규 리소스 식별자를 생성하고, 신규 리소스를 생성한다.
{
  "username": "young",
  "age": 20
}
  1. 서버가 클라이언트에게 응답 데이터를 보낸다
HTTP/1.1 201 Created
Content-Type: application/json
Content-Length: 34
Location: /members/100 (자원이 생성된 경로이다.)

{
  "username": "young",
  "age": 20
}

POST - 요청 데이터를 어떻게 처리한다는 의미일까

POST 정리

  1. 새 리소스 생성(등록)
  1. 요청 데이터 처리
  1. 다른 메서드로 처리하기 애매한 경우

PUT, PATCH, DELETE

PUT

/members/100

{
  "username": "young",
  "age": 20,
}
PUT /members/100 HTTP/1.1
Content-Type: application/json

{
  "age": 50,
}

/members/100

{
  "age": 50,
}

PATCH

/members/100

{
  "username": "young",
  "age": 20,
}
PATCH /members/100 HTTP/1.1
Content-Type: application/json

{
  "age": 50,
}

/members/100

{
  "username": "young",
  "age": 50,
}

DELETE

HTTP 메서드의 속성

안전 Safe

멱등 Idempotent

캐시가능 Cacheable

⬅ 이전 포스트
HTTP (1) | Network
다음 포스트 ➡️
바닐라 JS로 SPA 만들기 - 컴포넌트