HTTP란?
Hypter Text Transfer Protocol 의 약자로 웹에서 데이터를 주고 받기 위한 통신 규약입니다.

클라이언트가 인터넷을 통해 서버에 요청을 보내고, 응답을 기다립니다 여기서 연결을 끊어내는 것이 아닌 응답이 올때까지 연결을 열어둡니다,
서버는 요청에 대한 처리를 수행 후 결과를 응답해줍니다.
HTTP VS TCP
그럼 하나 의문이 드는게 TCP 랑 HTTP랑은 어떤 차이가 있는것인가?
둘다 "클라이언트가 인터넷을 통해 서버와 통신 할때 지켜야할 규칙" 아닌가?? 하는 의문이 들었습니다.
TCP 는 절차 이고 HTTP는 문법이다.
무슨 말이냐면 TCP는 이런것입니다
"모수에선 음식을 만지기 전에 따뜻한 물로 20초 이상 손을 씻어야 합니다." 이건 음식을 만지기 전에 규칙 과 동시에 절차 이죠.
반대로 HTTP는
"영어에서 문장은 명사 + 동사 가 있어야 한다" 같은 문법입니다.
즉, TCP는 클라이언트와 서버가 통신 시 지켜야할 순서, HTTP는 통신 데이터가 어떤 구조를 가져야 하는지에 대한 정의 인것입니다.
추가적으로 HTTP는 TCP위에서 동작하며, 응용계층 프로토콜입니다.
응용계층 프로토콜이란?
응용 계층(Application Layer)은 OSI 7계층 중 가장 위에 있는 제7계층으로, 사용자와 네트워크 간의 접점 역할을 합니다. 우리가 일상적으로 사용하는 웹 브라우저나 메일 프로그램 등이 이 계층의 서비스를 이용해 데이터를 주고받습니다.
🗼 OSI 7계층 모델 - 핵심 총정리
OSI 7계층 OSI 7계층은 네트워크 통신이 일어나는 과정을 7단계로 나눈 것을 말한다. OSI 7계층을 나눈 이유는? 흐름을 한눈에 알아보기 쉽고 7단계 중 특정한 곳에 이상이 생기면 다른 단계의 장
inpa.tistory.com
HTTP 특징
http는 인터넷 상에서 불특정 다수의 통신 환경을 기반으로 설계되었다.
무상태 (Stateless) : 서버는 클라이언트의 상태를 보존하지 않는다.
장점
- Scale Out 수평 확장성이 높다.
- 갑자기 요청량이 증가하여도 서버를 증설 하기 쉽다.
단점
- 클라이언트가 데이터를 추가적으로 전송 해야한다.
- 무산테로 설계 할 수 없는 경우가 있다.
- Cookies, Session, Token 등으로 해결.
HTTP Message 구조
http Message는 요청, 응답 두가지 종류가 있고 각각 구조가 다르다.

요청

1. startLine
- http method : 요청의 의도를 가진 GET, POST, PUT, PATCH, DELETE 등이 있다.
- path : 경로 [ Query String(= Query Parameter) 에 해당하는 값도 포함한다.]
- HTTP Version : 1.1
2. Header
- host : 요청 보내는 호스트 값
- 임의의 Header 추가 가능 : 단 서버가 값을 알고있어야 한다.
- 요청의 추가 정보를 가지고 있다. ex) Message Body 내용, 크기, 인증, 브라우저 정보, 서버 정보 등
3. Empty Line
- 공백 한줄 (필수 값)
4. Message Body
- 실제 전송하는 데이터가 담겨 있는 부분 ( HTML, 이미지, JSON 등 byte로 표현되는 모든 데이터 전송 가능)
응답

1. startLine
- HTTP Version
- Status Code
- Status Text
2. Header
- Response에서만 사용되는 Header 값들이 따로 존재한다.
3. Empty Line
- 공백 한줄 (필수 값)
4. Message Body
- 실제 전송하는 데이터가 담겨 있는 부분 ( HTML, 이미지, JSON 등 byte로 표현되는 모든 데이터 전송 가능)
- 만약 전송할 데이터가 없다면, Body가 공백으로 존재한다.
HTTP Method
- POST : 리소스 생성, ( Message Body를 통해 요청 데이터를 전달한다.)
- GET : 리소스 조회
- PUT : 리소스 덮어쓰기(전체 수정)
- PATCH : 리소스 부분 수정
- DELETE : 리소스 삭제
- 기타 : HEAD - message body를 제외하고 상태 줄과 header만 반환한다 , OPRIONS - 대상 리소스에 대한 통신 가능한 Method를 설명한다.
속성

안정성
GET메서드는 리소스의 변환 없이 조회만 하므로 안전하다.
POST,DELETE, PUT, PATCH 는 안전하지 않다.
멱등성
한번을 호출하거나, 수천번을 호출하거나 항상 결과는 같다.
- GET → 같은 결과가 계속 조회된다.
- PUT → 수정해서 대체된 후의 결과는 계속 같다.
- DELETE → 같은 요청을 여러번해도 삭제된 결과는 같다.
- POST → 멱등성을 보장하지 않는다.
요청이 실패한 경우 재시도 하기 위해 해당 속성이 필요하다.
캐시가능성
재사용을 위해 요청에 대한 응답을 저장할 수 있는가?
- GET, HEAD, POST 메소드는 캐시가 가능하다.
- 일반적으로 GET, HEAD 정도만 캐시로 사용한다.
HTTP Status Code
- 1xx (정보) : 요청 수신 후 처리중인 상태
- 2xx (성공)
- 200 ok : 요청 성공
- 201 Created : 새로운 리소스 생성
- 202 Accepted : 요청이 수신되었으나 처리가 완료되지 않음 , 주로 Batch처리에서 사용.
- 3xx(리다이렉션)
- 요청을 완료하려면 추가 행동이 필요한 상태
- 3xx 응답 + Location HTTP Header가 있으면 Location 위치로 리다이렉트 한다.
- 4xx(클라이언트 에러)
- 400 Bad Request : 클라이언트가 http 요청 내용을 수정 후 보내야 한다.
- 401 Unauthorized : 클라이언트가 리소스에 대한 인증이 필요하다. 응답에 www-Authenticate 헤더와 함께 인증 방법을 설명한다
- 403 Forbidden : 서버가 요청을 받았지만 승인 거부 - 주로 인가 (Authorization) 관련 문제
- 404 Not Found : 요청한 리소스가 서버에 존재하지 않는다.
- 5xx(서버 에러)
- 500 Internal Server Error : 대부분의 에러를 500으로 처리한다.
- 새로운 상태 코드가 추가되어도 크게 고민할 필요가 없다.
- 디테일한 코드를 몰라도 몇 번대 코드인지만 알면 된다.
- 응답 코드를 상황에 맞게 잘 작성 해야 한다. 매우 기본이고 매우 중요하다.
'TIL' 카테고리의 다른 글
| 데이터베이스 (0) | 2026.01.30 |
|---|---|
| 인덱스가 많아지면 수정 삽입등 성능에 영향이 미치는 이유 (0) | 2026.01.30 |
| 결제실패 시 재고 원상복구 시스템 만들어보기 (1) | 2026.01.23 |
| 예외 처리를 하는 이유 (0) | 2026.01.20 |
| 의존성 주입 해보기 (DI) (0) | 2026.01.15 |