웹에서는 브라우저와 서버 간에 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용하고 있해 통신 하므로 웹 개발자라면 HTTP를 잘 알아야한다. 또한 CORS, CORB 에러를 해결하는데도 필요하다. HTTP에 대해서 알아보자
HTTP란 무엇인가? 🤔
- HTTP는 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
HTTP에서 P는 프로토콜, HTT는 Hypertext Transfer이다.
*프로토콜? 프로토콜이란 상호 간에 정의한 규칙을 의미하며 특정 기기 간에 데이터를 주고받기 위해 정의. 통신 프로토콜을 쉽게 풀어보면 “나는 이렇게 줄 테니 넌 이렇게 받고 난 너가 준거 그렇게 받을께”
여기서 Hypertext는 뭐지 ?
브라우저에 어떤 것을 클릭하면 링크가 열려 다른 화면으로 이동하는 이런한 링크(하이퍼링크라고도 한다.) 즉, 웹 페이지를 다른 페이지로 연결하는 링크이다.
*html은 하이퍼텍스트의 마크업 언어이다. 텍스트나 이미지를 표현하기 위한 언어! 결국은 html파일을 주고받을 수 있는 프로토콜이 http이다.
따라서 HTTP에 의미를 분석하면 하이퍼텍스트를 주고받는 프로토콜!
HTTP의 동작원리
클라이언트 즉, 사용자가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)을 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(response)하는 형태로 동작한다.
HTTP 프로토콜의 중요한 특징들
무상태 프로토콜
HTTP 프로토콜은 상태가 없는(stateless) 프로토콜이다. 상태가 없다라는 말은 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리가 된다는 말!
클라이언트가 서버에게 “저녁에 치킨먹자”고 말했고 서버가 “그래”라고 답했다.
저녁이 되어 클라는 서버에게 “먹으러 가자”고 말했고 서버는 대답했다. “뭘?”
좀 더 쉽게 말해서 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 말이다.
서버가 클라이언트 상태를 보존하지 않기 때문에 서버 확장성 높다는 장점이 있지만 단점으로는 클라이언트가 추가 데이터 전송해야한다는 점이 있다.
비 연결성
HTTP는 기본이 연결을 유지하지 않는 모델로 요청과 응답방식으로만 작동한다! (이러한 단점을 해결하기 위해 Cookie와 Session이 등장하였다.)
일반적으로 초 단위 이하의 빠른 속도로 응답이 가능 하여 트래픽이 많지 않고, 빠른 응답을 제공할 수 있는 경우에 효율적이다.
하지만 트래픽이 많고 큰 규모의 서비스를 운영할 때는 비 연결성은 한계를 보인다.
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번이다.
Status Code (상태 코드)
- 1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
- 2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
- 3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
- 4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
- 5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
TCP / IP 통신은 또 머람? 🧐
데이터가 의도된 목적지에 닿을 수 있도록 보장해주는 통신 규약이다. TCP / IP는 이름에서 알 수 있듯 TCP / IP에는 두가지 프로토콜로 이루어져 있으며 TCP는 전송 제어 프로토콜 (Transmission Control Protocol)의 약자이며 한 기기에서 다른 기기로 데이터 전송하는 것을 담당하고, IP는 인터넷 프로토콜(Internet Protocol)의 약자이며 이 프로토콜은 데이터의 조각을 최대한 빨리 대상 IP 주소로 보내는 역할 표시한다.
데이터 전송의 과정에서 TCP와 IP 각각 담당하는 작업이 있지만, 결국에는 같은 결과를 목표로 하기 때문에 한 명칭으로 알려지기도 한다!