HTTP(HyperText Transfer Protocol)
HTTP란?
- 웹에서 데이터를 주고받기 위한 통신 규약
- 편지를 주고받는 것과 비슷하게, 보내는 사람, 받는 사람, 내용이 정해진 형식으로 전달됨

- 클라이언트는 Request(요청)을 보내고 응답을 기다림
- 서버는 요청에 대한 처리를 수행 후 결과를 Response(응답)함
HTTP 특징
무상태
장점
- Scale Out 수평 확장성이 높음
- 갑자기 요청량이 증가하여도 서버를 증설 하기 쉬움
단점
한계점
무상태로 설계할 수 없는 경우가 있음
로그인은 어떻게 해야할까? -> Cookie, Session, Token 등을 활용
HTTP Message 구조
HTTP Message는 요청 메시지, 응답 메시지 두 가지 종류가 있고 구조가 각각 다름
HTTP Message 구조

HTTP 요청 메시지(Request Message)

- Start Line
-
HTTP Method
- Get
- 요청의 의도를 가진 GET, POST, PUT, PATCH, DELETE 등이 있음
- Create - POST
- Read - GET
- Update - PUT(전체), PATCH(일부)
- Delete - DELETE
- Request Target
-
path
- 경로: /event
- Query String(= Query Parameter)에 해당하는 값도 포함
-
HTTP Version
-
Header
Host: spartacodingclub.kr
- 임의의 Header를 추가할 수 있음 (단, 서버가 값을 알고 있어야 함)
- 요청의 추가 정보들을 가지고 있다.
ex) Message Body 내용, 크기, 인증, 브라우저 정보, 서버 정보 등
-
Empty Line
-
Message Body
- 실제 전송하는 데이터가 담겨 있는 부분
- HTML, 이미지, JSON 등 byte로 표현되는 모든 데이터 전송 가능.
- 요청 시 GET의 경우 Message Body가 지원되지 않는 경우가 많다.
HTTP 응답 메시지(Response Message)

- Start Line
- HTTP Version
- Status Code
- Status Text
- Header
- Response에서만 사용되는 Header 값들이 따로 존재한다.
- Empty Line
- Message Body
- 실제 전송하는 데이터가 담겨 있는 부분
- 만약 전송할 데이터가 없다면, Body가 공백으로 존재한다.
HTTP Method
클라이언트-서버 사이에 이루어지는 요청, 응답 데이터를 전송하는 방식을 뜻함
주요 Method
- POST
- 리소스 생성
- 다른 Method로 처리하기 애매할 때 POST를 쓰기도 함
- Message Body를 통해 요청 데이터를 전달
- GET
- PUT
- PATCH
- DELETE
- 기타 Method
- HEAD: GET에서 Message Body를 제외하고 상태 줄과 Header만 반환
- OPTIONS: 대상 리소스에 대한 통신 가능한 Method를 설명함
HTTP Method 속성
안정성(Safe)
- GET 메소드(조회)는 안전하다.
- POST, DELETE, PUT, PATCH는 안전하지 않다.
멱등성(Idempotent)
- 한번을 호출하거나 수천번을 호출하거나 항상 결과는 같다.
- GET → 같은 결과가 계속 조회된다.
- PUT → 수정해서 대체된 후의 결과는 계속 같다.
- DELETE → 같은 요청을 여러번해도 삭제된 결과는 같다.
- POST → 멱등성을 보장하지 않는다.
- 요청이 실패한 경우 재시도 하기 위해 필요하다.
-
항상 결과가 같다면 마음껏 재시도 해도 된다.
-
만약 멱등하지 않다면, 중복 요청을 보내서는 안된다.
-
복구 매커니즘에 사용한다.
ex) 요청 실패시 서버에서 자동으로 재시도
캐시가능성(Cacheable)
- 재사용을 위해 요청에 대한 응답을 저장할 수 있는가?
-
GET, HEAD, POST 메소드는 캐시가 가능하다.
-
일반적으로 GET, HEAD 정도만 캐시로 사용한다.
ex) 변경 가능성이 적은 정적자원(HTML, CSS, IMAGE, JS 등)을 주로 캐싱한다.
HTTP 상태 코드
-
1xx (정보)
- 요청 수신 후 처리중인 상태
- 잘 사용하지 않는다.
-
2xx (성공)
-
정상 처리 완료된 상태

-
대표 상태코드
-
200 OK
-
201 Created
-
202 Accepted
-
204 No Content
-
요청은 성공했지만, 응답 데이터가 없음
ex) 삭제 성공 시
-
3xx (리다이렉션)
- 요청을 완료하려면 추가 행동이 필요한 상태
- 3xx 응답 + Location HTTP Header가 있으면 Location 위치로 리다이렉트 한다. ex) OAuth 구현 시 많이 볼 수 있음. (카카오 로그인, 구글 로그인 등)
-
4xx (클라이언트 에러)
-
클라이언트측 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없다.
-
클라이언트의 요청이 잘못되었기 때문에, 같은 요청의 재시도는 실패한다.

-
대표 상태코드
400 Bad Request
-
클라이언트가 HTTP 요청 내용을 수정 후 보내야 한다.
ex) GET 메소드로 만들어진 API인데 POST로 보낸다?
ex) API 스펙과 일치하지 않을 때, 숫자를 문자로, 문자를 숫자로 등
401 Unauthorized
403 Forbidden
404 Not Found
- 요청한 리소스가 서버에 없다.
- 이를 이용하여 리소스를 숨겨놓기도 한다. 있지만 없는척 가능
-
5xx (서버 에러)

- 실제 서버에서 문제가 발생한 경우 5xx Error이기 때문에 발생하지 않는것이 최선이다.
- 대표 상태코드
500 Internal Server Error
503 Service Unavailable
- 서비스 이용 불가
Retry-After Header를 사용하면 얼마뒤에 복구되는지 응답할 수 있다.