UTF 란?
- 약자를 해석하자면,
Unicode Transformation Format
즉, 유니코드 변환 포맷을 말한다. - 쉽게 설명하자면, 유니코드를 변환할 때 그 기준이 되는 표를 말하는 것이다.
- ex)
U+0041
는 대문자A
로 치환되고,U+0042
는 대문자B
로 치환될 수 있도록 표를 제공하는 것이다.
유니코드가 생겨난 이유
- 요약하자면, 컴퓨터는 모든 것을 비트로 받아들이기 때문에 생겼다.
- 숫자에 의미부여를 해서 문자로 만들 수 밖에 없었다.
- 초기엔 알파벳 대소문자와 숫자정도만 만들어놨다.
- 이것이 바로
ascii
(아스키 코드)
- 이것이 바로
- 영문 말고 다른 문자를 쓰는 국가들이 등장했다.
euc-xx
라는 인코딩이 등장했다.
euc-xx
는 해당 국가 언어에서는 잘 동작하나, 제3외국어가 끼면 이상해졌다.- 애플, 제록스, IBM 이 합심하여 USC-2 를 만들었다.
- 2바이트로 이루어졌고, 아스키, 한국어, 일본어, 중국어 등이 포함됐다.
- 이를 cjk (china, japan, korea) 라고 부르기도 했다.
- 타 언어를 쓰는 사람들도 컴퓨터를 많이 사용하기 시작했다.
- 모든 문자를 다 표현하려면 크기를 좀 늘려야했다.
- 2 바이트를 더 늘려
Unicode
(유니코드) 란 것을 출범했다.
UTF 별 특징
- UTF 는 시행착오를 거쳐 많은 버전이 탄생했다.
UTF-8
,UTF-16
,UTF-32
등이다.
UTF-8
- 가변 길이 인코딩이다.
- 1바이트부터 4바이트까지 사용한다.
- ASCII 와 하위 호환이 된다.
- ASCII 에 해당하는 문자를 표현하는데는 1바이트만 사용하면 된다.
- 웹이나 유닉스를 기반으로 한 시스템에서 많이 쓰인다.
- 공간 효율이 좋아 통신하기 좋기 때문이다.
- ASCII 를 베이스로 한 소프트웨어와 완벽하게 호환되는 것도 그 이유다.
UTF-16
- 고정 길이 인코딩이다.
- 2바이트 혹은 4바이트를 사용한다.
- 원래는 윈도우즈를 위해 디자인되었다.
- 윈도우즈는 16비트 문자를 기본으로 사용한다.
- 많은 프로그래밍 언어와 애플리케이션이 이 인코딩을 사용한다.
UTF-32
- 고정 길이 인코딩이다.
- 4바이트를 사용한다.
- UTF-8 혹은 UTF-16 보다는 상대적으로 많은 공간을 필요로 한다.
- 공간을 많이 사용하더라도 정확도를 중요시 하는 과학, 기술 분야에서 환영받는 인코딩 방식이다.
UTF-8mb4
- UTF-8 과 동일한 가변 길이 인코딩이다.
- UTF-8 의 한계 때문에 생기게 되었다.
- (몇몇 수정된) UTF-8 은 BMP (Basic Multilingual Plane) 만 표현이 가능했기 때문이다.
- 고어나 음표나 특수 목적 문자를 사용하지 못했다.
- 유니코드가 확장되며 추가 문자인 SMP (Supplementary Multilingual Plane) 라는 것이 추가됐다.
- SMP 를 표현하기 위해서는 4바이트가 필요했다.
- SMP 를 다루기 위해 UTF-8mb4 인코딩이 생겨났다.
- 사실 이미 UTF-8 이 4바이트까지 사용하도록 1996년에 허가가 되었어서 이름만 변경된 것이다.
- UTF-8mb4 는 최신 MySQL에서 기본으로 사용된다.
mb4
글자의 의미는four-byte maximum
의 의미이다.- 최대 4바이트를 사용하며 모든 유니코드 문자를 표현하는 것이 가능해졌다.
MySQL 과 UTF-8mb4
- 유니코드 기준으로 놓고 보면, UTF-8mb4 는 UTF-8 과 사실상 이름만 다르다.
- 그러나 굳이 구분되는 이유가 MySQL 에서는 옛버전 UTF-8 (UTF-8mb3) 과 신버전 UTF-8 이 있는데, 신버전의 이름을 UTF-8mb4 라고 지으며 둘을 구분했다.
- MySQL 의 옛버전 UTF-8 인 UTF-8mb3 는 오직 BMP 만 표현 가능했던 인코딩 방식이다.
- 이를 이용해 메모리상의 이득을 보려 했으나, 결과는 이득은 매우 작고 오히려 많은 이슈를 불러일으켰다.
- 그래서 최신 버전의 MySQL 에서는 UTF-8mb4 를 기본 인코딩으로 사용한다.
추가로 읽어볼만한 문서
반응형
'용어 (개발용어)' 카테고리의 다른 글
IEEE 754 부동소수점이란? (0) | 2023.03.17 |
---|---|
클램프 (Clamp) 란? feat. 컴퓨터 과학, 그래픽스 용어 (0) | 2023.03.15 |
이스케이프 시퀀스 (Escape Sequence) 란? (0) | 2023.03.10 |
시멘틱 버저닝 (Semantic Versioning) 이란? (feat. package.json 표현 방식) (1) | 2022.11.06 |
루프백 아이피 (loopback ip) 란? (0) | 2022.11.05 |