웹에서 파일을 업로드하거나 다운로드할 때, 또는 API 응답으로 온 데이터를 다룰 때 자주 마주치는 개념이 Blob입니다.
이번 글에서는 다음과 같은 순서로 Blob을 이해해보겠습니다:
Blob(Binary Large Object)은 하나 혹은 여러 개의 이진 데이터를 불변(immutable) 객체로 묶어 관리할 수 있는 자바스크립트 객체입니다.
쉽게 말해, "파일" 같은 덩어리 데이터를 메모리 상에서 하나의 객체처럼 다루기 위한 도구입니다.
웹에서는 이런 상황이 자주 발생합니다:
Blob을 이용하면 이 데이터를 FormData에 넣거나, URL.createObjectURL(blob)을 통해 다운로드 링크를 만들거나, 파일명까지 지정해줄 수 있습니다.
즉, "이진 데이터를 추상화"하고 "편리하게 다룰 수 있게" 해주는 도구가 바로 Blob입니다.
ArrayBuffer, TypedArray, string, 또는 기존 Blob을 스냅샷 형태로 복사해 내부에 저장합니다.const blob = new Blob(["Hello World"], { type: "text/plain" });
| 속성/메서드 | 설명 |
|---|---|
blob.size | 총 byte 크기 |
blob.type | MIME 타입 (예: image/png, text/plain 등) |
blob.text() | 문자열로 읽기 (Promise) |
blob.arrayBuffer() | ArrayBuffer로 읽기 (Promise) |
blob.stream() | ReadableStream으로 청크 단위로 읽기 |
blob.slice() | 부분적으로 자른 새 Blob 생성 |
.text(), .arrayBuffer() 등의 메서드를 통해서만 읽을 수 있습니다.📌 정리하자면:
Blob은 원본 객체를 참조하지 않고, 복사본을 내부에 저장하여 안전하게 관리합니다.
const blob = new Blob(["Hello world"], { type: "text/plain" });
const url = URL.createObjectURL(blob);
const link = document.createElement("a");
link.href = url;
link.download = "hello.txt";
link.click();
const formData = new FormData();
formData.append("file", new Blob([imageData], { type: "image/png" }), "myImage.png");
text(), arrayBuffer(), stream(), slice())로 데이터 읽기 가능