HTTP(Hypertext Transfer Protocol)는 웹을 개발하는 사람이라면 누구나 다 알아야 하는 통신 프로토콜이다.
웹에서는 브라우저와 서버간의 데이터를 주고받기 위한 방식으로 HTTP 프로토콜을 사용하고 있다.
상호간에 정의한 규칙을 의미하며 특정 기기 간에 데이터를 주고 받기 위해 정의되었다.
통신 프로토콜을 쉽게 풀어보면, 나느 이렇게 줄테니 넌 이렇게 받고 난 너가 준 거 그렇게 받을게 라고 생각할 수 있다.
HTTP 프로토콜은 상태가 없는(stateless) 프로토콜이다.
여기서 stateless란, 데이터를 주고 받기 위한 각각의 데이터 요청이 서로 독립적으로 관리 된다는 말이다.
⇒ 즉, 이전 데이터 요청과 다음 데이터 요청이 서로 관련이 없다는 뜻이다.
이러한 특징 덕에 서버는 세션과 같은 별도의 추가 정보를 관리하지 않아도 되고, 다수의 요청 처리 및 서버의 부하를 줄일 수 있는 성능 상의 이점이 생긴다.
HTTP 프로토콜은 일반적으로 TCP/IP 통신 위에서 동작하며 기본 포트는 80번이다.
HTTP 프로토콜로 데이터를 주고 받기 위해서는 아래와 같이 요청을 보내고 응답을 받아야 한다.
그리고 요청과 응답을 이해하기 위해서는 먼저 클라이언트(client)와 서버(server)를 이해해야한다.
클라이언트
란, 요청을 보내는 쪽을 의미하며 일반적으로 웹 관점에서는 브라우저를 의미한다.
서버
란, 요청을 받는 쪽을 의미하며 일반적으로 데이터를 보내주는 원격지의 컴퓨터를 의미한다.
URL(Uniform Resource Locators)은 개발자가 아니더라도 이미 우리에게 익숙한 용어이다.
서버에 자원을 요청하기 위해 입력하는 영문 주소이다.
숫자로 되어 있는 IP 주소보다 기억하기 쉽기 때문에 이용한다.
URL의 구조는 아래와 같다.
앞에서 살펴본 URL을 이용하면 서버에 특정 데이터를 요청할 수 있다.
여기서 요청하는 데이터에 특정 동작을 수행하고 싶다면, HTTP 요청 메서드(HTTP Request Methods)를 이용한다.
일반적으로 HTTP 요청 메서드는 HTTP Verbs라고도 불리우며 아래와 같이 주요 메서드를 가지고 있다.
GET
: 존재하는 자원에 대한 요청POST
: 새로운 자원을 생성PUT
: 존재하는 자원에 대한 변경DELETE
: 존재하는 자원에 대한 삭제이와 같이 데이터에 대한 조회, 생성, 변경, 삭제 동작을 HTTP 요청 메서드로 정의할 수 있다.
참고로 때에 따라서는 POST 메서드로 PUT, DELETE의 동작도 수행할 수 있다.
기타 요청 메서드는 다음과 같다.
앞에서 살펴본 URL과 요청 메서드가 클라이언트에서 설정해야 할 정보라면 HTTP 상태코드는 서버에서 설정해주는 응답 정보이다.
프런트앤드 개발자 입장에서는 더욱이 중요한 이유가 이 상태 코드로 에러 처리를 할 수 있기 때문이다. 간단한 예시를 들어 아래와 같이 사용자 목록을 받아오는 GET 메서드 요청을 날려보겠다.
http://domain.com/users
위 요청을 보내고 나면 서버에서 응답으로 오는 상태 코드가 크게 2개로 나뉜다. 200(성공)과 404(실패)이다.
따라서, 이 HTTP 상태코드로 추가적인 로직을 구현할 수 있다.
주요 상태코드는 200번대부터 500번대까지 다양하게 있지만 주요한 상태 코드만 몇 개 살펴보도록 하겠다.
200번대의 상태 코드는 대부분 성공을 의미한다.
300번대의 상태 코드는 대부분 클라이언트가 이전 주소로 데이터를 요청하여 서버에서 새 URL로 리아이렉트를 유도하는 경우이다.
400번대 상태코드는 대부분 클라이언트의 코드가 잘못된 경우이다. 유효하지 않은 자원을 요청했거나 요청이나 권한이 잘못된 경우 발생한다. 가장 익숙한 상태 코드는 404코드이다. 요청한 자원이 서버에 없다는 의미이다.
500번대 상태 코드는 서버 쪽에서 오류가 난 경우이다.
앞에서 배운 URL, 요청 메서드, 상태 코드를 조합하면 아래와 같은 구조가 나오게 된다.