Dom에서 fetch를 이용하여 서버와 데이터를 주고받는 방법을 알았다.
이때, 클라이언트와 서버가 원활하게 데이터를 주고받으려면 HTTP를 따라가야한다.
HTTP : HyperText Transfer Protocol
HTTP를 통해 주고받는 모든 데이터는 HTTP 메세지라고 한다.
-요청 : 클라이언트가 서버에 전달하는 메세지. 서버의 동작을 유도한다.
-응답 : 서버가 클라이언트의 요청에 대해 보내는 결과 메세지.
이 요청과 응답 메세지는 공통된 네 가지 구성 요소를 가진다.
-Start Line : 요청의 목적과 경로, 사용되는 HTTP버전을 명시
-Headers : 요청에 대한 부가 정보
-Empty Line : 헤더와 본문을 구분하는 빈 줄
-Body : 서버에 전달할 데이터 (선택적)
요철 메세지의 첫 줄은 Start Line 이라고 하며, 아래 형식으로 구성된다.
<HTTP 메서드> <요청 타겟> <HTPP 버전>
ex ) Post /api/register HTTP/1.1
HTTP메서드 : 클라이언트가 서버에 어떤 동작을 요청하는지를 나타낸다.
요청 타겟 : 요청 대상 리소스의 경로를 의미하며, 보통 URL의 경로 (/api/user)또는 전체 URL이 포함된다.
HTTP버전 : 요청에 사용되는 HTTP의 프로토콜 버전으로, 일반적으로 HTTP/1.1또는 HTTP/2가 사용된다.
요청 헤더는 클라이언트가 서버에 부가 정보를 전달할 때 사용된다.
일부는 브라우저나 라이브러리가 자동으로 추가하고, 일부는 개발자가 직접 설정한다.
-host : 요청을 보내는 서버의 도메인
-user-Agent : 요청을 보낸 클라이언트 정보 (브라우저, OS등)
-Accept : 클라이언트가 받을 수 있는 응답 타입
-Content-Type : 요청 본문의 데이터 형식
-Authorization : 인증 정보(JWT,API키 등)
헤더와 본문 사이에는 반드시 빈 줄 한 줄이 들어가야한다.
이 줄이 없으면 본문 Bode가 없는 것으로 간주된다.
요청 본문을 서버로 전달할 질제 데이터를 담는 영역이다.
주로 Post, Put, Patch요청에서 사용되며, 데이터 구조는 API명세서를 참고해야 한다.
응답의 상태를 나타낸다.
<HTTP 버전> <상태 코드> <상태 메세지>
ex ) HTTP/1.1 201 Created // 회원가입 성공 시 리소스가 생성되었음을 의미
-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 : 서버 오류 : 예기치 않은 서버 오류 발생
응답 헤더는 서버가 응답 데이터에 대해 추가 정보를 제공할 때 사용된다.
요청과 마찬가지로, 헤더와 본문 사이에는 빈 줄이 존재해야한다.
서버가 반환하는 데이터가 담긴 부분으로, JSON, HTMl, 텍스트 등 다양한 형식을 가질 수 있다.
HTTP요청 메세지의 Start Line은 다음과 같은 형식으로 구성된다.
<HTTP 메서드> <요청 타겟> <HTTP 버전>
ex ) POST/api/register HTTP/1.1
여기서 HTTP메서드는 서버가 수행해야 할 동작을 나타내는 키워드이다.
/api/register 경로로 POST방식의 요청을 보낸다는 뜻이다.
-GET : 데이터 조회
-POST : 데이터 생성
-PUT : 데이터 전체 수정
-PATCH : 데이터 부분 수정
-DELETE : 데이터 삭제
:create, read, update, delete
작성, 조회, 수정, 삭제
| HTTP 메서드 | 설명 | 관련 CRUD 연산 | 멱등성 여부 |
|---|---|---|---|
| GET | 리소스를 조회 | Read | ✅ 멱등함 |
| POST | 리소스를 생성하거나 데이터 제출 | Create | ❌ 멱등하지 않음 |
| PUT | 리소스를 전체 업데이트 (없으면 생성) | Update / Replace | ✅ 멱등함 |
| PATCH | 리소스를 일부만 수정 | Update (Partial) | ❌ 멱등하지 않을 수 있음 |
| DELETE | 리소스를 삭제 | Delete | ✅ 멱등함 |
| HEAD | GET과 유사하지만 본문 없음 | Read (메타 정보) | ✅ 멱등함 |
| OPTIONS | 사용 가능한 메서드 조회 | - | ✅ 멱등함 |
멱등성이란?
: 같은 요청을 여러 번 보내더라도 결과가 동일함을 보장하는 특성.
결과가 변하지 않으면 멱등한 메서드, 결과가 달라진다면 비멱등한 메서드이다.
: 데이터 조회
서버에 데이터를 요청할때 사용되며, 요청에 본문(BODY) 없이 데이터를 쿼리 스트링 또는 URL(경로) 파라미터로 전달된다.
? 쿼리 스트링이란
: URL에 데이터를 추가하는 방법 중 하나이다. 주로 GET 요청에서 서버에 특정 파라미터를 전달할 때 사용된다.
URL 뒤에 ?로 시작해서 key=value형식으로 데이터를 전달하며, 여러개의 파라미터는 &으로 구분한다.
? 파라미터란
: 파라미터는 서버에 요청을 보낼 때 필요한 데이터(값)를 전달하는 방법이다.
GET은 서버의 상태를 바꾸지 않으며 멱등성이 있으므로 같은 요청을 여러번 보내도 결과는 동일하다.
: 새로운 데이터 추가
서버에 새로운 데이터를 추가할 때 사용된다.
요청 본문(BODY)에 JSON 형식으로 데이터를 담아 보낸다.
서버의 상태를 변경하며 멱등성이 없기 때문에 같은 요청을 반복하면 의도하지 않은 결과가 발생할 수 있다.
: 데이터 전체 수정
특정 리소스의 전체 정보를 덮어씌워 수정(Update-Replace)할 때 사용된다.
존재하지 않으면 새로 생성되기도 한다.
전체를 교체하기 때문에, 기존 데이터 중 일부만 전달하면 나머지가 사라질 수 있으므로 주의가 필요하다.
멱등성이 있으므로 같은 요청을 여러 번 보내도 결과는 동일하다.
: 데이터 부분 수정
특정 리소스의 일부 정보만 수정할 때 사용된다.
수정이 필요한 일부 필드만 본문에 포함하여 전송한다.
멱등성이 없기 때문에 같은 요청을 반복하면 의도하지 않은 결과나 발생할 수 있다.
: 데이터 삭제
특정 리소스를 삭제할 때 사용된다.
본문없이 ID만 URL에 포함하는 경우가 일반적이다.
@ 이미 삭제된 리소스에 다시 delete요청을 보내도 서버는 오류를 반환하지 않을 수 있다.
fetch()사용 시 response.ok또는response.status를 이용해 예외 상황을 처리해야한다.