HTTP의 요청(Request)과 응답(Response)
웹(Web)은 HTTP를 기반으로 하기 때문에 HTTP에 대해 이야기를 시작했다.
이에 대한 큰 틀에서의 이야기는 다음의 포스팅을 참고해 주기 바란다.
HTTP(HyperText Transfer Protocol)란 무엇인가?
HTTP (HyperText Transfer Protocol) HTTP는 HyperText Transfer Protocol의 줄임말이다. 직역을 한번 해볼까요? ㅎㅎ '하이퍼텍스트(Hyptertext)를 교환하기 위한 프로토콜(규약=약속)' 정도로 해석이 되려나... ㅎㅎ H
wishlan.tistory.com
HTTP는 클라이언트가 서버로 요청을 하고, 서버는 들어온 요청에 대해 응답을 한다고 했다.
- 요청(Request)이라는 것은 클라이언트(예:브라우저)에 의해 서버로 전송되는 메시지를 말한다.
- 응답(Response)은 요청에 대해 서버에서 응답으로 클라이언트에게 전송되는 메시지를 말한다.
이러한 통신과 같은 프로토콜을 클라이언트-서버 프로토콜이라고 이야기하기도 한다.
이는 클라이언트의 요청이 시작점이다. 클라이언트의 요청이 있어야 서버는 응답을 한다.
클라이언트는 브라우저를 예를 들었지만 무엇이든 될 수 있다.
요청은 우리가 브라우저에 접속할 주소를 입력하고 엔터를 치는 순간 서버로 요청이 들어가는 것이다.
웹 페이지에서 링크를 클릭하는 것도 클릭해 접속하는 것이 요청하는 것이다.
서버는 이 요청에 대해 어떤 식으로든 응답을 한다. 물론 응답이 없을 수도 있다.
📨 프로토콜(Protocol) 이란?
여기서 프로토콜(규약=약속)이라는 것은 요청을 할 때 어떻게 요청해야 하는지를 정해 놓은 것이다.
반대로 서버가 클라이언트에 응답을 보낼 때도 어떻게 응답해야 하는지를 정해 놓은 것이다.
가령, 우리가 일상생활에서 편지(메시지)를 보낼 때 규격 봉투라는 것이 있다.
우정사업본부에서 우편물 규격에 대해 안내하고 있는데, 일반 봉투 규격은 다음과 같다고 한다.
보내는 사람, 받는 사람, 우편번호, 우표 등의 항목들을 정해 두고 봉투 사이즈와 작성해야 할 항목들 위치까지 정해 두었다. 편지를 보낼 때는 봉투에 이와 같은 형식으로 작성을 해야 제대로 배달이 된다.
그리고 이 봉투 속에 전하고 싶은 메시지(편지지)를 넣어서 보내게 된다.
HTTP도 규격 봉투와 마찬가지다.
요청을 할 때나 응답을 보낼 때 어떤 항목들을 어떤 순서로 보내야 한다고 정해 둔다.
이것이 프로토콜이고 그 프로토콜의 공식 표준 문서가 RFC(Request for Commnets)이다.
RFC는 국제 인터넷 표준화 기구인 IETF(Internet Enmgineering Task Force)에서 제공하고 관리하는 문서이다.
대부분의 인터넷 표준은 항상 RFC로 문서화되어 있다고 생각하면 된다.
이전 포스팅에서도 언급을 했지만, 다음이 HTTP에 대한 RFC 문서들이다.
- RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0
- RFC 2616 - Hypertext Transfer Protocol -- HTTP/1.1
- RFC 7540 - Hypertext Transfer Protocol Version 2 (HTTP/2)
- RFC 9116 - HTTP/3
HTTP에 대한 표준이 계속 업그레이드되고 있기 때문에 RFC 문서도 그 버전에 따라 구분된다.
지금부터 이야기하는 HTTP는 HTTP/1.1을 기준으로 한다.
그 이유는 HTTP에서 가장 근간이 되는 표준이기 때문이다.
요청을 할 때와 응답을 할 때 규격 봉투와 같은 HTTP 메시지 형식은 다음과 같이 정의하고 있다.
역시... 모르는 사람들이 보면 이해하기 어렵다. ㅠ.ㅠ
조금 풀어서 도식화해 정리해 보면 다음과 같다고 할 수 있다.
요청(Request)
앞서 본 요청/응답 메시지의 규격을 하나하나 뜯어보고 설명하면 이 포스팅은 웹 개발 이야기가 아니라 HTTP 강좌가 되어 버리니 대략적으로 조금만 더 이야기하고 넘어가고자 한다.
요청(Request) 메시지에 대해 간단히 살펴보자.
Request Line
우리말로 하면 '요청 행'이라고 할 수 있는데, 이 Request Line에도 어떤 항목을 어떻게 포함하라는 정의가 되어 있다. '포함해야 하는 항목은 메서드(Method), 요청 URI, HTTP 버전의 세 가지이고 각각은 스페이스바로 띄워서 구분해야 하고 마지막엔 줄바꿈 문자(CRLF)가 들어가야 한다.' 등의 내용이 RFC에 모두 명시되어 있다.
Request Line에 들어가야 할 메시지 형태와 항목을 도식화해보면 다음과 같다.
- Method (요청 메서드) : GET, POST, PUT, HEAD 등이 있다.
- Request-URI (요청 URI) : 보통 경로(/) 이후 상대 URI(절대 경로가 아님)를 주속, 이를 텍스트 문자열로 표기한다.
- HTTP-Version : HTTP/1.1, HTTP/2 등의 HTTP 버전을 말한다.
- SP : 스페이스바와 같은 공백 문자
- CR : Carriage Return (\r), 현재 커서를 줄 올림 없이 가장 앞으로 옮기는 동작
- LF : Line Feed (\n), 커서는 그 자리에 그대로 둔 상황에서 줄만 바꾸는 동작
이 정도만 살펴봐도 알아야 할 내용이 기하급수적으로 늘어나는 것을 알 수 있다.
일반적으로 웹을 이용하는 사람들은 이러한걸 몰라도 된다.
하지만 웹 개발을 하려고 하면 요청(Request)이 어떤 방식으로 어떤 규약으로 이뤄지 알아야 한다.
가령, 요청 메서드에 GET, POST 등이 있는데 각각이 무엇을 의미하는지 웹 개발자라면 알아야 한다.
Request-URI라고 하지만, URI가 무엇이고 경로의 개념과 절대 경로, 상대 경로 등의 용어에 대한 이해도 필요하다. 그리고 코딩에서 한 번씩 가장 애를 먹는 문자가 SP와 CR, LF인데 이에 대한 정의도 잘 이해해야 한다.
실제로 실무에서 HTTP 통신을 해야 하는 클라이언트를 코딩해야 하는 경우는 흔하다.
아마 HTTP를 가장 많이 사용하는 개발자가 웹 개발자라고 해도 과언이 아닐 것이다.
그래서 웹 개발자라면 HTTP에 대해 잘 알고 있어야 하는데 실상은 그렇지 않은 웹 개발자들이 내 주변에도 많다.
프런트엔드든 백엔드든 필수로 알고 있어야 한다고 생각한다.
신입 웹 개발자 기술 면접에서 가장 많이 물어보는 질문이
'HTTP 응답 코드 아는 대로 얘기해 보세요.'인데 만족할 수준으로 답하는 지원자는 드물었다.
실제 코딩으로 본 HTTP 요청
jQuery라는 Javascript(자바스크립트) 라이브러리에서 제공되는 ajax 메서드를 이용해 프런트엔드에서 HTTP 요청에 대한 코드를 예로 한번 보자.
#jQuery를 사용하려면 다음의 라이브러리를 포함해야한다.
<script src='https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js'></script>
#jQueyr의 ajax 메소드를 이용한 http 요청 코드
<script>
$(document).ready(function() {
const Url = '호출할 http URL'; #여기 URL을 작성
$('#btn1').click(function() {
$.ajax({
url: Url, //요청 URI가 된다.
type: "GET", //요청 메소드를 GET으로 한다는 의미
success: function(result) {
console.log(result)
},
error:function(error) {
console.log(`Error : ${error}`)
}
})
})
})
</script>
위 코드가 HTTP로 서버에 요청을 하고 응답을 받는 자바스크립트(Javascript) 언어로 작성된 것이다.
코딩을 전혀 모르는 사람은 이해가 안 될 것이라 생각된다. 괜찮다 몰라도 된다.
코드에 대한 설명을 하려고 예를 든 것이 아니다.
내가 이야기하고자 하는 것은 위 코드에서 HTTP 응답 코드라든지, HTTP에 대한 개념을 이해하지 못해도 위 코드는 사용할 수 있고, 조금만 공부하면 쉽게 원하는 결과를 얻을 수 있을 것이다.
하지만, 이 코드로 문제가 생긴다면 어디서 어떻게 접근해야 하는지 막막해질 경우가 분명히 있을 것이다.
요청 메서드(Method)의 경우만 보더라도, 요청을 할 때 GET 방식으로 하는 게 나은 것인지, POST로 하는 게 나은 것인지 둘의 차이를 이해하지 못하면 알 수 없을 것이다. 웹 개발은 GET과 POST도 잘 구분해서 사용해야 한다는 것을 알아야 한다.
끝으로 HTTP의 동작 방식에 대해 큰 틀에서나마 이해했으면 한다고 이야기하고 싶다.
여기서 그 동작 방식을 자세히 설명하진 않으려 한다.
왜냐면 그러면 이 포스팅은 HTTP 강좌가 되어 버리기 때문이니 기회가 된다면 다른 포스팅으로 하는 것이 나을 것 같다.
내가 웹 개발 이야기에서 계속해서 하고 싶은 이야기는 어떤 개발을 하든지 코딩을 하기 위해서는 프로그래밍 언어 이외에 알아야 할 배경지식이 매우 다양하다는 것을 알기 바라며, 용어 하나하나를 그냥 넘기지 말고 잘 이해해서 자신의 것으로 만들어 가는 과정을 소홀히 하면 안 된다는 것이다.
다음에는 HTTPS에 대해 추가로 조금 알아보자.
HTTPS란 무엇인가?
웹사이트를 사용할 때 주소창에서 "http://" 또는 "https://"로 시작하는 것을 본 적이 있을 것이다. 아니 요즘은 거의 모든 웹사이트 주소가 https://로 시작한다. HTTPS는 우리가 인터넷을 더 안전하게
wishlan.tistory.com
상기 상품 배너는 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
'코딩해보니 > 웹(Web)개발' 카테고리의 다른 글
인터넷과 웹의 동작 방식 (인터넷은 어떻게 구성되고 웹은 어떻게 동작하는가?) (1) | 2024.11.22 |
---|---|
HTTPS란 무엇인가? (1) | 2024.11.21 |
HTTP(HyperText Transfer Protocol)란 무엇인가? (2) | 2024.11.19 |
인터넷(Internet)과 웹(Web) (4) | 2024.11.18 |
웹 개발자를 준비하면서 가장 먼저 해야 하는 것은? (1) | 2024.11.17 |
댓글