용어 및 관계 정리
먼저 HTTP, RESTful API, AJAX 이 3가지 서버와 관련된 통신들이 너무나 헷갈리기에 이에 관해 먼저 정리하고 각 개념을 카테고리로 묶어 정리하고자 한다.
HTTP | HTTP는 인터넷에서 데이터를 전송하는데 사용되는 프로토콜이다. * 프로토콜(Protocal) : 2개 이상의 컴퓨터가 서로 데이터를 주고 받을 때 (통신할 때), 사용되는 규칙 혹은 규약이다. 즉 HTTP는 아주 단순하게 2개 이상의 컴퓨터가 통신할 때 규칙이나 규약이 정해져 있지 않고 제각기 통신하게 되면 이를 분석하고 핵심 내용을 파악하는데 시간이 너무 오래걸리거나 혹은 통신이 불가능해지기 때문에 "인간"이 규칙이나 약속을 정해놔서 원활하게 통신할 수 있도록 정해놓은 것이다. |
RESTful API | RESTful API는 HTTP 프로토콜을 기반으로 하는 웹 서비스 아키텍쳐 스타일 중 하나다. 즉, HTTP를 기반으로 한 웹 서비스 아키텍쳐 스타일은 이 외에도 다양할 것이지만(client-server architecutre/microservice architecture etc...), 가장 효과적인 모형이 RESTful API이기에 이를 채택하는 것이다. * 웹 아키텍쳐 스타일 : HTTP 메소드(GET, PUT, POST, DELETE, OPTION 등)를 활용하여 서버와 클라이언트가 통신하는 모형 |
AJAX | AJAX는 클라이언트에서 비동기로 서버와 통신하며 데이터를 가져오는 기술이다. AJAX의 주요한 특징으로는, 1) 비동기로 서버와 통신한다. 2) 리렌더링 없이 서버에서 가져온 데이터를 반영할 수 있다. 는 2가지로 볼 수 있다. 즉, AJAX는 실제 코드에서 통신규약과 모형을 반영한 통신기술을 실제 프로그래밍 언어로 구현한 것으로 이해할 수 있다. |
HTTP란?
HTTP는 블로그 1-2개의 포스팅만으로는 절대절대 정리할 수 없는 광범위한 개념이다.
아주 단순하게 생각해보면, 2개 이상의 컴퓨터가 통신하기 위한 "약속" 쯤으로 생각할 수 있지만, 게임 / 웹 / 보안 / 금융 등 통신의 유형에 따라 어마어마하게 개념이 생성되기에 무엇이라 이야기하기 상당히 어려운 내용이다.
다만, 말 그대로 "프로토콜(규약)"이기에 아주 공통의 몇 가지 개념을 살펴볼 수 있다.
본 포스팅에서는 2가지 개념을 중점으로 살펴보고자 한다.
1. HTTP Message (Request와 Response를 중심으로!)
2. HTTP Method (GET, POST, PUT, DELETE 등)
HTTP Message (HTTP 메세지)
HTTP는 아~~~~~~~~~~~~주 크게 Request(요청)과 Response(응답)으로 구성된다.
요청은 클라이언드에서 서버 쪽에 "~~한 데이터가 필요한데 줄 수 있니?" 라는 부분이고,
응답은 서버쪽에서 클라이언트에게 "좋아/싫어, 그 이유는~~~"이라는 부분이다.
이러한 요청과 응답이 작성된 내용을 HTTP Message라고 부른다.
요청과 응답은 주루룩 적힌 글을 4가지 구획으로 나눠서 살펴볼 수 있다.
< Client >
Start-line = 요청에 대한 1차적인 정보 : 수행할 작업(GET/POST/PUT 등) + 요청 대상(도메인/URL 등)
Header = 요청에 대한 핵심 정보 :
General Header (body 정보와 관련 없는 헤더)
+ Request Header (body에 대한 상세 정보)
+ Representation Header (body에 대한 요약정보)
Body = 요청에 대한 부가정보 :
많은 경우 body를 필요로 하지 않는다. (왜냐면, HTTP message는 요청과 응답에 관한 "운송장 정보"와 같을 뿐!)
그러나 PUT/POST와 같은 경우 정보의 업데이트를 요청하는 경우 body가 사용된다. (왜냐면, 내가 갖고 있는 정보로 대치/저장해야 되니까..?)
< Response >
Status-line = 요청에 대한 1차적인 정보 :
현재 프로토콜의 버전(HTTP/1.1) + **상태코드(요청에 대한 결과) + 상태 텍스트(상태 코드에 대한 상세설명)
Header = 응답에 대한 핵심 정보 :
General Header (body 정보와 관련 없는 헤더)
+ Response Header (응답에 대한 부가정보)
+ Representation Header (body에 대한 요약정보)
Body = 응답에 대한 부가정보 :
200, 201, 204와 같은 상태 코드는 body를 필요로 하지 않는다. (왜냐면, 잘 넘어갔으니께!)
404, 500 같은 경우 body가 사용된다. (왜냐면 내가 갖고 있는 정보로 대치/저장해야 되니까..?)
HTTP 상태 코드
HTTP 상태 코드는 응답에 대한 내용은 코드로 표현한 것을 말한다.
즉, 상태코드만 봐도 클라이언트 측 잘못인지, 서버 측 잘못인지, 잘 전달이 됐는지, 왜 안되는건지 등에 관한 대략의 정보를 얻을 수 있다.
상태코드 정리 내용 (MDN) : https://developer.mozilla.org/ko/docs/Web/HTTP/Status
일반적으로 상태코드는 3가지를 가장 많이 보게된다고 한다.
200번대, 400번대, 500번대...!!! ===> 하지만, 결국 상태코드를 보고 직접 공식문서에 찾아가 분석할 수 있는게 중요!!!!
< 자주 사용되는 상태코드 정리 >
200 ok! : 정상적으로 전달됨
201 : PUT/POST 요청이 정상적으로 반영됨
400 Bad Request : 잘못된 문법으로 인하여 서버가 요청을 이해할 수 없음
403 Forbidden : 클라이언트는 콘텐츠에 접근할 권리를 가지고 있지 않음
404 Not Found : 서버는 요청받은 리소스를 찾을 수 없음. 브라우저에서는 알려지지 않은 URL
500 Internal Server Error : 서버가 처리 방법을 모르는 상황이 발생. 서버는 아직 처리 방법을 알 수 없음.
502 Bad Gateway : 게이트웨이로 작업하는 동안 잘못된 응답을 수신했음.
503 Service Unavailable : 서버가 요청을 처리할 준비가 되지 않음.
HTTP 메서드란?
HTTP 메서드는 클라이언트가 HTTP 통신을 통해 접근한 리소스가 작업했으면 하는 행동을 말한다.
메서드는 프로그래밍 언어에서 기본적으로, 일정한 함수를 정해놓고 해당 함수를 호출하면 경우의 수를 따져 함수가 실행되게 되는데 이와 동일한 맥락에서 사용된다.
클라이언트가 서버에 요청할 수 있는 메서드의 종류는 다음과 같다.
PATCH : 수정하는 데 사용
TRACE (en-US) : 목적 리소스의 경로를 따라 메시지 loop-back 테스트
'Network > HTTP' 카테고리의 다른 글
Cors 에러 및 프록시 (0) | 2023.04.04 |
---|---|
Cookie & Session (0) | 2023.03.07 |
HTTP 개념 : URL, URI (0) | 2023.03.02 |