티스토리 뷰
목차
웹사이트의 주소를 본 적이 있다면 공통적으로 들어가는 단어를 볼 수 있습니다. 바로 http:// 또는 https:// 일 것입니다. 그럼 이 HTTP에 대해 알아보고 HTTPS와 어떤 부분이 다른지 알아보겠습니다.
1. HTTP는 무엇인가?
HTTP는 Hypertext Transfer Protocol의 준말이며, 웹의 기본 프로토콜입니다. 여기서 프로토콜이란 어떤 장치에서 다른 장치에 데이터를 전달하고 받기 위한 여러 규약을 말합니다. 그렇다면 HTTP는 서버와 웹 브라우저 사이에 데이터를 주고 받기 위한 여러 규약과 기술이라고 할 수 있습니다. 웹사이트를 이용하는 사람이 웹사이트를 방문할 때마다 웹 브라우저는 HTTP를 통해 서버에 데이터를 요청하고, HTTP를 통해 데이터를 요청받은 서버에서는 그 요청에 맞는 응답을 다시 웹 브라우저에 전달합니다.
그렇다면 이 웹의 기본 프로토콜인 HTTP가 언제 만들어지고 어떻게 발전했는지를 알아보겠습니다.
2. HTTP의 역사와 발전
HTTP는 1989년에 팀 버너스리가 월드 와이드 웹의 개념을 만들었습니다. 팀 버너스리는 앞서 다루었던 HTML을 정의한 사람과 동일 인물이며, 1991년 HTML을 최초 정의하기 전에 HTML을 연결하고 정보를 주고 받을 수 있는 방법으로 HTTP를 만들었습니다. 초기에는 단순히 문자 기반의 웹사이트를 이용자에게 정보만 전달하는 기능만 하였습니다. 즉, GET 요청만 되는 단순한 프로토콜이었습니다.
그 다음 1996년 발표된 HTTP1.0은 GET, POST, HEAD의 메서드를 지원했고, 이러한 메서드를 통해 오직 이용자에게 정보만 전달하는 것을 넘어 서로 정보를 교환할 수 있게 되었습니다. 이는 현재의 웹의 기초를 다질 수 있게 했습니다.
그리고 1997년에 HTTP1.1이 나왔습니다. 이 버전은 여러 개의 요청을 하나의 TCP 연결에서 처리할 수 있게 되었으며, 여러 개의 요청을 연속적으로 보낼 수 있어 성능 부분에서 크게 발전되었습니다. 이 버전은 지금까지 쭉 사용되어 오고 있으며, 거의 대부분의 웹사이트들이 HTTP1.1 버전을 기반으로 운영되고 있습니다.
이렇게 역사를 보면 비교적 가까운 과거에 웹 브라우저의 데이터 교환 규약이 생겨났고, 짧은 기간만에 발전하여 지금까지 사용하고 있다는 것을 알 수 있습니다. 그리고 현대에는 과거보다 더 빠른 속도로 새로운 기술들이 생겨나고 사라지고를 반복하는 것 같습니다.
3. HTTP의 기본 구조
이번에는 HTTP의 기본 구조가 어떤지에 알아보겠습니다. HTTP는 앞서 언급했듯이 웹브라우저와 서버 간의 정보 교환을 할 수 있다는 것을 알게 되었습니다. 이때 웹브라우저는 이용자의 화면을 말하며 서버는 웹사이트를 제작하여 모든 사람들이 볼 수 있도록 호스팅하는 컴퓨터라고 할 수 있습니다.
우리는 우리가 보고 싶은 웹사이트를 선택하여 클릭해서 들어가게 됩니다. 클릭해서 들어가는 순간 이 웹사이트에 대한 데이터를 요청하게 되고 서버에서는 이 요청을 전달받아 요청에 맞는 데이터를 응답하게 됩니다. 이처럼 HTTP의 기본 구조는 요청(Request)와 응답(Response)로 이루어진 것을 알 수 있습니다.
*요청(Request)의 구성 요소
1) 메서드(Method)
HTTP의 역사와 발전 파트에서 1996년 다양한 메서드를 지원하여 정보 교환이 가능해졌다는걸 알 수 있었습니다. 여기서 메서드는 웹사이트 이용자가 서버에서 수행하고자 하는 작업을 말합니다. 제일 많이 사용하는 메서드로는 GET의 요청과 POST의 생성, PUT의 수정, DELETE의 삭제가 있습니다.
2) URL(Uniform Resource Locator)
이 포스팅을 시작할 떄 궁금했던 웹사이트 주소는 왜 http://로 시작하는지 여기서 알 수 있습니다. URL은 Uniform Resource Locator로 웹사이트 이용자가 요청하는 자원의 위치라고 합니다. 즉, 웹사이트 주소에 http://로 시작하여 자원의 위치를 찾을 수 있게 하는 것입니다.
3) 헤더(Header)
헤더는 요청에 대한 추가 정보를 포함합니다. 보통 웹사이트 이용자의 브라우저의 종류나 인증 토큰, 전송될 데이터의 유형 등을 헤더를 통해 서버에 전달하여 그에 맞는 데이터를 전달받는 것입니다.
4) 바디(Body)
앞서 메서드에서 알아보았던 POST(생성)과 PUT(수정)가 주로 바디에서 사용되며, 서버로 전송할 데이터를 포함합니다. 바디는 서버로 전송할 데이터를 포함하는데, 만약 전송할 데이터가 없다면 요청의 바디는 생략될 수 있습니다.
이렇게 요청에 대한 부분을 정해둬야 모든 사람이 같은 방식으로 요청할 수 있을 것입니다. 모든 사람들이 자기만의 방식으로 요청을 한다면 기계인 서버는 이해하지 못하고 혼란만 야기될 뿐일 것입니다.
* 응답(Response)의 구성 요소
1) 상태 코드(Status Code)
웹사이트의 이용자가 서버에 요청을 보냈는데 이 요청이 성공을 했는지 아니면 어떠한 오류로 실패를 했는지를 나타내는 응답이 상태 코드입니다. 여기서 200은 요청을 성공한 것이고, 웹사이트를 보다보면 화면에 뜨는 404는 이용자가 요청한 데이터를 서버에서 찾지 못할 때 나타납니다.
2) 헤더(Header)
요청에도 헤더가 있었지만 응답에도 헤더가 있습니다. 응답에서의 헤더는 서버에 대한 정보와 응답 데이터에 대한 메타데이터를 포함합니다. 응답 데이터의 길이나 응답하는 콘텐츠의 유형, 서버의 이름 등이 헤더에 포함될 수 있습니다.
3) 바디(Body)
응답에서의 바디는 웹사이트 이용자가 요청한 실제의 데이터가 포함되어 있습니다. 여기서 웹사이트 이용자가 실제로 요청한 데이터는 이용자가 보고 싶은 웹사이트의 화면일 것입니다. 따라서 실제 데이터에는 웹사이트 뼈대인 HTML문서와 웹사이트에서 사용된 이미지 파일, JSON 데이터 등이 포함되어 있습니다.
4. HTTPS와 보안
HTTP는 웹사이트 이용자와 서버 간의 정보 교환이라는 것을 알 수 있었습니다. 이 정보에는 가벼운 내용이 있을 수도 있고 남들이 보면 안되는 개인정보나 국가 정보가 포함되어 있을 수도 있습니다. 그런데 HTTP는 기본적으로 데이터가 암호화가 되어 있지 않은 상태로 정보 교환이 일어나기 때문에 보안에 취약합니다.
그래서 1994년 넷스케이프 커뮤니케이션에서 HTTPS를 개발하였습니다. HTTPS(Hypertext Transfer Protocol Secure)은 SSL 프로토콜과 함께 사용되다 2000년에 TLS으로 발전되어 암호화 계층을 추가하면서 웹사이트 이용자와 서버 간의 통신이 암호화되었습니다.
개발은 1994년부터 되었던 HTTPS이지만 우리나라는 2017년 3월 기준으로 전체 웹사이트 중 3%정도 사용하고 있었습니다. 그러다 2019년 부적절한 내용의 웹사이트나 해외 사이트 접속을 막기 위해 널리 사용되도록 정부에서 HTTPS 사용을 실시하였습니다. 그래서 가끔 http://로 시작하는 웹사이트를 들어가면 보안 문제가 있다는 문구를 발견하실 수 있습니다.
이렇게 HTTPS를 사용하면 웹사이트 이용자와 서버 간에 정보를 교환 중 제3자가 데이터를 몰래 가져가더라도 해독할 수 없기 때문에 안전하게 정보가 교환될 수 있습니다. 그래서 현재 대부분의 웹사이트들은 HTTPS를 사용하여 개인정보나 금융 거래 등의 보안이 필요한 데이터를 처리할 수 있습니다.
예전에 HTTPS를 사용해야 한다는 뉴스나 블로그 글을 본 적이 있었습니다. 그때는 왜 사용해야 하는지 몰라 불편함까지 느낄 때도 있었습니다. 하지만 이렇게 HTTP에 대해서 알게 되어 왜 웹사이트 주소 시작이 http://인지도 이해하고 갑자기 HTTPS를 사용하게 된 이유와 사용해야 하는 이유를 알게 되었습니다.