클라이언트는 정보를 요청하고, 서버는 요청한 정보를 제공한다. 정보를 불러오고 사용자의 요청을 처리하기 위해 파일 서버, 인증 서버, API 서버와 네트워크 통신을 하게 된다.
네트워크 통신은 여러가지 방식이 있다. 이러한 방식들을 묶어서 통신 프로토콜이라 부르고, 메일 주고 받을때 사용하는 SMTP 프로토콜, 파일 전송에 사용하는 FTP 프로토콜 등이 있다. HTTP 프로토콜은 브라우저가 웹 서버와 통신을 하기 위해 생겨난 프로토콜이다. 대부분의 네트워크 통신에 사용하는 대중적인 프로토콜이다. 이때 HTTP 프로토콜을 활용한 통신이 바로 HTTP 통신이다.
HTTP 통신은 기본적으로 요청(request)과 응답(response)로 나눈다. 요청과 응답 모두 공통적으로 요청 라인, 헤더, 바디의 구조를 지닌다. 요청 라인에는 URL, Method와 같은 핵심 요청 정보가 포함된다. 이는 요청과 응답에 따라 구성 요소가 달라진다. 헤더에는 HTTP 설정 값들이 포함되고, 바디에는 통신에 필요한 데이터가 들어간다. HTTP 통신으로 서버에게 정보를 요청하기 위해서는 몇가지 규칙을 지켜야 하는데, 첫번째로 URL이 있어야 하고, 어떤 방식으로 통신 할것인지에 대한 Method가 있어야 한다.
클라이언트가 서버에게 HTTP 요청을 하려면, URL 주소와 HTTP Method를 정해야 한다. 서버에서는 Method에 따라 어떤 요청인지 파악이 가능하다. 대표적으로 GET, POST가 존재한다. 재밌는 점은 클라이언트가 서버에게 동일한 URL 주소로 요청하더라도, 서버 입장에서는 Method가 다르면 다른 요청으로 간주하고 처리하게 된다.
일반적으로 정보를 받아올때 사용한다. 요청 시 Method 설정을 안하면 기본 Method로 GET이 들어간다. 웹서버에서 웹을 다운받거나, 상품 정보들을 받아올때 GET을 사용한다. GET 방식은 서버에 데이터를 전송해야 할 때 url 끝에 query
라는 것을 붙인다. query는 key=value
형태로 구성되어 있다.
새로운 자원을 생성할때 사용한다. 대표적으로 로그인, 상품 업로드, 결제하기 등 정보를 담아서 보내야하는 경우 많이 사용한다. POST도 GET과 마찬가지로 URL 뒤에 query를 붙일 수 있다. 또한 GET은 Body에 데이터를 담을 수 없지만, POST는 HTTP Body
부분에 데이터를 담을 수 있다. Body는 HTTP 통신에 구조적으로 데이터를 담아서 전송할수 있게 도와주는 역할을 한다.
응답 규칙은 아래와 같다.
1. 어떤 상태인지에 대한 정보 Status Code
2. Body
에 요청 결과를 담아야 함.
이때 Status Code
는 200~ 500 번까지 있으며 서버의 응답에 대한 상태를 표현한다.
요청 코드를 크게 나눠보면 아래와 같다.
200
~ 정상적으로 응답을 했을 때.
400
~ 클라이언트가 요청을 잘못했을 때.
500
~ 서버에서 에러가 발생했을 때.
대표적인 응답 코드는 아래와 같다.
200 : 정상
404 : URL 요청을 처리 불가
500 : 서버 에러 발생
https://developer.mozilla.org/ko/docs/Web/HTTP/Status
더 많은 HTTP 상태 코드는 위 공식 문서에 정리되어 있다.