HTTP
클라이언트와 서버는 서로 데이터를 주고받지만, 각자 다른 방식으로 메시지를 보낸다면 원활하게 통신할 수 없습니다. 예를 들어 클라이언트는 iOS나 Android 앱으로, 서버는 Linux 환경에서 Python이나 Java로 만들어질 수 있습니다.
이때 서로 사용하는 운영체제와 프로그래밍 언어가 달라도 두 개의 프로그램이 데이터를 주고받으려면, 클라이언트가 어떤 형식으로 요청을 보내고 서버는 어떤 형식으로 응답할지에 대한 공통된 규칙이 필요합니다.
HTTP란?
HTTP(HyperText Transfer Protocol)는 웹에서 클라이언트와 서버가 데이터를 주고받는 통신 규칙입니다. 클라이언트와 서버는 HTTP가 정한 형식에 맞춰 요청과 응답을 주고받으며, 이를 HTTP로 통신한다고 말합니다.
웹 브라우저와 HTTP
사실 지금도 우리는 HTTP를 사용하고 있습니다. 지금 보고 있는 이 페이지도 브라우저가 제 서버에 HTTP 요청을 보내고, 서버가 응답한 내용을 화면에 표시한 결과입니다. 지금 보고 있는 페이지의 주소를 복사해서 확인해 보세요. 주소가 https://ai.qu3vipon.com/...처럼 https://로 시작하는 것을 확인할 수 있습니다. 이는 브라우저가 서버와 HTTPS 방식으로 통신하고 있다는 뜻입니다.
HTTPS
HTTPS는 HTTP에 TLS라는 보안 프로토콜을 더한 방식입니다. 데이터를 암호화한다는 차이는 있지만, 요청과 응답을 주고받는 기본적인 방식은 HTTP와 같습니다. 따라서 앞으로 HTTP를 설명할 때는 같은 내용이 HTTPS에도 적용된다고 이해해도 좋습니다. 자세한 내용은 HTTPS에서 따로 다룹니다.
HTTP 요청하기
웹 브라우저에서 새로운 창을 열고 주소창에 http://example.com을 입력해 보세요. 잠시 뒤 간단한 웹 페이지가 표시됩니다. 우리는 주소를 입력했을 뿐이지만, 브라우저는 example.com 서버에 HTTP 요청을 보내고 응답으로 받은 내용을 화면에 표시합니다.

웹 브라우저는 사용자가 웹 서비스를 쉽게 이용할 수 있도록 웹 서버에 HTTP 요청을 보내고, 응답을 화면에 보여주는 클라이언트 프로그램입니다. 그렇기 때문에 우리는 그동안 HTTP라는 통신 규칙의 존재를 의식하지 않아도 웹 서비스를 사용할 수 있었습니다.
터미널에서 HTTP 요청하기
이번에는 터미널에서 같은 주소로 요청을 보내 봅시다. curl은 터미널에서 서버에 HTTP 요청을 보내고 응답을 받는 클라이언트 프로그램입니다.
curl example.com
curl.exe example.com

명령어를 실행해 보면 터미널에 처음 보는 긴 텍스트가 출력됩니다. 사실 이 텍스트는 아까 브라우저로 봤던 내용과 같습니다. 자세히 보면 중간에 Example Domain이라는 글씨도 보입니다. 이것이 서버가 응답으로 보낸 웹 페이지의 원본입니다. 이 텍스트가 무엇을 뜻하는지는 뒤에서 자세히 살펴봅니다.
실습 과제
다음 문장이 맞으면 O, 틀리면 X를 선택하세요.
- 프로그래밍 언어와 운영체제가 다른 프로그램끼리는 데이터를 주고받을 수 없다.
- HTTPS는 HTTP와 다른 방식으로 동작하므로, HTTP의 요청·응답 방식은 적용되지 않는다.
- 웹 브라우저와
curl은 모두 서버에 HTTP 요청을 보낼 수 있다.
정답·해설
- X — HTTP처럼 공통된 통신 규칙을 사용하면, 서로 다른 프로그래밍 언어와 운영체제로 만들어진 프로그램도 데이터를 주고받을 수 있습니다.
- X — HTTPS는 HTTP에 TLS 보안 기능을 더한 방식입니다. 요청·응답을 주고받는 기본적인 방식은 HTTP와 같습니다.
- O — 웹 브라우저와
curl은 모두 서버에 HTTP 요청을 보내고 응답을 받는 클라이언트 프로그램입니다.