DEVELOPMENT-GLOSSARY

Editing
  • account_tree
  • bug_report

서러게이트(surrogate)

UTF-16은 UTF-32에 비해 표현할 수 있는 문자수가 적으나 효율면이나 현재 보편적인 사용면에서 우위를 차지하고 있다. 그래서 UTF-16을 유지하면서 문자 표현이 부족한 부분을 기술적으로 해결하고자 하는 것이 서러게이트(surrogate)이다.

배경

2003년 4월 유니코드(unicode) 4.0이 등장한 이후로 컴퓨터로 표현하고자 하는 문자의 수는 계속 늘어났고 UTF-16(2바이트이며 최대 65,536)으로는 모두 표현하기 어려운 지경에 이르렀다. 그래서 등장한 인코딩 기술이UTF-32(4바이트이며 최대 4,294,967,296 표현)이다. UTF-3232비트 기반으로 문자를 표현한다. 기본 비트수가 늘어났으니 유니코드 버전 업데이트는 환영받지 못할 일은 아니다.

사실 문자 인코딩은 소프트웨어 개발에서 매우 중요한 요소이다. 한번 설계해 놓은 것을 바꾸기는 쉽지 않다. 따라서 현재 운용중인 UTF-16(2바이트) 기반의 소프트웨어에 유니코드 4.0 이상을 반영하려면 UTF-32(4바이트)로 변경하는 시도를 해야하는 데 이게 좀 까다롭다. 그리고 좀 더 많은 문자를 사용하기 위해서 UTF-32로 설계하는 것은 시스템 가용력을 올리는 꼴이 될 수도 있다. 대안을 찾아야 한다. 사실 UTF-16은 이미 4바이트의 표현을 위해 미리 준비해 둔 방법이 있다. 그런데 그게 꽤나 복잡하다는 게 문제이다.

서러게이트(surrogate)

UTF-16을 유지하면서 유니코드 4.0 이상을 지원할 수는 없을까? 이게 가능했던 모양이다. 그래서 등장한 것이 서러게이트이다. 유니코드 다국어 기본 평면에 속하는 문자(근대 문자와 특수 문자)는 최대 2바이트를 사용한다. 그리고 평면외의 문자는 4바이트를 사용한다. 그런데 원칙적으로 16비트에서 4바이트를 표현할 수 없다. 4바이트를 표현하기 위해서는 32비트 기반을 사용해야 한다. 따라서 UTF-16에서 4바이트를 사용해야 하는 문자는 다음의 설명과 같이 복잡한 방법을 사용한다.

유니코드 다국어 기본 평면에는 문자가 할당되지 않은 영역이 존재한다. 첫 번째는 비트가 110110로 시작하는 상위 서러게이트(high surrogate)라는 영역(U+D800U+DBFF0)이고 두 번째는 110111로 시작하는 하위 서러게이트(low surrogate) 영역(U+DC00U+DFFF)이 존재한다. 그렇기 때문에 두 영역을 의미하는 6개의 비트 조합으로 시작하지 않는다면 유니코드 다국어 기본 평면에 있는 문자임을 알 수 있다.

16비트에서 앞쪽 6비트는 서러게이트 영역임을 표시하고 나머지 10비트는 자유롭게 사용이 가능하다.  그래서 4바이트로 표현해야 할 문자를 10비트씩 나누어서 상위 서러게이트와 하위 서러게이트에 할당한다. 총 20비트로 표현이 가능한 숫자는 1,048,576이므로 이러한 방법으로 UTF-16 인코딩 범위 밖의 문자도 어느 정도는 표현이 가능하다.

서러게이트 페어(surrogate pair)

상위 서러게이트와 하위 서러게이트가 짝을 이루어 4바이트를 표현하는 의미의 명칭이다.