본문 바로가기
개발

MIME

by FODI 2022. 10. 2.

컴퓨터는 이진 형식으로 파일을 저장한다. 모든 파일이 이진 형식으로 인코딩되어 있는 상태에서도 컴퓨터는 오디오 파일과 비디오 파일, 그리고 이미지 파일을 구분하여 실행한다. 브라우저 상에서 이를 가능하게 하는 것이 바로 MIME 타입이다.

 

MIME 타입은 클라이언트에게 전송된 문서의 타입을 명시하는 역할을 한다.

예를 들어 png파일은 image/png로, pdf파일은 application/pdf로 MIME 타입을 지정한다.

 

등장 배경

MIME 타입은 텍스트 외의 파일을 이메일로 전송하기 위해 탄생했다.  초창기 이메일은 오로지 텍스트만 전송이 가능했다. 이메일 전송 프로토콜인 SMTP protocol은 7-bit ASCII charset만 지원했기 때문에 **바이너리 파일이나 **ASCII charset 외의 charset은 처리할 수가 없었다. MIME 타입이 등장함으로써 ASCII charset(문자열)과 non-ASCII 데이터를 모두 전송할 수 있게 되었다.

 

  • 바이너리 파일(binary file)

이진 형식으로 디코딩된 파일을 일컫는 말로, 이미지, 비디오, 오디오, 워드, 엑셀 등의 파일 등 텍스트 파일(text file)을 제외한 모든 컴퓨터 파일을 말한다. ASCII charset과는 달리 8bit를 모두 사용한다. *bit: binary digit의 줄임말

 

  • ASCII charset(Character Set)

Charater Set은 사용자가 입력한 문자나 기호들을 컴퓨터가 이해할 수 있는 2진수로 변환하는 시스템을 말하는데, ASCII charset은 초창기에 만들어진 Charater Set 중 하나로 알파벳 대소문자와 숫자, 특수문자와 제어문자로 이루어져 있다. 정보 처리의 기본단위는 8bit(=1byte, 0 ~ 255)지만, ASCII charset을 제작할 당시에는 0부터 127까지만을 사용하여 모든 문자를 표현할 수 있었기 때문에 ASCII charset은 7bit만 사용된다. 다시 말해서, ASCII charset은 7bit이기 때문에 이진수로 변환했을 때 첫 번째 값은 무조건 0이다. (ASCII charset의 범위: 00000000(2) ~ 01111111(2))

 

 

ASCII charset

charset에는 ASCII 외에도 UNICODE charset, UTF-8 charset 등이 있다. UNICODE와 UTF-8 모두 각 나라별 언어를 표현할 수 있지만 UNICODE는 모든 글자를 2byte로 처리하는 반면에 UTF-8은 영문과 숫자는 1byte, 한글 등은 3byte로 처리한다.

 

결론

컴퓨터는 데이터를 바이너리 파일로 저장하고, 바이너리 파일이 오디오 파일인지, 비디오 파일인지, 이미지 파일인지를 구분하는 것은 MIME 타입이다. 그리고 송신자는 바이너리 파일(ex. 이미지)을 문자열로 인코딩(ex. base64)하여 MIME 타입과 함께 데이터를 전송한다. 수신자는 문자열을 MIME 타입에 적합한 형식(HTML문서, 이미지, 비디오 파일 등)으로 변환하여 사용한다.

 

예를 들어, 서버에 이미지 파일을 요청했을 때 클라이언트의 브라우저에서는 MIME 타입(확장자)을 토대로, 서버에서 받은 문자열을 HTML 문서나 이미지 파일 등으로 변환하여 사용한다. MIME 타입이 불분명한 데이터는 바이너리 파일로 처리한다.

 

출처: https://dololak.tistory.com/130

 

참고

MIME이란 무엇인가?

코딩교육 티씨피스쿨

What is MIME (Multipurpose Internet Mail Extensions)?

총정리 네트워크 전체의 흐름 - 라마개발일기

[HTTP] MIME Type(Multipurpose Internet Mail Extensions)

'개발' 카테고리의 다른 글

NVM으로 Node 설치하기  (0) 2022.10.25
주소창에 google.com을 치면 발생하는 일  (0) 2022.10.12
React.createPortal  (0) 2022.09.28
JSX  (0) 2022.09.28
React Context  (0) 2022.09.28

댓글