티스토리 뷰

HTTP의 원리, 설명할 수 있나요?

HTTP는 웹 브라우저와 서버 간 통신 프로토콜입니다. 프로토콜이란 방식이자 약속입니다. 의사가 환자를 치료할 때에도 프로토콜이 있습니다. 환자가 머리가 찌릿찌릿하다고 하면 뇌 검사를 하고 관련한 약을 처방하고, 손발이 저리다고 하면 근전도 검사와 피검사를 하는 식으로, 환자의 증상과 상황에 따라 정해진 치료 플랜 하에 검사하고 치료를 하는 겁니다. IT 업계에서의 프로토콜도 마찬가지입니다. 웹 브라우저와 서버는 서로 메시지를 주고받으면서, 각자의 입장에서 메시지의 유형에 따라 정해진 동작을 수행합니다.

 

HTTP의 원리

 

HTTP란 무엇인가?

HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 서버 간의 통신 규약입니다. 즉, 프로토콜입니다. 웹 브라우저가 서버에 요청을 하면, 서버가 요청을 해석하고 필요한 작업을 수행합니다. 예를 들어, 로그인 페이지에서 사용자가 아이디와 비밀 번호를 입력하고 로그인 버튼을 눌렀다고 가정해 봅시다. 웹 브라우저는 입력된 아이디와 비밀번호를 서버에게 보내고, 서버는 등록된 사용자인지, 비밀번호가 일치하는지를 확인합니다. 이러한 과정은 웹 브라우저가 서버와 미리 약속한 형식으로 요청을 보냈기 때문에 가능합니다. HTTP라는 통신 규약은 일종의 공문서 서식이라고 생각하면 편합니다. 우리가 동사무소에 서류를 제출할 때에도 정해진 서식 내에서 내용을 작성하듯이, 웹 브라우저는 HTTP라는 서식 안에서 필요한 내용을 기입하고, 서버에 제출합니다.

 

클라이언트와 서버의 상호 작용

엄밀하게는 웹 브라우저와 웹 서버 간의 통신에만 쓰이는 게 아닙니다. 정보가 필요한 프로그램과 정보를 줄 수 있는 프로그램 간의 통신 방식의 일종입니다. IT 업계에서는 전자를 '클라이언트'라고 부르고, 후자를 '서버'라고 부릅니다. 고객과 점원으로 이해하면 편합니다. 고객이 주문을 하면 점원이 주문한 상품을 고객에게 전달하는 것입니다. HTTP 또한 동일한 방식으로 동작합니다. 항상 클라이언트인 웹 브라우저가 서버에게 요청을 먼저 합니다. 서버가 클라이언트에게 먼저 정보를 주는 일은 특별한 경우를 제외하고 없습니다. 

 

HTTP 요청과 응답

웹 브라우저가 서버에게 무엇을 원할까요? 웹 사이트에 접속할 때 이미지와 글들이 쭉 나타나고, 계정 정보를 입력하면 로그인이 되기도 하고, 내가 쓴 게시물을 삭제할 수도 있고, 수정할 수도 있습니다. 사용자가 웹 사이트에서 할 수 있는 행동의 유형은 네 가지입니다. 읽고, 만들고, 수정하고, 삭제하는 것입니다. HTTP에서는 이를 HTTP 메서드라고 합니다. HTTP는 앞에서 일종의 서식이라고 하였는데, 이 서식 안에 HTTP 메서드를 적는 칸이 있다고 이해하면 됩니다. 그 칸에 읽는다(GET), 만든다(POST), 수정한다(PUT), 삭제한다(DELETE)라고 적으면, 서버는 그 칸을 읽고 정보를 가져다주거나, 생성하거나, 수정하거나, 삭제합니다.

 

그런데 서버가 웹 브라우저의 요청을 항상 수행할 수 있는 것은 아닙니다. 티켓팅할 때 잘 느낄 수 있습니다. 잔여 좌석이 보여도 예약 버튼을 눌러보면 실패하는 경우가 많습니다. 이처럼 서버가 항상 성공하는 것은 아니기 때문에, 웹 브라우저는 서버가 요청을 성공적으로 수행했는지를 확인해야 합니다. 이를 서버가 알려줍니다. 웹 브라우저가 요청을 하고 나면, 서버의 응답을 기다립니다. 티켓팅할 때에도 예약 버튼을 누르면 로딩 화면이 뜨는데, 그게 바로 웹 브라우저가 서버의 응답을 기다리고 있는 겁니다. 응답은 성공과 실패 여부와 실패했다면 그 원인은 무엇인지를 담은 메시지로 구성됩니다. 웹 브라우저는 이를 읽고 사용자에게 결과를 알려줍니다. 예약이 성공했다면 결제 화면으로 넘어가는 것이고, 예약이 실패했다면 실패한 이유를 화면에 보여주는 것입니다.

 

상태 코드와 헤더

응답에는 성공인지 실패인지 여부와 실패했다면 그 이유가 들어 있다고 앞에서 말씀드렸습니다. 이것이 바로 상태 코드입니다. HTTP라는 서식에는 상태 코드를 적는 칸이 있는 겁니다. 상태 코드는 세 자리 숫자입니다. 성공은 보통 200번 대입니다. 웹 브라우저나 사용자 쪽에서 원인이 있다면 400번 대의 상태코드가 만들어집니다. 서버에 문제가 있어 요청을 수행하지 못했다면 500번 대의 상태코드가 만들어집니다. 웹 브라우저는 상태 코드가 몇 번대인지를 확인하여 성공과 실패 여부 및 원인을 파악할 수 있는 겁니다.

 

이렇게 숫자로 정보를 담는 일은 IT 업계에서는 흔한 일입니다. 숫자는 정확한 지칭이 가능하고, 컴퓨터가 이해하기 쉬우며(즉 처리 속도가 빠르며), 주고받는 메시지의 크기를 줄여 통신 속도 향상에 기여합니다.

 

HTTP의 발전과 보안

HTTP는 지속적으로 발전해 왔으며, 보안 측면에서도 중요한 변화를 겪어왔습니다. HTTPS(HTTP Secure)는 SSL 또는 TLS 프로토콜을 사용하여 데이터를 암호화하는 보안된 HTTP 버전입니다. 또한, HTTP/2와 HTTP/3 같은 새로운 버전도 등장하여 성능과 효율성을 향상했습니다. 요즘 웹 사이트에서는 HTTPS가 필수입니다. 그렇지 않으면 웹 브라우저가 안전하지 않은 사이트로 인식하고, 경고를 띄웁니다. 실제로 주고받는 데이터가 암호화되어 있지 않기 때문에 해킹의 위험도 큽니다. 마치 잠금 설정을 하지 않은 스마트폰과 같습니다.

 

 

결론

오늘은 HTTP의 원리에 대해서 꽤 깊게 다뤄봤습니다. 도움이 되었으면 좋겠습니다. HTTP는 일종의 서식이며, 웹 브라우저나 서버는 결국 기계이기 때문에 정해진 서식이 있어야 동작을 할 수 있습니다. 이 서식에는 사용자의 행위와 요청을 담은 여러 가지 칸이 존재하며, 서버는 이 칸을 읽고 동작합니다. 그렇기 때문에 이 서식을 해커에게 빼앗기는 것은 사용자의 개인 정보가 노출되는 일이며, 오늘날에는 HTTPS를 통해 서식을 암호화하고 있습니다.

 

댓글