HTTP

이재은·2025년 5월 2일

Dom에서 fetch를 이용하여 서버와 데이터를 주고받는 방법을 알았다.
이때, 클라이언트와 서버가 원활하게 데이터를 주고받으려면 HTTP를 따라가야한다.

HTTP : HyperText Transfer Protocol

HTTP를 통해 주고받는 모든 데이터는 HTTP 메세지라고 한다.
-요청 : 클라이언트가 서버에 전달하는 메세지. 서버의 동작을 유도한다.
-응답 : 서버가 클라이언트의 요청에 대해 보내는 결과 메세지.

이 요청과 응답 메세지는 공통된 네 가지 구성 요소를 가진다.
-Start Line : 요청의 목적과 경로, 사용되는 HTTP버전을 명시
-Headers : 요청에 대한 부가 정보
-Empty Line : 헤더와 본문을 구분하는 빈 줄
-Body : 서버에 전달할 데이터 (선택적)

요청메세지의 구조

Start Line

요철 메세지의 첫 줄은 Start Line 이라고 하며, 아래 형식으로 구성된다.

<HTTP 메서드> <요청 타겟> <HTPP 버전>
ex ) Post /api/register HTTP/1.1

HTTP메서드 : 클라이언트가 서버에 어떤 동작을 요청하는지를 나타낸다.
요청 타겟 : 요청 대상 리소스의 경로를 의미하며, 보통 URL의 경로 (/api/user)또는 전체 URL이 포함된다.
HTTP버전 : 요청에 사용되는 HTTP의 프로토콜 버전으로, 일반적으로 HTTP/1.1또는 HTTP/2가 사용된다.

Headers

요청 헤더는 클라이언트가 서버에 부가 정보를 전달할 때 사용된다.
일부는 브라우저나 라이브러리가 자동으로 추가하고, 일부는 개발자가 직접 설정한다.
-host : 요청을 보내는 서버의 도메인
-user-Agent : 요청을 보낸 클라이언트 정보 (브라우저, OS등)
-Accept : 클라이언트가 받을 수 있는 응답 타입
-Content-Type : 요청 본문의 데이터 형식
-Authorization : 인증 정보(JWT,API키 등)

Empty Line

헤더와 본문 사이에는 반드시 빈 줄 한 줄이 들어가야한다.
이 줄이 없으면 본문 Bode가 없는 것으로 간주된다.

Body

요청 본문을 서버로 전달할 질제 데이터를 담는 영역이다.
주로 Post, Put, Patch요청에서 사용되며, 데이터 구조는 API명세서를 참고해야 한다.

응답메세지의 구조

Status Line

응답의 상태를 나타낸다.

<HTTP 버전> <상태 코드> <상태 메세지>
ex ) HTTP/1.1 201 Created // 회원가입 성공 시 리소스가 생성되었음을 의미

-HTTP 버전 : 사용된 HTTP 프로토콜 버전
-상태 코드 : 요청 처리 결과를 나타내는 숫자
-상태 메세지 : 상태 코드에 대한 간략한 설명

HTTP상태 코드와 의미

아래는 자주 보게되는 상태코드(response.status)이다.

-200 OK : 성공 : 요청이 성공적으로 처리됨
-201 Created : 생성됨 : POST요청 처리 후 리소스가 생성됨
-204 No Content : 본문 없음 : 성공했지만 반환할 데이터 없음
-400 Bad Request : 잘못된 요청 : 클라이언트 요청이 잘못됨
(혹은 필수 정보가 누락 된 경우 -JSON 형식 오류 -필수 파라미터 누락 -잘못된 쿼리 구조)
-401 Unauthorized : 인증 실패 : 인증 필요
-404 Not Found : 찾을 수 없음 : 요청한 리소스를 찾지 못함
-500 Internal Sever Error : 서버 오류 : 예기치 않은 서버 오류 발생

  • 조건 분기 처리에서 숫자 직접 비교보다 범위 인식이 중요하다
    if (response.status >= 200 && response.status <300)
    모든 성공 응답을 포괄할 수있어 실용적이다.
  • **에러 발생 시 서버 문제인지 클라이언트 문제인지 구분해야 한다.
    4xx는 대부분 요청의 문제(입력 오류,인증 문제 등)이고,
    5xx는 서버 내부 문제이다.

