고해상도 영화, 소프트웨어 업데이트 또는 데이터셋과 같은 대용량 파일을 다운로드하고 있습니다. 인터넷 연결이 잠시 끊기면서 다운로드가 실패합니다. 예전에는 좌절감에 한숨을 쉬고 처음부터 전체 다운로드를 다시 시작하여 모든 진행 상황을 잃었을 것입니다.
하지만 오늘날에는 "다시 시작"을 클릭하면 마법 같은 일이 일어납니다. 다운로드가 중단된 지점부터 다시 시작됩니다. 시간 낭비도, 대역폭 낭비도 없습니다.
이러한 현대 네트워킹의 기적은 HTTP의 가장 강력하면서도 저평가된 상태 코드 중 하나인 206 Partial Content
덕분에 가능합니다.
이 상태 코드는 200 OK
또는 404 Not Found
만큼 흔히 논의되지는 않지만, 현대 웹 성능과 사용자 경험에 매우 중요한 역할을 합니다. 사실, 이것이 없었다면 즐겨 사용하는 스트리밍 서비스, 소프트웨어 다운로드, 대용량 파일 API는 매우 비효율적이라고 느껴졌을 것입니다.
이 코드는 다시 시작 가능한 다운로드, 효율적인 비디오 스트리밍, 빠르고 병렬화된 파일 전송의 기반입니다. 이는 프로토콜이 대용량 리소스를 관리 가능한 청크로 분할하여 클라이언트가 필요한 것을 정확히 요청할 수 있도록 하는 방식입니다. 더도 덜도 아닙니다.
넷플릭스가 영화를 즉시 재생하거나 크롬이 파일을 효율적으로 다운로드하는 방식에 대해 궁금해한 적이 있다면, 206
이 그 해답의 핵심 부분입니다.
이 블로그 게시물에서는 206 상태 코드를 살펴보고, 작동 방식, 실제 사용 사례를 공유하며, 이를 다루는 모범 사례에 대해 논의할 것입니다. API 테스트 및 문서화를 강화하고 싶다면, Apidog를 무료로 다운로드하는 것을 잊지 마세요. Apidog는 206 Partial Content와 같은 응답을 테스트하고 이해하는 데 도움이 되는 강력한 도구로, API 관리를 더 원활하고 투명하게 만듭니다.
이제 HTTP 206 Partial Content가 대규모 다운로드를 효율적이고 현대적인 경험으로 바꾸는 방법과 API, 다운로드 및 애플리케이션에서 이를 효과적으로 사용하는 방법을 살펴보겠습니다.
문제: 단일체 다운로드
206
이 왜 그렇게 중요한지 이해하려면, 먼저 이 코드가 해결하는 문제를 알아야 합니다.
파일을 다운로드하는 전통적이고 단순한 방식은 간단한 GET
요청과 200 OK
응답을 사용합니다.
- 클라이언트:
GET /big-video.mp4
- 서버:
200 OK
+ 전체 2GB 비디오 파일 - 클라이언트: 전체 파일이 다운로드될 때까지 기다린 후 사용할 수 있습니다.
이 접근 방식에는 몇 가지 치명적인 결함이 있습니다.
- 복원력 없음: 네트워크 중단은 전체 다운로드를 중단시킵니다.
- 효율성 없음: 파일의 절반을 이미 가지고 있어도 나머지 절반만 요청할 방법이 없습니다.
- 진행 상황 없음: 전송이 100% 완료될 때까지 클라이언트는 파일의 일부에 쉽게 접근할 수 없습니다.
- 대역폭 낭비: 사용자가 다운로드를 90% 진행하다 취소하면, 이미 전송된 데이터의 90%는 종종 낭비됩니다.
특정 HTTP 헤더 세트와 함께 사용되는 206 Partial Content
상태 코드는 범위 요청(range requests)을 가능하게 하여 이 모든 문제를 해결합니다.
HTTP 206 Partial Content는 실제로 무엇을 의미할까요?
206 Partial Content 상태 코드는 2xx 성공 범주에 속합니다. 그러나 완전한 성공 응답을 나타내는 200 OK
와 달리, 206은 특별히 다음을 의미합니다.
서버가 요청된 리소스의 일부만 성공적으로 반환하고 있습니다.
이는 클라이언트(브라우저, 미디어 플레이어 또는 다운로더 등)가 Range
헤더를 사용하여 부분 요청을 할 때 발생합니다.
예를 들어, 100MB 비디오 파일이 서버에 호스팅되어 있다면, 클라이언트는 즉시 재생을 시작하기 위해 처음 10MB만 요청할 수 있습니다. 서버는 206 Partial Content
로 응답하고 요청된 내용을 정확히 전달합니다.
간단히 말해, 서버가 "알겠습니다, 전체를 원하지 않으셨군요. 요청하신 부분만 여기 있습니다."라고 말하는 것입니다.
일반적인 206
응답은 다음과 같습니다.
HTTP/1.1 206 Partial ContentContent-Type: video/mp4Content-Range: bytes 1000-1999/5000Content-Length: 1000
[...1000 bytes of video data...]
중요한 새 헤더를 분석해 봅시다.
Content-Range: bytes 1000-1999/5000
: 이것이206
응답의 핵심입니다. 클라이언트에게 다음을 알려줍니다.bytes
: 사용되는 단위 (바이트가 가장 일반적입니다).1000-1999
: 이 특정 응답에서 전송되는 바이트 범위입니다.5000
: 전체 리소스의 총 크기입니다. 이는 클라이언트에게 매우 유용한 정보입니다.
간단히 말해, HTTP 206 Partial Content 상태 코드는 서버가 전체 리소스가 아닌 리소스의 일부만 요청하는 클라이언트의 요청을 성공적으로 이행하고 있음을 나타냅니다. 이는 전체 콘텐츠를 반환하는 더 익숙한 200 OK 상태 코드와 다릅니다.
이러한 부분 전달은 대용량 파일, 스트리밍 미디어 또는 중단된 다운로드를 처음부터 다시 시작하지 않고 재개하려는 요청을 처리할 때 필수적입니다.
부분 콘텐츠가 왜 필요할까요?
솔직히 말해서, 모든 클라이언트가 한 번에 전체 파일을 필요로 하는 것은 아닙니다. 부분 요청이 없다면 스트리밍, 다운로드 또는 중단된 전송 재개는 훨씬 덜 효율적일 것입니다.
206
이 필요한 이유는 다음과 같습니다.
- 스트리밍 효율성: 넷플릭스, 유튜브, 스포티파이는 부분 콘텐츠를 사용하여 원활한 재생을 위해 필요한 만큼의 미디어 청크만 로드합니다.
- 다시 시작 가능한 다운로드: 5GB 파일의 90% 지점에서 인터넷 연결이 끊기면 처음부터 다시 시작하고 싶지 않을 것입니다. 206을 사용하면 다운로더가 중단된 지점부터 다시 시작할 수 있습니다.
- 대역폭 최적화: 클라이언트는 불필요하게 전체 리소스를 가져오는 대신 리소스의 더 작은 부분을 요청할 수 있습니다.
요컨대, 206은 현대 웹을 빠르고 효율적이며 사용자 친화적으로 만듭니다.
206 Partial Content가 왜 중요할까요?
206 상태 코드는 다음을 가능하게 하므로 강력합니다.
- 다운로드 재개: 다운로드가 중단된 경우, 클라이언트는 처음부터 다시 시작하지 않고 누락된 부분만 요청할 수 있습니다.
- 효율적인 스트리밍: 클라이언트는 전체 파일을 미리 로드하는 대신 작은 청크로 미디어를 버퍼링할 수 있습니다.
- 대역폭 절약: 서버는 클라이언트가 필요한 것만 전송하여 불필요한 데이터 전송을 줄일 수 있습니다.
- 향상된 사용자 경험: 비디오, PDF 또는 소프트웨어 업데이트와 같은 대용량 콘텐츠를 빠르고 반응적으로 로드합니다.
206 Partial Content가 없다면 사용자들은 더 느리고 취약한 다운로드 및 스트리밍 경험에 직면할 것입니다.
206 Partial Content의 주요 사용 사례
206이 빛을 발하는 곳은 다음과 같습니다.
- 비디오 및 오디오 스트리밍 (넷플릭스, 유튜브, 스포티파이).
- 다시 시작 가능한 파일 다운로드 (예: 크롬의 다운로드 관리자).
- 대용량 API 응답 (페이지네이션 또는 청크 파일 다운로드).
- 콘텐츠 미리보기 (파일의 첫 부분만 가져오기).
206 Partial Content는 어떻게 작동할까요?
206 Partial Content가 어떻게 작동하는지 이해하려면 HTTP Range 헤더에 대해 알아야 합니다. 클라이언트가 리소스의 특정 세그먼트 또는 범위만 요청하려면, 원하는 바이트를 지정하는 Range 헤더와 함께 HTTP 요청을 보냅니다.
예를 들어:
textRange: bytes=0-999
이는 "리소스의 첫 1000바이트를 주세요."라는 의미입니다.
서버가 이 기능을 지원한다면, 206 Partial Content 상태 코드와 함께 어떤 바이트가 반환되는지를 지정하는 Content-Range 헤더로 응답합니다.
textContent-Range: bytes 0-999/5000
이는 클라이언트에게 서버가 총 5000바이트 중 0에서 999바이트를 전달하고 있음을 알려줍니다.
마법의 열쇠: Range
헤더
206
응답은 저절로 발생하지 않습니다. 이는 항상 Range
헤더를 포함하는 클라이언트 요청에 대한 응답입니다.
클라이언트는 Range
헤더를 사용하여 파일의 어떤 부분(들)을 원하는지 지정합니다.
예시 1: 특정 청크 요청하기
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=1000-1999
이 요청은 "파일의 1000바이트부터 1999바이트(포함)까지만 보내주세요."라고 말합니다.
예시 2: 다운로드 재개 ("다시 시작" 버튼)
5000바이트 다운로드가 2000바이트를 받은 후 실패했다고 가정해 봅시다. 클라이언트는 나머지를 요청하여 재개할 수 있습니다.
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=2000-
이 요청은 "파일의 2000바이트부터 끝까지 모두 보내주세요."라고 말합니다.
예시 3: 파일의 끝 부분 가져오기
일부 파일 형식(MP4 등)은 끝에 메타데이터를 가지고 있습니다. 비디오 플레이어는 비디오의 길이와 코덱을 결정하기 위해 먼저 끝 부분을 요청할 수 있습니다.
GET /big-video.mp4 HTTP/1.1Host: example.comRange: bytes=-500
이 요청은 "파일의 마지막 500바이트를 보내주세요."라고 말합니다.
이것이 현대적 기능을 가능하게 하는 방법
1. 다시 시작 가능한 다운로드
이것은 가장 간단한 응용 프로그램입니다. 클라이언트는 성공적으로 받은 바이트 수를 추적합니다. 연결이 끊어지면, Range: bytes=<received_so_far>-
와 함께 새 요청을 보내 중단된 지점부터 원활하게 다시 시작합니다.
2. 비디오 및 오디오 스트리밍
여기가 206
이 진정으로 빛을 발하는 부분입니다. 비디오를 재생할 때:
- 플레이어는 전체 파일이 다운로드될 때까지 기다리지 않습니다.
- 즉시 비디오의 처음 몇 초를 요청합니다 (
Range: bytes=0-1000000
). - 시청하는 동안 백그라운드에서 연속적으로 다음 청크를 요청합니다.
- 비디오 중간으로 건너뛰면 플레이어는 해당 바이트 범위를 계산하여 직접 요청합니다 (
Range: bytes=25000000-26000000
). 이것이 유튜브 비디오의 끝으로 거의 즉시 이동할 수 있는 이유입니다. 전체 파일이 로드될 때까지 기다리는 것이 아니라 요청한 특정 청크만 기다리는 것입니다.
3. 병렬 다운로드 (다중 스레드 다운로드)
다운로드 관리자와 최신 브라우저는 이를 사용하여 다운로드 속도를 높입니다. 동일한 파일에 여러 연결을 열고 동시에 다른 범위를 요청합니다.
연결 1: Range: bytes=0-999999
연결 2: Range: bytes=1000000-1999999
연결 3: Range: bytes=2000000-2999999
연결 4: Range: bytes=3000000-
모든 청크가 다운로드되면 클라이언트는 이를 다시 조립하여 완전한 파일을 만듭니다. 이는 총 다운로드 시간을 크게 줄일 수 있습니다.
서버의 역할: 지원 및 헤더
이것이 작동하려면 서버가 범위 요청을 지원한다고 알려야 합니다. 이는 일반 GET
요청에 대한 응답에 Accept-Ranges
헤더를 포함함으로써 이루어집니다.
HTTP/1.1 200 OKAccept-Ranges: bytesContent-Length: 5000
...
이는 클라이언트에게 "저는 Range
헤더를 이해하며, 이 파일의 일부를 바이트 단위로 제공할 수 있습니다."라고 알려줍니다.
서버가 범위를 지원하지 않으면 Range
헤더를 단순히 무시하고 200 OK
상태로 전체 파일을 반환합니다.
206 Partial Content 구현 및 테스트 방법
개발자에게 부분 콘텐츠 전달을 활성화한다는 것은 서버가 Range 헤더를 지원하고 이를 올바르게 처리하는지 확인하는 것을 의미합니다. Apache, Nginx, IIS와 같은 대부분의 최신 웹 서버는 기본적으로 이를 지원합니다.
API 또는 콘텐츠 전달 시스템을 구축하는 경우 다음을 수행해야 합니다.
- 들어오는 요청의 Range 헤더를 검증합니다.
- 유효한 범위에 대해 206 Partial Content로 응답합니다.
- 응답에 Content-Range 헤더를 포함합니다.
- 유효하지 않거나 충족할 수 없는 범위는 416 Range Not Satisfiable로 처리합니다.
- 적절한 Content-Type 및 Content-Length 헤더를 보냅니다.
API 또는 서버의 206 응답 처리를 테스트하려면 Apidog가 훌륭한 도구입니다. Range 헤더를 사용하여 요청을 시뮬레이션하고 서버가 어떻게 응답하는지 검사하여 부분 콘텐츠 요청이 예상대로 작동하는지 확인할 수 있습니다. 지금 Apidog를 무료로 다운로드하여 시작하세요!
클라이언트는 206 응답을 어떻게 처리해야 할까요?
206 Partial Content 응답을 받을 때 클라이언트는 다음을 수행해야 합니다.
- Content-Range 헤더를 파싱하여 데이터의 어떤 부분이 전달되는지 이해합니다.
- 부분 콘텐츠를 이전에 받은 청크와 연결하여 전체 리소스를 재구성합니다.
- 겹치거나 누락된 범위와 같은 예외 상황을 우아하게 처리합니다.
- 청크 크기 및 콘텐츠 경계에 대한 서버 지침을 준수합니다.
좋은 클라이언트 구현은 다운로드 견고성과 스트리밍 품질을 향상시킵니다.
브라우저가 206을 처리하는 방법
최신 브라우저는:
- 미디어 요소(
<video>
,<audio>
)에 대해 Range 헤더를 자동으로 보냅니다. - 다시 시작 가능한 다운로드를 지원합니다.
- 응답을 처리할 때
Content-Range
헤더를 존중합니다.
이것이 유튜브 비디오를 탐색하거나 실패한 다운로드를 문제없이 재개할 수 있는 이유입니다.
실제 사례: 비디오 스트리밍
온라인 비디오를 시청하고 있다고 상상해 보세요. 플레이어는 전체 파일을 한 번에 다운로드하지 않고, 대신 청크 단위로 부분을 요청합니다. 각 청크 요청에는 원하는 바이트 범위를 지정하는 Range 헤더가 포함됩니다. 서버는 206 Partial Content와 해당 세그먼트로 응답합니다.
비디오의 다른 지점을 탐색할 때마다 새로운 Range 요청이 다른 바이트 세그먼트를 가져옵니다. 이러한 상호 작용은 긴 버퍼링 시간 없이 부드럽고 연속적인 비디오 재생을 가능하게 합니다.
Apidog로 범위 요청 테스트하기

