학습 목표
- HTTP의 특징인 Stateless를 설명할 수 있다.
- Request, Response 구조에 대해 설명할 수 있다.
- HTTP request method의 종류를 알고 서로의 차이점을 설명할 수 있다.
- 대표적인 Status code의 종류를 설명할 수 있다.
HyperText Transfer Protocol
물리적으로 떨어진 컴퓨터끼리 HTML파일을 주고 받을 수 있게 하는 소통방식, 약속
HyperText
: HTML로 만든 파일
HTML(HyperText Markup Language)
: 문서와 문서가 링크로 연결되도록 하는 태그로 구성된 언어.
: 웹페이지를 만들기 위해서 웹브라우저 위에서 동작하는 언어.
Transfer
웹사이트를 널리 알리고 다른 사람들과 공유하기 위해서 다른 컴퓨터에게 전송한다.
보내는 주체와받는 주체
Protocol
협약, 통신 규약
http라는 약속의 조항들을 알아보겠습니다
HTTP 통신의 핵심은 요청과 응답이다.
| 방향 | 행동 | 예시 |
|---|---|---|
| 보내는 주체 → 받는 주체 | 요청 | 사용자가 유튜브 영상 링크 누른다 |
| 받는 주체 → 요청 보낸 주체 | 응답 | 유튜브가 영상 보낸다 |
State(상태) + less(없음)
각각의 HTTP 통신(요청/응답)은 독립적이다
쿠키, 세션, 로컬스토리지 같은 기술이 만들어졌다.

HTTP 요청: 프론트엔드(클라이언트) 에서 백엔드(서버)로 보내는 메세지
Start Line: 요청의 첫번째 줄. 이 시작 줄도 세 부분으로 구성되어있습니다.
HTTP Method: 해당 요청이 의도한 액션을 정의하는 부분. 주로 GET, POST, DELETE가 많이 쓰임
Request target: 해당 request가 전송되는 목표 url
HTTP Version: 말 그대로 사용되는 HTTP 버전을 뜻한다. 주로 1.1 버전이 널리 쓰임
GET /login HTTP/1.1
# 해석: GET 메소드로 login 이라는 요청 타겟에 HTTP 1.1 버전으로 요청을 보내겠다!
Headers: 해당 요청에 대한 추가 정보(메타 데이터)를 담고있는 부분입니다.
Key: Value 값으로 되어있다 (JavaScript의 객체, Python의 딕셔너리 형태라고 보면 된다)
Host: 요청을 보내는 목표(타겟)의 주소. 즉, 요청을 보내는 웹사이트의 기본 주소가 된다. (ex. www.apple.co.kr)
User-Agent: 요청을 보내는 클라이언트의 대한 정보 (ex. chrome, firefox, safari, explorer)
Content-Type: 해당 요청이 보내는 메세지 body의 타입 (ex. application/json)
Content-Length: body 내용의 길이
Authorization: 회원의 인증/인가를 처리하기 위해 로그인 토큰을 Authroization 에 담는다
Headers: {
Host:
User-Agent:
Content-Type:
Content-Length:
Authorization:
}
Body: 해당 요청의 실제 내용입니다. 주로 Body를 사용하는 메소드는 POST 입니다.
ex) 로그인 시에 서버에 보낼 요청의 내용
Body: {
"user_email":"wecode@gmail.com" "user_password": "wecode"
}

회원가입할 때 처음 토큰을 생성하고
그 토큰으로 계속 인증한다(바뀌지 않는다!)
토큰에 기한은 없다. 쿠키에는 기한이 있다.
Status Line: 응답의 상태 줄입니다.
HTTP/1.1 404 Not Found
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청(ex. 로그인 시도)에 대해서
# 유저의 정보를 찾을 수 없기 때문에(Not Found) 404 상태 메세지를 보낸다.
HTTP/1.1 200 SUCCESS
# 해석: HTTP 1.1 버전으로 응답하고 있는데, 프론트엔드에서 보낸 요청에 대해서 성공했기 때문에
# 200 상태 메세지를 보낸다.
Body: {
"message": "SUCCESS"
"token": "kldiduajsadm@9df0asmzm" (암호화된 유저의 정보)
}
다음 예시는 애플 홈페이지에서 쇼핑을 하는 상황을 가정합니다
메소드들은 프론트엔드(클라이언트)의 입장에서 요청의 의도가 담긴 것입니다!

어떤 데이터를 서버로 부터 받아(GET)올 때 주로 사용하는 메소드
👉🏻 장바구니에 담은 제품을 조회한다

데이터를 생성 / 수정 할 때 주로 사용되는 메소드
대부분 요청에 body가 포함되어 보내진다
👉🏻 장바구니에 맘에 드는 상품을 담는다


특정 데이터를 서버에서 삭제 요청을 보낼때 쓰는 메소드
👉 장바구니에서 제품을 삭제한다


| 분류 | status code | 뜻 |
|---|---|---|
| Success | 200:OK | 문제없이 요청에 대한 처리가 백엔드 서버에서 이루어짐 |
| Success | 201:Created | 무언가가 잘 생성되었을 때(Successfully Created) |
| Success | 204:No Content | 요청이 성공했으며 제공할 응답메세지가 없음, |
| DELETE 메소드의 요청으로 삭제를 성공해 응답할 컨텐츠 없음 | ||
| Client Error | 400:Bad Request | 해당 요청이 잘못됨, 요청의 Body에 보내는 내용이 잘못됨 |
| ex) 전화번호 보내기: Body에 숫자가 아닌 문자열 주소가 담겼을 때 | ||
| Client Error | 401:Unauthorized | 유저가 해당 요청을 진행하려면 먼저 로그인을 하거나 회원가입이 필요함 |
| ex) wish list, 좋아요 기능은 회원이 아니면 요청x | ||
| Client Error | 403:Forbidden | 해당 요청에 대한 권한이 없음. 접근 불가능한 정보에 접근 시 |
| Client Error | 404:Not Found | 요청된 URI 가 존재하지 않는다 |
| Server Error | 500:Internal Server Error | 서버에서 에러 났을 때 |