[260615]HTTP

이상민·2026년 6월 15일

Spring

목록 보기
24/59

목차

HTTP란

HTTP(HyperText Transfer Protocol)는 클라이언트와 서버간에 데이터를 주고받기 위해 만든 통신 규약이다.
여기서 HyperText는 문서간 연결(하이퍼링크) 기능을 가진 텍스트를 의미하며, Transfer Protocol은 텍스트로 작성된 정보를 전달하기 위한 규약을 의미한다.


HTTP의 동작 원칙

  • 무상태성
서버는 클라이언트의 이전 상태를 기억하지 않는다.

서버는 클라이언트의 요청을 독립적으로 처리하게 된다.
만약 서버가 모든 클라이언트의 상태를 기억하게 되면 서버 부담이 커지고 크게는 과부하가 발생할 수 있다. 그래서 HTTP는 각 요청에 필요한 정보를 요청마다 함께 전달하도록 설계되었다.
쿠키, 세션, 토큰등이 예시라고 할 수 있다.

  • 비연결성
클라이언트가 요청을 보내고 서버가 응답을 마치면, 연결을 끊는다.

서버가 모든 클라이언트의 연결을 끊지않고 유지한다면, 마찬가지로 서버 부담이 커지게 되고 과부하가 발생할 수 있다. 그래서 서버는 필요한 순간에만 연결함으로서 더 많은 요청을 효율적으로 관리할 수 있게 한다.
보통은, 정해진 시간 동안 연결을 유지하여 연속으로 요청/응답을 실시할 수 있다. 이를 Keep-Alive기능이라고 한다.




HTTP 구조


HTTP는 크게 1.시작줄(요청줄) 2.헤더(Header) 3.본문(Body)으로 구성된다.

HTTP요청(Request)

// (1) 시작 줄 (Start-Line)
Version: HTTP/1.1
Method: POST 
URL: 홈페이지 주소:포트번호/아이템

// (2) 헤더 (Headers)
Content-Type: application/json
Accept: application/json, text/html
...

// (3) 본문 (Body)
{
  "name": "아이스크림",
  "price": 2000,
  "category": "dessert"
}

HTTP요청은 클라이언트가 서버에 필요한 동작을 요청하거나 데이터를 전달하는 것이다.
여기에는 GET(데이터 조회), POST(데이터 전달 및 생성), DELETE(삭제)등이 있다.
예를 들어, Post메서드는 서버에 데이터를 전달하거나 또는 새로운 데이터를 생성할 때 주로 사용한다. URL을 첨부하여 어떤 자원에 요청을 보낼지 결정하고 Body(아이스크림,2000원,간식)에 필요한 데이터를 담아 전달한다


HTTP응답(Reponse)

// (1) 상태 줄 (Status Line)
Version: HTTP/1.1
Status Code: 201 
Status Text: Created

// (2) 헤더 (Headers)
Content-Type: application/json

// (3) 본문 (Body)
{
  "id": "abc-123-xyz",
  "name": "새우깡",
  "price": 1500,
  "category": "living"
}

응답은 클라이언트의 요청(Request)에 대해 서버가 결과를 반환하는 메시지이다.
여기서 Status Code는 서버가 요청을 어떻게 처리했는지를 알 수 있게 해주는 코드이다.

상태 코드상태 메시지설명
100Continue요청의 일부를 받았으며 계속 진행 가능
101Switching Protocols프로토콜 변경 요청 승인
200OK요청 성공
201Created새로운 데이터 생성 성공
202Accepted요청 접수 완료 (처리 중)
204No Content요청 성공, 반환할 데이터 없음
301Moved Permanently요청한 자원이 영구적으로 이동됨
302Found요청한 자원이 임시로 이동됨
304Not Modified변경된 내용 없음 (캐시 사용)
400Bad Request잘못된 요청
401Unauthorized인증 필요
403Forbidden접근 권한 없음
404Not Found요청한 자원을 찾을 수 없음
405Method Not Allowed지원하지 않는 요청 방식
409Conflict요청이 현재 상태와 충돌
500Internal Server Error서버 내부 오류
502Bad Gateway게이트웨이 서버 오류
503Service Unavailable서버 이용 불가
504Gateway Timeout서버 응답 시간 초과

Status Code에서 자주 볼 수 있는 상태 코드에는 이 정도가 있다.





HTTP로 데이터를 전송하는 방법

요청의 경우에는 크게 두가지 방법으로 데이터를 전송할 수 있다.

1.주소에 붙여서 보내기(GET)

이는 조회와 같이 조건만 간단히 보낼때 사용된다.
예를들어,

GET 홈페이지 주소 : 포트번호/search?keyword=아이스크림

라는 코드를 사용했다면, '홈페이지주소의 포트번호로 가서 상품을 찾아야하는데, 키워드는 아이스크림이다.' 라는 뜻이다.

2.본문(Body)로 보내기(POST, PUT, PATCH)

주로 데이터 추가, 수정과 같이 많은 데이터를 전달해야 할때나, 비밀번호같은 민감한 데이터를 다룰때 사용된다.

URL에는 길이 제한이 존재하고 많은 데이터를 전달하기에 적절하지 않기 때문에 Body를 사용한다.
또한, URL은 브라우저 주소창에 노출될 수 있으므로 민감한 데이터는 Body에 넣어서 전달한다.

profile
백앤드 개발 브이로그

0개의 댓글