206
응답을 수동으로 테스트하는 것은 까다로울 수 있습니다. 특정 Range
헤더를 사용하여 요청을 작성하고 결과 Content-Range
헤더를 해석해야 합니다. 바로 이 지점에서 Apidog가 필수적인 도구가 됩니다.
Apidog를 사용하면 다음을 수행할 수 있습니다.
- 정확한 요청 작성: 테스트하려는 정확한 바이트 범위로 모든
GET
요청에Range
헤더를 쉽게 추가할 수 있습니다. - 응답 검사: Apidog는
206 Partial Content
상태,Content-Range
헤더, 그리고 응답의 실제 (종종 이진) 콘텐츠를 명확하게 보여줍니다. 응답 본문의 길이가 요청한 범위와 일치하는지 확인할 수 있습니다. - 서버 지원 테스트: 일반
GET
요청을 보내고 응답에서Accept-Ranges
헤더를 확인하여 서버가 이 기능을 지원하는지 확인할 수 있습니다. - 다운로드 재개 시뮬레이션: 두 번째 요청이
Range
헤더를 사용하여 재개된 다운로드를 시뮬레이션하는 일련의 요청을 생성합니다.
이러한 수준의 제어 및 가시성은 대용량 파일 전송을 다루는 애플리케이션을 개발하는 개발자에게 매우 중요합니다. Swagger나 Postman과 달리 Apidog는 단순히 요청과 응답에 관한 것이 아니라 워크플로우를 설계하고 문서화하는 것입니다. 206의 경우, 이는 엄청난 차이를 만듭니다.
206을 올바르게 사용하는 이점
- UX 개선: 사용자는 전체 다운로드를 기다릴 필요가 없습니다.
- 대역폭 절약: 필요한 부분만 전송됩니다.
- 다시 시작 가능한 세션 지원: 처음부터 다시 시작할 필요가 없습니다.
- 성능 최적화: 대용량 리소스에 완벽합니다.
잠재적 함정과 모범 사례
- 서버 지원이 핵심: 범위 요청을 시도하기 전에 항상
Accept-Ranges
헤더를 확인하십시오. 클라이언트는 범위 요청이 지원되지 않는 경우 전체200
다운로드로 폴백할 수 있어야 합니다. - 범위 단위:
bytes
가 널리 사용되고 지원되는 유일한 단위이지만, 사양은 다른 단위(예: 프린터의pages
)를 허용합니다. 실제로는 거의 전적으로 바이트를 다루게 될 것입니다. - 다중 범위: 사양은 클라이언트가 단일 요청에서 여러 개의 비연속적인 범위(예:
Range: bytes=0-99, 500-599
)를 요청할 수 있도록 허용합니다. 그러면 서버는multipart/byteranges
콘텐츠 유형으로 응답할 것입니다. 그러나 이는 복잡하며 실제로는 거의 사용되지 않습니다. 일반적으로 여러 요청을 하는 것이 더 효율적입니다. - 유효하지 않은 범위: 클라이언트가 충족할 수 없는 범위(예: 5000바이트 파일에 대해
Range: bytes=10000-
)를 요청하면, 서버는416 Range Not Satisfiable
상태 코드로 응답하고 유효한 범위를 클라이언트에게 알리기 위해Content-Range: bytes */5000
헤더를 포함해야 합니다.
206 비교: 204, 205, 304
- 204 No Content → 성공, 하지만 본문 없음.
- 205 Reset Content → 성공, 하지만 UI를 재설정합니다.
- 206 Partial Content → 성공, 하지만 본문의 일부만 반환됩니다.
- 304 Not Modified → 새 데이터 없음, 캐시된 버전 사용.
각 코드는 그 자체의 위치가 있지만, 206은 부분 전달에 관한 모든 것입니다.
206 Partial Content가 RESTful API에 미치는 영향
RESTful API 설계에서 206은 대용량 리소스 다운로드 또는 청크 단위 데이터 내보내기를 처리하는 데 유용할 수 있습니다. 예를 들어, 대용량 CSV 또는 JSON 파일을 전달하는 API 엔드포인트는 Range 요청을 받아 클라이언트가 데이터를 조각별로 가져올 수 있도록 할 수 있습니다.
결론: 206 Partial Content에 관심을 가져야 하는 이유
HTTP 206 Partial Content
상태 코드는 프로토콜 설계의 걸작입니다. 이는 성능 및 사용자 경험 개선의 세계를 여는 간단하고 우아한 솔루션입니다. 초기 HTTP의 경직된 '전부 아니면 전무' 방식을 유연하고 효율적이며 탄력적인 데이터 전송 시스템으로 바꿉니다.
206 Partial Content 상태 코드는 HTTP에서 가장 강력한 도구 중 하나입니다. 이는 스트리밍, 다시 시작 가능한 다운로드, 대역폭 최적화 및 더 부드러운 사용자 경험을 가능하게 합니다. HTTP 206 Partial Content 상태 코드는 웹에서 효율적인 데이터 전송의 초석입니다. 스트리밍 미디어부터 다운로드 재개 및 대용량 데이터 전송에 이르기까지, 206은 클라이언트와 서버 간의 스마트하고 유연한 통신을 가능하게 합니다.
200 OK
만큼 간단하지는 않지만, 206을 올바르게 사용하고 구현하는 방법을 배우면 API와 앱을 훨씬 더 견고하게 만들 수 있습니다. 당신의 인내심을 지켜주는 "다시 시작" 버튼부터 당신을 즐겁게 하는 스트리밍 비디오의 즉각적인 건너뛰기까지, 206
은 보이지 않는 곳에서 작동하며 현대 웹을 빠르고 반응적으로 느끼게 합니다.
API를 개발하거나 사용하는 경우, 206이 어떻게 작동하는지 숙지하고 이러한 조건에서 엔드포인트를 테스트하는 것이 필수적입니다. 대부분의 개발자는 일상 업무에서 Range
헤더를 수동으로 작성할 일이 없겠지만, 그 작동 방식을 이해하는 것은 대용량 데이터를 효율적으로 처리하는 견고한 애플리케이션을 구축하는 데 기본적입니다. 그래서 Apidog를 무료로 다운로드하는 것이 현명한 선택입니다. Apidog는 부분 콘텐츠 응답을 테스트하는 실질적인 방법을 제공하여 애플리케이션이 완벽하게 작동하도록 보장합니다. 부분 응답을 설계, 모의 및 문서화하여 개발자, 테스터, 심지어 제품 관리자의 업무를 더 쉽게 만들 수 있습니다.
그러니 다음에 비디오를 탐색하거나 중단된 다운로드를 재개할 때, 기억하세요: 보이지 않는 곳에서 206 Partial Content
가 작동하고 있다는 것을요.