Intro
컴퓨터는 0과 1로 이루어진 이진수만 이해할 수 있습니다. 따라서 ‘abcd’와 같은 문자를 컴퓨터가 읽기 위해서는 숫자로 변환 해주어야 합니다. 예를들어 ‘A’는 숫자 65로 이진수로 표현하면 ‘01000001’ 이 됩니다.
그런데 컴퓨터 등장 초기에는 오늘날의 PC처럼 공통된 표준이 정립되지 않았습니다. 각자 다른 방식으로 하드웨어를 제작했고 거기에 맞게 소프트웨어를 만들었습니다. 그러다보니 서로 다른 컴퓨터간에 데이터를 교환할때 문제가 많았습니다.
그래서 미국 국가표준 협회인 ANSI(American National Standards Institue)에서 표준을 만드는데요 이것이 바로 ASCII 라는 표준입니다.
ASCII란?
컴퓨터에서 인식하는 문자를 숫자로 표현할때 표준을 정한 것이 ASCII입니다. ASCII는 American Standard Code for Information Interchange의 약자입니다. 말 그대로 정보 교환을 위한 미국 표준 코드라는 뜻입니다. ASCII 코드표는 아래와 같습니다.
위 캡처를 보면 알겠지만 숫자가 32부터 127 까지만 확인할 수 있습니다. 그 이유는 컴퓨터가 정보를 처리하는 기본단위가 바이트(Byte) 이기 때문입니다. 바이트는 8비트의 줄인말로 8자리 2진수(Bianry)까지 표현한 것을 말합니다. 1바이트는 (=8비트) 00000000부터 11111111 까지 표현할 수 있으며 이를 10진수로 표현하면 0과 255 이죠.
근데 왜 32부터 시작할까요? 이는 컴퓨터 단말기의 표준격인 TTY에 사용하는 제어문자를 위해 0-32를 남겨둬야 했습니다. 제어 문자는 폰트가 바뀌거나, 전송의 끝을 알리는 문자처럼 특수한 작업과 기능, 이벤트를 알려주는 특수문자를 말합니다.
실제로 33번부터 127까지 보통의 문자를 짝지울 수 있었고 1바이트 표현에서 128부터 255까지는 사용할 필요가 없었습니다.
그래서 ASCII를 비트로 표현했을때 가장 앞자리수가 항상 0이 됩니다. 01111111 은 10진수로 127이기 때문입니
다. 아스키문자는 7비트 문자
인 것이죠.
UUEncode의 등장
보통의 텍스트 파일을 컴퓨터간에 주고받을때 ASCII 공통 표준을 따르면 아무 문제가 없었습니다. 그런데 네트워크를 통해 아스키가 아닌 바이너라 파일들을 보내야 했습니다. 바이너리 파일이란 음악, 그림, 영상 파일등을 말합니다. 이들은 아스키와같이 7비트를 사용하는 것이 아닌 8비트 모두 사용한다는 특징을 갖고 있습니다. 8비트 데이터를 주고 받아야하는 이슈가 생겼죠.
최초에 네트워크상에서 데이터를 교환할때 아스키 문자로만 이루어진 데이터만 전송할 수 있도록 제작되었기 때문에 8비트를 모두 사용하는 바이너리 파일 데이터를 제대로 전달 할 수 없었습니다. 따라서 바이너리파일을 기존의 시스템상에서 문제 없이 전달하기 위해서는 다시 7비트의 아스키 문자 데이터로 바꾸어서 전달할 필요가 있었습니다. 즉 바이너 파일 -> 문자 데이터
의 변환이 필요했습니다.
이 과정을 인코딩(encoding)이라고 합니다. 이 반대의 과정을 디코딩(decoding) 이라고 합니다. 초기 인코딩 방식의 대표적인 표준이 바로 UUEncode (Unix to Unix Encode) 입니다.
인코딩 된 바이너리 파일을 텍스트에디터로 열어보면 이상한 문자가 가득 뜨는데 인코딩 과정을 통해 문자로 변환되었기 때문이죠.
UUEncode 인코딩 방식
어떤 바이너리 파일 데이타 중 3개의 바이트를 가져 왔을 때 다음과 같았다면,
10011100 00110011 11110000
8자리씩 총 24개의 비트입니다. 24개이므로 이것을 다시 6개짜리 4개로 바꿀 수 있습니다.
100111 000011 001111 110000
그 다음, 첫 두 자리에 0
을 붙입니다.
00100111 00000011 00001111 00110000
이제 전부 첫 번째 숫자가 0
이 되어서 조금 더 아스키 코드에 가까워 졌습니다.
그 다음, 각각에 십진수 32를 (이진수 100000
) 더합니다.
조절 문자가 아닌, 화면에 보이는 보통의 문자 값으로 바꾸기 위해서입니다.그렇게 하면 위 데이타는
00111 01000011 01001111 01110000
이제 이들은 모두 알파벳이나 기타 기호 등의 보통의 아스키 문자로 바꿀 수가 있게 됩니다.
MIME란?
멀리 돌아왔습니다. 그러면 MIME는 무엇일까요? Multipurpose Internet Mail Extensions의 약자로 간단히 말해 파일 변환을 말합니다. MIME는 이메일과 함께 동봉할 파일을 텍스트 문자로 변환해서 이메일 시스템을 통해 전달하기 위해 개발되었습니다. 그래서 이름에 Internet Mail Extension이 들어갑니다. 하지만 현재는 이메일에 포함된 파일 변환 용도로만 사용되는것이 아닌 웹을 통해 여러형태의 파일을 전달하는데 쓰이고 있습니다.
MIME가 등장한 이유?
UUEncode가 있는데 왜 MIME가 등장했을까요? UUEncode의 단점을 보완하기 위해서 만들어졌습니다. 문서의 끝 부분의 공백이 사실 공백이 아니라 변환되어야 할 값인데 공백을 무시하는 시스템의 경우에 UUEncode 파일을 그대로 전달 받을 수 없었다는 것 등등의 단점이 있었습니다.
MIME은 특히 기존의 UUEncode 방식에서는 없었던 파일 포맷 (또는 Content-type) 정보도 함께 담을 수 있습니다. 한마디로 '지금 전달하는 이 파일은 GIF 파일이다', 'MOV 파일이다'처럼 그 파일의 종류를 나타내는 딱지를 붙일 수 있었던 것이죠. MIME 에서 사용하는 인코딩 방식을 "base64"라고 합니다. 방식은 위에서 본 것과 유사합니다. 8비트 3개를 6비트 4개로 바꿔서 적절한 변형을 합니다.
마임 타입 (MIME Type)
이런 얘기를 들어 본 적이 있을 것입니다.
'어떤 마임 타입 (MIME type)은 웹브라우져에서 지원된다, 안된다.' 이 말은 '특정 컨텐트 타입의 파일을 웹 서버로부터 전달받아서 웹브라우져가 열 수 있다, 없다'라는 의미입니다.
웹 브라우져가 웹 서버에 접속해서 html 문서를 요청하면서 html 문서 내에 담긴 이미지 파일도 가져 옵니다. 이 때 이미지 파일이 웹 브라우져에서 지원되는 마임 타입이라면 웹 브라우져 내에서 열 수 있습니다. .jpg, .gif 파일 등은 브라우져 내에서 바로 뜨는 것입니다.
초기 웹브라우져인 모자익(Mosaic) 웹브라우져때만 해도 이것은 획기적인 기능이었습니다. 모자익 이전의 웹브라우져는 .jpg, .gif 마임 타입을 직접 지원하지 않았기 때문에 외부 그래픽 프로그램이 구동되면서 이미지를 보여 줬습니다.
GIF파일의 경우를 확인해보면 내용형식(MIME)에 image/gif 라고 되어있습니다. MIME의 내용형식 (Content-type) 표현은 파일종류/파일포맷 형태로 정의합니다.
아래와 같이 말이죠
application/msword
text/html
application/pdf
audio/mpeg
MIME Type의 종류
- text
특정 문자셋으로 구성된 텍스트 정보나 포스트스크립트 같은 formatted text 정보 전송에 사용
text/plain, text/html, text/css, text/javascript
multipart
모든 종류의 이미지를 나타내며, 비디오는 포함되지 않습니다.
audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
audio
모든 종류의 오디오 파일을 전송합니다.
audio/midi, audio/mpeg, audio/webm, audio/ogg, audio/wav
video
모든 종류의 비디오 파일을 전송합니다.
video/webm, video/ogg
application
모든 이진 데이터(바이너리 데이터)를 전송합니다.
Media Type
이러한 마임타입은 www가 보급화 되면서 Media Type이라는 이름으로 확장됩니다. 그리고 현재는 대부분의 파일 타입이 웹브라우저내에서 문제없이 구동되고 있죠.
미디어 타입은 type, subtype, 그리고 선택적 매개변수로 이루집니다. 이를테면 HTML 파일은 text/html; charset=UTF-8
로 지정됩니다. 이 예에서 text
는 유형, html
는 아형, charset=UTF-8
은 문자 인코딩을 가리키는 선택적 매개변수 입니다.
https://ltvw.tistory.com/entry/마임-타입-MIME-Type-미디어-타입Media-Type-개괄
'IT' 카테고리의 다른 글
[IT] 러닝커브(Learning Curve) 란? (0) | 2022.02.28 |
---|---|
[OS] windows server에 OpenSSH 설치하기 (0) | 2022.02.25 |
프로그램 코딩 케이스 종류(카멜, 스네이크, 케밥, 파스칼) (0) | 2022.01.22 |
jenv 사용하여 멀티 자바 버전 사용하기 (0) | 2021.10.08 |
Apple MAC M1 에서 linux/amd64로 docker 빌드하기 (3) | 2021.10.07 |