MIME의 정의를 살펴보자면, Multipurpose Internet Mail Extensions 의 약자로 일종의 암호화 비스무리한 파일 변환을 뜻한다. MIME은 이메일과 함께 동봉할 attachment 파일을 텍스트 문자로 전환해서 이메일 시스템을 통해 전달하기 위한 목적으로 개발되었기 때문에, 이름이 Internet Mail Extension 이다. 하지만 이제는 웹을 통해서 여러 형태의 파일을 전달하는데 두루 쓰이고 있다.
왜 UUEncode 방식이 있는데 MIME 이란게 등장했느냐? UUEncode 방식에는 단점이 있었기 때문이다. 예를 들면, 문서의 끝부분의 공백이 사실은 공백이 아니라 모두 변환되어야 할 값들을 나타내는데, 이 공백을 무시하는 시스템의 경우엔 UUEncode 파일을 원형 그대로 전달 받을 수 없었다는 것등과 같은 문제가 있었다.
그래서 UUEncode 방식을 대폭 보완한 새로운 인코딩 방식이 등장하게 되었고, 이걸 일컬어 MIME 이라고 하는 것이다. MIME 은 특히 기존의 UUEncode 방식에서는 없었던 '파일 포맷' (또는 Content-type) 정보도 함께 담을 수 있다. 즉 지금 전달되는 이 파일은 GIF 파일이다, MOV 파일이다 등을 나타내 주는 딱지를 붙일 수 있었다. 이렇게 MIME 에서 사용하는 인코딩 방식을 base64 라고 한다. 방식은 위에서 살펴본 것과 유사하다. 8 비트 3 개를 6 비트 4개로 바꿔서, 적절한 변형을 하는 것이다.
이렇게 해서 텍스트만이 전달될 수 있는 기존의 이메일 시스템에서도 여러 가지 바이너리 파일들을 자유롭게 주고 받을 수 있게 된 것이다. 이것을 가능하게 한 것이 MIME 입니다. 8 비트 바이너리 파일을 7 비트의 아스키문자 파일(플레인 텍스트 파일)로 바꿔주는 것이다.
MIME 타입 심층분석
MIME으로 인코딩 한 파일은 Content-type 정보를 파일의 앞부분에 담게 된다는 것을 앞에서 언급하였다. 그런 컨텐트 타입에는 여러 가지가 있다. 자주 이런 말을 들어 보았을 것이다. “어떤 마임 타입 (MIME Type) 이 웹 브라우저에서 지원된다, 안된다.”
이건 특정 컨텐트 타입의 파일을 웹 서버로부터 전달 받아서 웹 브라우저가 열 수 있다, 아니다는 의미이다. 예를 들어. 어떤 그림 파일이 있다면. 웹 브라우저가 서버에 접속해서 html 문서를 요청하면서, html 문서 내에 담긴 img 값으로 지정된 path로 부터 불러들인다.
이때 그 path 에 있는 파일이 웹 브라우저에서 지원되는 mime type 이라면 웹 브라우저를 통해서 '열어' 볼 수 있다. 브라우저 내에서 바로 뜰 수도 있고 (.gif 나 .jpg 처럼) 아니면 외부 그래픽 프로그램이 구동되면서 그 이미지 파일을 띄울 수도 있다.
음악 파일도 마찬가지이다. 바로 그런 것을 두고 '이 MIME 타입은 웹 브라우저에서 지원된다, 안된다..'는 의미이다. 주로 쓰이는 (거의 표준이 된) 대부분의 포맷들 (.gif, .jpg, .mov ) 들은 대개 웹 브라우저에서 무리 없이 열린다.
하지만 브라우저에서 지원하지 못하는 유형의 파일들은 그 파일들을 열어줄 수 있는 프로그램을 손수 지정해 주어야 하는데 웹 브라우저 세팅에 보면 외부 프로그램을 '연결' 지울 수 있다. 물론 윈도우즈는 좀 다르다.
하지만 대체로 '기본 세팅' 된 프로그램들이 대개의 컴퓨터에 깔려 있는 것이기 때문에 (ex : .zip 파일이라면 winzip , .sit 파일이라면 stuffit expander , .mp3 면 winamp. . .) 특별히 설정을 건들지 않고도 그 파일을 전송받으면 '이미' 어딘가에 깔려져 있는 winzip 이라든지 winamp 등이 자동으로 뜨면서 해당 파일을 열어주게 된다.
역으로, 어떤 MIME 타입을 자기가 원하는 특정 프로그램으로 열고 싶다면 이걸 따로 설정해줘야 된다는 얘기도 되겠죠? 이를 테면 나는 mp3 를 winamp가 아닌 다른 프로그램으로 열고 싶다면 따로 연결을 해줘야 default 로 설정된 winamp 대신에 지정된 프로그램이 실행된다는 의미이다.
매킨토시의 경우엔 웹 브라우저 (익스플로러, 넷스케이프) 내의 ' 환경설정 ' 에서 이들 MIME 타입별 연결 프로그램을 지정해 줄 수 있게 되어 있지만, 윈도우즈의 경우엔 운영체제 레벨에서 이를 지정한다. 윈도우즈 탐색기를 연 다음, '보기 -> 폴더옵션' 이라는 메뉴에 보면. 아래 그림과 같이 ' 파일형식 ' 이라는 탭이 있다. 여기에서 파일 확장자나 마임타입 별로 구동될 프로그램을 설정한다.
gif 파일의 경우를 살펴보자면, '내용 형식' 이라는 단어 옆에 'MIME'이라고 되어있다. MIME 타입이 어떻게 설정되어 있는지를 살펴보자면, 일단 가운데 슬래쉬 ( / ) 가 있고, 슬래쉬 앞부분에는 파일의 종류를 나타내는 image, 슬래쉬 뒷부분은 파일의 포맷을 나타내는 gif를 나타내고 있다. 이렇게 MIME 타입은 '파일종류 / 파일포맷' 형태로 정의된다.
MIME 타입의 예를 들자면 아래와 같다.
application/msword
text/html
application/pdf
audio/mpeg
마임 타입 밑에 보면 연결 프로그램으로 인터넷 익스플로러가 설정 되어 있다. 따라서 gif 파일을 더블 클릭하면 익스플로러가 뜨면서 열리게 된다. 또는 웹 문서에 포함된 gif 파일도 바로 웹 브라우저에서 열리게 된다.
만약 image / gif 마임 타입을 다른 그래픽 프로그램 (예: 페인트샵 프로) 과 연결해 놓았다면, 웹 상에서 gif 파일이 포함된 웹 문서가 열릴 때마다 페인트샵 프로가 뜰 것이고, 데스크탑 상에서 더블클릭 해도 페인트샵 프로가 뜨면서 열릴 겁이다.
윈도우는 웹을 통해 이동할 수 있는 특정 MIME 타입을 열 외부 프로그램을 웹 브라우저에서 지정하지 않고 운영체제 레벨에서 지정을 한다. 바로 이것이 웹 브라우저와 OS 를 '불공정' 하게 혼합시켰다는 하나의 사례인 것이다. 미 법무성이 마이크로소프트를 제소한 이유가 바로 이 때문이다.
MIME 타입의 예
좀 더 쉬운 예를 들어보자. 사용자가 Windows 시스템에서 PPT 파일을 더블클릭을 하면 파워포인트가 자동 실행된다. 이 또한 MIME 설정과 유사하다고 볼 수 있다. (연결 프로그램 설정과 비슷한 개념)
그렇다면 왜 웹서버에 MIME을 설정하는 것일까? 이미지는 image/로, 오디오는 audio/, 비디오는 video/로 보통 시작한다. 그리고 application/가 있다. ppt는 application/powerpoint로 MIME 타입이 보통 웹서버에 잡혀 있습니다.
사용자가 Internet Explorer(이하, IE)에서 ppt 파일을 다운로드 받을때 저장하지 않고 "열기"를 하면 IE에서 바로 ppt 파일이 브라우징 된다. 즉, 해당 클라이언트에 설치되어 있는 프로그램을 실행하여 보여주는 서버의 파일을 보통 application/로 표현을 한다.
그렇다면 왜 XHTML 패밀리 문서에 대한 MIME 타입을 application/xhtml+xml로 했을까? 이는 text로 해도 문제가 없을 것이다. 이는 브라우저에서 해당 XHTML 문서를 application으로 처리하고, 아마도 plugin된 형태의 별도의 어플리케이션에서 보여주는 것과 같이 설계가 되어있기 때문이다.
이와 비슷하게 XML 문서도 그 MIME 타입으로 text/xml과 application/xml, 이렇게 2가지 타입으로 설정이 가능하다. 이것은 정책적으로 해당 XML 파일이 브라우저상에서 text 형태로 처리되어야 할 경우에는 웹 서버가 응답(response) MIME 타입을 text/xml 으로 설정하여 클라이언트 브라우저로 전송한다.
반면에, 만약 특정 어플리케이션이 해당 XML 문서를 분석하여 처리해야 할 경우에는 웹 서버가 해당 요청에 대한 응답 MIME 타입을 application/xml 로 설정하여 클라이언트 브라우저로 전송한다.
즉, 브라우저에서 어떤식으로 XML 문서를 text 형식으로 처리할지, 특정 application에 대한 형식으로 처리할지는 클라이언트/서버간에 미리 정해진 정책상의 문제이다. MIME도 일종의 표준이 있습니다. 보통 표준을 정하면 그대로 따르는 것이다.
'old > Mobile' 카테고리의 다른 글
OSI 7계층 개념잡기 (0) | 2010.05.10 |
---|---|
인코딩과 디코딩 (0) | 2010.05.10 |
Ad-Hoc 이란? (0) | 2010.05.10 |
아스키(Ascii)와 바이너리(Binary) 개념잡기 (0) | 2010.05.10 |
음수 2진수와 10진수간의 변환 방법 (0) | 2010.05.10 |