Headers

응답 헤더는 서버가 응답 데이터에 대해 추가 정보를 제공할 때 사용된다.

Empty Line

요청과 마찬가지로, 헤더와 본문 사이에는 빈 줄이 존재해야한다.

Body

서버가 반환하는 데이터가 담긴 부분으로, JSON, HTMl, 텍스트 등 다양한 형식을 가질 수 있다.

HTTP 메서드

HTTP요청 메세지의 Start Line은 다음과 같은 형식으로 구성된다.

<HTTP 메서드> <요청 타겟> <HTTP 버전>
ex ) POST/api/register HTTP/1.1

여기서 HTTP메서드는 서버가 수행해야 할 동작을 나타내는 키워드이다.
/api/register 경로로 POST방식의 요청을 보낸다는 뜻이다.

대표적인 메서드

-GET : 데이터 조회
-POST : 데이터 생성
-PUT : 데이터 전체 수정
-PATCH : 데이터 부분 수정
-DELETE : 데이터 삭제

CRUD

:create, read, update, delete
작성, 조회, 수정, 삭제

HTTP 메서드설명관련 CRUD 연산멱등성 여부
GET리소스를 조회Read✅ 멱등함
POST리소스를 생성하거나 데이터 제출Create❌ 멱등하지 않음
PUT리소스를 전체 업데이트 (없으면 생성)Update / Replace✅ 멱등함
PATCH리소스를 일부만 수정Update (Partial)❌ 멱등하지 않을 수 있음
DELETE리소스를 삭제Delete✅ 멱등함
HEADGET과 유사하지만 본문 없음Read (메타 정보)✅ 멱등함
OPTIONS사용 가능한 메서드 조회-✅ 멱등함

멱등성이란?
: 같은 요청을 여러 번 보내더라도 결과가 동일함을 보장하는 특성.
결과가 변하지 않으면 멱등한 메서드, 결과가 달라진다면 비멱등한 메서드이다.

GET

: 데이터 조회
서버에 데이터를 요청할때 사용되며, 요청에 본문(BODY) 없이 데이터를 쿼리 스트링 또는 URL(경로) 파라미터로 전달된다.

? 쿼리 스트링이란
: URL에 데이터를 추가하는 방법 중 하나이다. 주로 GET 요청에서 서버에 특정 파라미터를 전달할 때 사용된다.
URL 뒤에 ?로 시작해서 key=value형식으로 데이터를 전달하며, 여러개의 파라미터는 &으로 구분한다.

? 파라미터란
: 파라미터는 서버에 요청을 보낼 때 필요한 데이터(값)를 전달하는 방법이다.

GET은 서버의 상태를 바꾸지 않으며 멱등성이 있으므로 같은 요청을 여러번 보내도 결과는 동일하다.

POST

: 새로운 데이터 추가
서버에 새로운 데이터를 추가할 때 사용된다.
요청 본문(BODY)에 JSON 형식으로 데이터를 담아 보낸다.
서버의 상태를 변경하며 멱등성이 없기 때문에 같은 요청을 반복하면 의도하지 않은 결과가 발생할 수 있다.

PUT

: 데이터 전체 수정
특정 리소스의 전체 정보를 덮어씌워 수정(Update-Replace)할 때 사용된다.
존재하지 않으면 새로 생성되기도 한다.
전체를 교체하기 때문에, 기존 데이터 중 일부만 전달하면 나머지가 사라질 수 있으므로 주의가 필요하다.
멱등성이 있으므로 같은 요청을 여러 번 보내도 결과는 동일하다.

PATCH

: 데이터 부분 수정
특정 리소스의 일부 정보만 수정할 때 사용된다.
수정이 필요한 일부 필드만 본문에 포함하여 전송한다.
멱등성이 없기 때문에 같은 요청을 반복하면 의도하지 않은 결과나 발생할 수 있다.

DELETE

: 데이터 삭제
특정 리소스를 삭제할 때 사용된다.
본문없이 ID만 URL에 포함하는 경우가 일반적이다.
@ 이미 삭제된 리소스에 다시 delete요청을 보내도 서버는 오류를 반환하지 않을 수 있다.

fetch()사용 시 response.ok또는response.status를 이용해 예외 상황을 처리해야한다.

profile
조각 레몬

0개의 댓글