C.W.K.
Stream
Lesson 04 of 04 · published

media type 는 바이트랑 함께 다닌다

~10 min · media-type, mime, interpretation, pairing

Level 0신호 없음
0 XP0/32 lessons0/12 achievements
0/100 XP to next level100 XP to go0% complete
"media type 없는 바이트는 라벨 없이 밀봉된 상자야. adapter 는 그게 JPEG 인지 알아야지, 추측하면 안 돼."

바이트만으로는 모호하다

이미지 바이트 덩어리는 자기가 뭔지 알려주지 않아. 같은 raw 버퍼가 JPEG 일 수도, PNG 일 수도, WebP 일 수도, HEIC 일 수도 있어 — 그리고 각각 다르게 디코딩돼. media type(MIME 타입: image/jpeg, image/png, image/webp, …)이 adapter 한테 상자를 어떻게 해석할지 알려주는 라벨이야. 그거 없이, 또는 틀린 걸로 바이트를 보내면, 배송 라벨 없는 밀봉 소포를 넘기는 거야: 올바로 열릴 수도, 거부될 수도, 잘못 읽힐 수도 있어. '바이트가 도착했다'는 필요하지만 충분하진 않아 — 올바로 라벨 붙어서 도착해야 해.

나눌 수 없는 짝

{ bytes, mediaType } 를 항상 함께 다니는 하나의 나눌 수 없는 값으로 다뤄, staging 부터 adapter 까지. 둘이 분리되는 순간 — 바이트는 여기 나르고, media type 은 저기서 추론하거나, 추측으로 기본값 매기면 — 미묘한 실패 부류를 도입한 거야:

  • 틀린 기본값: 전부 image/jpeg 라 가정하면 사용자가 실제로 보낸 모든 PNG 랑 HEIC 를 조용히 망가뜨려.
  • 한 홉에서 잃음: staging 에선 알던 media type 이 adapter 전에 버려지면 하류 추측을 강제해.
  • 비일관 재감지: 두 코드 경로가 타입을 따로 sniff 하면 어긋날 수 있어, 공유-resolver 레슨의 drift 버그를 되살려.

해법은 media type 을 파일의 진짜 타입이 알려진 출처에서 캡처하고, 바이트의 나눌 수 없는 짝으로 끝까지 나르는 거야. 원자적 aggregate 랑 같은 규율, 한 층 아래: 떨어지면 무의미한 두 조각을, 설계로 함께 둠.

작은 필드, 하중 견딤

media type 을 하찮은 문자열로 다루고 파이프라인 어딘가서 떨어지게 두기 쉬워 — 그냥 몇 글자니까. 근데 그 몇 글자가 익명 바이트 버퍼를 모델이 실제로 디코딩할 수 있는 그림으로 바꿔. 이게 멀티모달 약속의 마지막 조각이야: 그냥 '진짜 바이트가 adapter 에 닿음'이 아니라, '진짜 바이트가, 올바로 라벨 붙어서, adapter 에 닿음'. 짝을 맞추면 비전이 끝에서 끝까지 정직해; 라벨을 떨구면, 완벽한 바이트를 보내고도 여전히 안 보일 수 있어.

Code

출처에서 media type 캡처; 짝으로 나르기·typescript
// 타입은 파일이 진짜인 데서 알려져. 거기서 캡처해.
type ResolvedImage = { bytes: ArrayBuffer; mediaType: string }; // 절대 분리 안 됨

async function resolveStagedImage(localId: string): Promise<ResolvedImage> {
  const blob = await readStagedBlob(localId);
  return { bytes: await blob.arrayBuffer(), mediaType: blob.type }; // 여기서 짝지음
}

// 틀림: 짝을 쪼개고 하류에서 타입을 다시 추측.
//   send(bytes);                         // media type 남겨둠
//   const mediaType = "image/jpeg";      // PNG/HEIC 를 망가뜨리는 기본값

// 맞음: media type 이 바이트랑 함께 모든 봉투로, 안 바뀐 채 다녀.

External links

Exercise

이미지의 media type 을 파이프라인으로 추적해: 파일 선택, staging, 해소, 봉투, adapter 로 전송. 각 홉에서 'media type 이 아직 이 바이트에 붙어 있어?' 물어. 처음으로 떨궈지거나 기본값될 수 있는 데를 찾아. 그다음 media type 이 출처에서 캡처돼 나눌 수 없는 짝으로 다니게 설계를 고치고 — 안 그러면 HEIC 사진에 뭐가 깨지는지 묘사해.
Hint
media type 은 바이트만 전달하는 홉에서 제일 자주 잃어, 'image/jpeg' 같은 하류 기본값을 강제하며. HEIC 사진엔, 그 기본값은 adapter 가 HEIC 바이트를 JPEG 로 읽으려다 이미지가 디코딩 실패한다는 뜻 — 완벽한 바이트, 틀린 라벨, 비전 없음.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.