중요 개념

이해 사용자 입력 지시: HTTP 이해하기: 웹 통신의 중추

10 분 읽기
Feb 18, 2025

HTTP (하이퍼텍스트 전송 프로토콜)는 월드 와이드 웹에서 데이터 통신의 기초입니다. OTT(Over-the-Top) 및 RTC(Real-Time Communication) 기술에서 중요한 구성 요소로서, 이 분야에서 일하는 개발자와 엔지니어에게 HTTP를 이해하는 것은 필수적입니다. 이 블로그 포스트에서는 HTTP의 복잡성, 구조 및 HLS(HTTP 라이브 스트리밍)와 같은 스트리밍 기술에서의 응용에 대해 깊이 있게 살펴보겠습니다.

HTTP란 무엇인가?

HTTP는 TCP 위에 구축된 애플리케이션 계층 프로토콜입니다. 이는 인터넷에서 가장 널리 사용되는 프로토콜로, 하이퍼텍스트 문서, 이미지, 비디오 및 기타 멀티미디어 콘텐츠의 전송을 용이하게 합니다. HTTPS(HTTP Secure)는 데이터 전송을 위한 SSL/TLS 암호화를 사용하는 HTTP의 보안 버전입니다.

HTTP URL 구조

HTTP 리소스는 URL(Uniform Resource Locators)을 사용하여 식별됩니다. 일반적인 HTTP URL은 다음과 같은 구조를 가집니다:

http://host[:port]/[path/]filename[?param1=value1&param2=value2][#fragment]
  • http://: HTTP 프로토콜을 사용함을 나타냅니다 (또는 https://는 HTTPS)
  • host: 서버의 도메인 이름 또는 IP 주소
  • port: 포트 번호 (HTTP의 기본값은 80, HTTPS의 경우 443)
  • path: 서버에서 리소스의 경로
  • filename: 리소스의 이름
  • param, value: 쿼리 매개변수
  • fragment: 리소스의 특정 부분, 종종 앵커라고 불립니다

HTTP 통신

HTTP 통신은 클라이언트(User Agents)의 요청과 서버(Origin Servers)의 응답으로 이루어집니다. 클라이언트와 서버 사이에는 프록시 서버, 게이트웨이 또는 터널과 같은 중개자가 존재할 수 있습니다.

HTTP 요청 구조

HTTP 요청은 세 부분으로 구성됩니다:

  1. 요청 라인
  2. 메시지 헤더
  3. 요청 본문

HTTP 요청 예:

