기타

[Linux] MIME Type이란 무엇인가?

A6K 2021. 8. 4. 05:08

웹 컨텐츠를 다루면 어떤 타입의 컨텐츠인지를 표시하기 위해 'MIME Type'이라는 용어를 사용한다. MIME은 'Multipurpose Internet Mail Extensions'의 약자로 파일 변환을 위한 포맷이다. 이름에서도 알 수 있듯이 MIME Type은 이메일에 첨부된 파일을 텍스트 형태로 변환해서 이메일과 함께 전송하기 위해 개발된 포맷이다. MIME이라는 이름의 Internet Mail Extension에서 본래의 의도를 알 수 있다.

하지만 최근에는 이메일 전송을 위한 용도뿐만 아니라 웹을 통해 전달되는 다양한 형태의 파일의 데이터 포맷을 표현하기 위해 사용되고 있따.

IANA(Internet Assigned Numbers Authority)라는 인터넷 할당번호 관리기관에서는 다양한 파일의 타입들을 표준화하여 MIME Type으로 관리하고 있다. 현재까지 등록된 MIME 타입의 리스트는 IANA 웹 페이지에서 확인할 수 있다. (링크 : MIME 타입 리스트 - IANA)

웹 상에서 다양한 문서와 파일들이 전송되고 있기 때문에 MIME 타입의 전체 리스트는 매우 길다. 또 한, 새로운 타입의 파일이 계속 개발되고 추가되고 있기 때문에 MIME 타입의 리스트도 계속해서 갱신되고 있다.

문법

일반적으로 MIME 타입은 '타입/서브타입' 으로 구성된다.

type/subtype

'/' 문자로 구분된 두개의 타입으로 파일의 타입을 명시한다. 이 때, 타입 이름으로 공백 문자는 허용되지 않는다. 타입은 카테고리를 의미하며, 서브타입은 개별 혹은 멀티파트 타입이 될 수 있다.

MIME 타입 예제

타입 설명 서브타입
text 텍스트로 표현되는 모든 문서를 나타내며 인간이 읽을 수 있는 데이터를 의미한다.  text/plain, text/html, text/css, text/javascript ...
image 모든 종류의 이미지를 나타냄 image/jpeg, image/png, image/gif ...
audio 모든 종류의 오디오 파일들을 나타냄 audio/mpeg, audio/wav, audio/midi ...
video 모든 종류의 비디오 파일들을 나타냄 video/ogg, video/webm
application 모든 종류의 바이너리 데이터를 나타냄 application/xml, application/json, application/xhtml+xml, application/pdf ...

일반적으로 특정한 서브타입이 없는 경우 'text/plain'으로 사용하며 특정한 타입이 없는 바이너리 데이터의 경우 'application/octet-stream'을 사용한다.

MIME 타입이 굉장히 다양한 포맷을 지원하긴 하지만 대부분은 그 중 일부만 사용하게 될 것이다. (예를 들어, xml, json 등) MIME 타입을 잘 이해하고 정확하게 사용해야 인코딩 및 디코딩시 잘 못된 형태로 변환하지 않게 된다.

MIME 스니핑

MIME 타입이 지정되지 않았을 경우 혹은 클라이언트가 타입이 잘 못 설정되었다고 판단한 경우 MIME 타입에 대한 스니핑을 시도할 수 있다. 전송 받은 데이터를 훑어보고 MIME 타입을 추측해내는 것이다.

이와 관련하여 서버에서 Content-Type 중 X-Content-Type-Options 를 전송하여 MIME 스니핑을 차단 할 수도 있다. MIME 스니핑은 보안관련 사항에서 문제를 일으킬 수 있기 때문이다.