POST /index.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2
Accept: text/html,application/xhtml+xml, application/xml; q=0.9,*/*; q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length: 26
Content-Type: application/x-www-form-urlencoded

username=abc&password=1234

HTTP 응답 구조

HTTP 응답도 세 부분으로 구성됩니다:

  1. 상태 라인
  2. 메시지 헤더
  3. 응답 본문

HTTP 응답 예:

HTTP/1.1 200 OK
Date: Sun, 17 Mar 2013 08:12:54 GMT
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: keep-alive
Content-Type: text/html; charset=utf-8

<html>
<head>
<title>HTTP 응답 예</title>
</head>
<body>
안녕하세요 HTTP!
</body>
</html>

HTTP 상태 코드

HTTP 상태 코드는 클라이언트의 요청에 대한 응답으로 서버가 반환하는 세 자리 숫자입니다. 이들은 다섯 가지 클래스에 그룹화됩니다:

상태 코드설명의미
1XX정보요청 수신, 프로세스 계속 진행
2XX성공작업이 성공적으로 수신, 이해 및 수락됨
3XX리다이렉션요청을 완료하기 위해 추가 작업 필요
4XX클라이언트 오류요청에 잘못된 구문이 포함되어 있거나 충족할 수 없음
5XX서버 오류서버가 유효한 요청을 충족하지 못함

다음은 몇 가지 일반적인 상태 코드입니다:

상태 코드텍스트설명
200OK요청 성공
206부분 콘텐츠부분 콘텐츠 제공됨
301영구 이동됨요청된 URL이 영구적으로 이동됨
302찾음임시 URL 리다이렉션
304수정되지 않음이전 요청 이후 리소스가 수정되지 않음
400잘못된 요청서버가 클라이언트 오류로 인해 처리할 수 없음
403금지됨서버가 요청을 승인할 수 없음
404찾을 수 없음요청된 리소스를 찾을 수 없음
500내부 서버 오류서버 실패 시 일반 오류 메시지
502잘못된 게이트웨이서버가 상위 서버로부터 잘못된 응답을 수신
503서비스 이용 불가서버가 요청을 처리할 수 없는 상태

자세한 정보는 다음을 참조하십시오

스트리밍에서의 HTTP: HLS(HTTP 라이브 스트리밍)

HLS는 Apple이 개발한 스트리밍 프로토콜로, 미디어 전달을 위해 HTTP를 사용합니다. 전체 스트림을 작은 HTTP 기반 파일 다운로드의 시퀀스로 나누어 작동합니다.

HLS 워크플로우

HTTP 스트리밍: HLS (HTTP 라이브 스트리밍) 워크플로우

1. 클라이언트가 m3u8 파일에 대한 HTTP GET 요청을 보냄.
2. 서버가 m3u8 파일로 응답함.

  1. 클라이언트는 먼저 마스터 플레이리스트 파일(M3U8)을 검색합니다.
  2. M3U8 파일에는 미디어 세그먼트 파일(TS 파일)의 URL이 포함됩니다.
  3. 클라이언트는 HTTP를 통해 이러한 TS 파일을 다운로드합니다.
  4. 실시간 스트리밍의 경우, 클라이언트는 새로운 TS 파일 URL을 얻기 위해 M3U8 파일을 지속적으로 업데이트합니다.

M3U8 파일 구조

M3U8 파일은 텍스트 기반이며 일련의 태그로 구성됩니다. 다음은 예시입니다:

#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:1
#EXTINF:10,
http://media.example.com/segment0.ts
#EXTINF:10,
http://media.example.com/segment1.ts
#EXTINF:10,
http://media.example.com/segment2.ts
#EXT-X-ENDLIST

다음은 일반적인 M3U8 태그의 표입니다:

태그의미
#EXTM3U모든 M3U8 파일의 첫 번째 줄이어야 함
#EXTINFTS 파일의 지속 시간을 지정함
#EXT-X-TARGETDURATION모든 TS 파일의 최대 지속 시간을 지정함
#EXT-X-MEDIA-SEQUENCE첫 번째 TS 파일의 시퀀스 번호를 지정함
#EXT-X-KEYTS 파일의 암호화 방법을 지정함
#EXT-X-PROGRAM-DATE-TIMETS 파일의 첫 번째 샘플의 날짜/시간을 지정함
#EXT-X-ALLOW-CACHE클라이언트가 다운로드한 미디어 파일을 캐시할 수 있는지 여부를 지정함
#EXT-X-PLAYLIST-TYPE플레이리스트 유형에 대한 정보를 제공함 (EVENT 또는 VOD)
#EXT-X-ENDLISTM3U8 파일의 끝을 나타냄

HTTP 동적 라이브 스트리밍(HDL)

HTTP 동적 라이브 스트리밍(HDL)은 Adobe가 개발한 스트리밍 미디어 프로토콜입니다. 이는 FLV(플래시 비디오) 파일의 온라인 전송을 위해 HTTP를 활용하며, 웹 기반 스트리밍에서 중요한 기술입니다.

HDL의 작동 원리는 HLS(HTTP 라이브 스트리밍)와 유사합니다. 두 프로토콜 모두 HTTP를 사용하여 관련 파일을 검색하고 그에 따라 오디오 및 비디오 스트림 데이터를 가져옵니다. 그러나 HLS는 M3U8 및 TS 파일을 사용하는 반면, HDL은 SWF(Shockwave Flash) 및 FLV 파일을 사용합니다. 이러한 파일 형식은 Adobe에 의해 설계되었으며 전통적으로 Flash 기술 지원이 필요했기 때문에 HTML5 환경에서의 직접 사용이 제한되었습니다. (MSE를 지원하는 브라우저에서는 flv.js와 같은 라이브러리를 사용하여 지원을 가능하게 할 수 있지만, 호환성 문제를 고려해야 합니다.)

SWF(Shockwave Flash)는 Macromedia(후에 Adobe에 인수됨)가 자사의 Flash 애니메이션 디자인 소프트웨어를 위해 개발한 독점 형식입니다. 이는 웹 디자인 및 애니메이션 제작에 널리 사용되었습니다. SWF 파일의 구조는 다음과 같습니다:

M3U8 파일 구조, 태그, 마스터 플레이리스트 파일, 미디어 세그먼트 파일, HTTP 동적 라이브 스트리밍, HDL, SWF, FLV, HTTP 라이브 스트리밍, ts 파일헤더 뒤에는 여러 개의 태그가 있는 데이터 블록이 있습니다. 태그 형식은 FLV 캡슐화와 일치합니다. 온라인 재생 중에는 일반적으로 하나의 SWF 파일만 검색하면 됩니다.

HDL 재생 과정은 다음 단계로 진행됩니다:

  1. HTTP를 통해 SWF 파일 검색
  2. SWF 파일을 사용하여 FLV 파일 획득
  3. FLV 파일 내용을 디캡슐화, 디코딩 및 표시
  4. FLV 파일 데이터의 연속 검색 및 처리, SWF 파일의 EndTag에 도달할 때까지 디코딩 및 표시

이 과정은 HDL이 초기 파일 검색뿐만 아니라 전체 스트리밍 과정에서도 HTTP를 활용한다는 것을 보여주며, 이는 프로토콜 기능의 중요한 부분입니다.

SWF 파일에 대한 자세한 정보는 Adobe 개발자 센터를 참조할 수 있습니다: http://www.adobe.com/devnet/swf.html

결론

HTTP는 웹 통신의 중추를 형성하며 HLS와 같은 현대 스트리밍 기술에서 중요한 역할을 합니다. 그 구조, 상태 코드 및 스트리밍 프로토콜에서의 응용을 이해하는 것은 OTT 및 RTC 분야에서 일하는 개발자에게 필수적입니다. 웹이 계속 발전함에 따라 HTTP는 기본 기술로 남아 있으며, 변화하는 디지털 커뮤니케이션 환경에서 새로운 요구 사항과 사용 사례에 적응하고 있습니다.