user: 옛한글의 컴퓨터에서 표기하기 위한 체계를 알려주세요.

gpt: ## 문자 코드 체계

### 첫가끝 코드
**첫소리-가운뎃소리-끝소리 글자부호화 방식 한글 부호계**, 또는 줄여서 **첫가끝 코드**란 유니코드의 한글 자모 영역을 첫소리-가운뎃소리 순서로 배열하는 방법을 말한다. 관련 한국산업표준으로 KS X 1026-1이 있다.

첫가끝 코드를 사용하여 훈민정음 언해본의 첫 구절을 쓰면 다음과 같다.

기존에 첫가끝 코드를 사용할 경우 다음과 같은 문제점이 있었다.

위 1번을 해결하기 위해서는 트루타입 오픈 GSUB 기술과 이에 대응하는 자형 세트를 글꼴에 내장해야 한다. 마이크로소프트의 경우, 유니스크라이브 기술이 이러한 글꼴의 출력을 지원하며, 이를 지원하는 바탕 옛한글, 굴림 옛한글, 돋움 옛한글, 궁서 옛한글 글꼴이 알려져 있다. 이들 글꼴은 마이크로소프트 워드 2002 이상 버전의 오피스 플러스 팩을 통해 배포하고 있고, 네모꼴 모양의 미려한 옛한글을 보여 주나, 반드시 플러스 팩을 사야 글꼴들을 구할 수 있다는 단점이 있다. 은글꼴의 경우 은 바탕 글꼴이 상당히 미려한 한글 GSUB를 지원하고 있으며, 한글 글자 마디로 변환 가능한 첫가끝 자모는 한글 글자 마디로 대치해 보여준다. 마이크로소프트 윈도우 8 이상에 포함된 맑은 고딕도 첫가끝 코드를 지원한다. 본고딕은 자주 쓰이는 500개의 옛한글 글자 마디에 대해서는 미려한 완성형 글리프를 포함하고 있으며, 다른 글자 마디는 자모 조합으로 표시한다.

오픈 소스로 배포되고 리눅스, 안드로이드 등에서 쓰이는 와 이를 쓰는 최신 버전의 팡고는 GSUB를 잘 지원하므로 위에서 언급한 글꼴로 옛한글을 잘 표시할 수 있다. 애플의 애플 어드밴스트 타이포그래피는 mort/morx 테이블을 써서 글꼴 변경만으로 옛한글을 지원한다. 국제 SIL의 그래파이트도 mort/morx 테이블과 비슷한 방식으로 옛한글을 지원할 수 있다.

2번의 경우 역시 GSUB의 ligature 기능을 이용하면 첫가끝 글자 마디를 한양 PUA 코드에 대응하는 자형으로 바뀌어 보이게끔 글꼴 차원에서 구현할 수 있다. 또한 유니코드 5.2에서는 한양 PUA 코드 영역을 표현하기 위해 필요한 모든 자모가 포함되었으므로 더 이상 한양 PUA 코드를 사용할 이유가 없어졌다.

### 한양 사용자 정의 영역 코드
이른바 **한양 사용자 정의 영역 코드** 또는 **한양 PUA 코드**는 유니코드의 사용자 지정 영역을 쓰는 옛한글·구결 구현 코드이다. 윈도우 XP까지 한국어 윈도의 시스템 글꼴을 제작해 온 한양정보통신에서 이 코드에 대응되는 글꼴을 제작하였다.

이 코드는 마이크로소프트 워드 2000과 한/글에서 공식적으로 지원하였고, 그 밖에도 정부 기관 등에서 한글 고전을 정리하는 데에도 많이 사용되고 있다. 그러나 한양 사용자 정의 영역에 들어있는 완성형 옛한글 글자 마디는 고작 5천여 개밖에 안 된다는 한계를 가지고 있다.

하지만 한양 PUA 코드는 비표준 코드이고 완성형 형태로 지원하는 글자의 개수가 5천여 개밖에 안되는 한계를 가지고 있으며, 한양 PUA 코드를 지원하지 않는 일반 글꼴로 보면 옛한글이 올바르게 나타나지 않는다. 이러한 문제로 인해, 워드 2002부터는 한양 PUA 코드 영역의 옛한글을 더 이상 지원하지 않고 있으나, 한/글의 경우 2010부터는 첫가끝 표준을 지원하되 기존 한/글 문서와의 호환성을 고려하여 한양 PUA 코드를 계속 지원하고 있다. 지원하는 글꼴인 한컴돋움, 한컴바탕, 새굴림 등과 IME를 함께 쓰면 워드 프로그램이 아니어도 사용이 가능하다.

한양 PUA 코드를 사용하여 훈민정음 언해본의 첫 구절을 쓰면 다음과 같다.

한양 PUA 코드가 쓰는 한글 문자는 다음과 같이 배치되어 있다.

그 밖의 문자는 다음과 같이 배치되어 있다.

한양 PUA 코드 영역의 옛한글 글자 마디는 첫가끝 코드와는 달리 현대 한글 이외에, 자소의 합성이 완성되어 있는 형태의 글자 마디가 포함돼 있다. 이 완성형 글자 마디 이외의 글자 마디들은 U+F784~U+F8F7 영역의 자소들을 이용해 합성하도록 하고 있다.

그 외에 자소를 하나씩 입력할 경우, 가급적 호환용 한글 자모 영역의 자모를 이용하고, 그 영역에 없는 것은 한글 자모 영역의 자모를 그대로 이용한다. 그런데 한글 자모 영역의 문자들은 문자 조합을 위해 만든 것이기 때문에, 유니코드 컨소시엄의 방침대로라면 가운뎃소리와 끝소리는 글자 자체에 공간이 없이 앞 글자에 달라붙는 zero-width 방법으로 만들어야 한다. 그러나 한양 PUA 코드 영역을 지원하는 일부 글꼴들은 이러한 원리를 무시하여 한글 자모 영역의 중성, 종성에 모두 글자 폭을 할당해 놓은 경우가 있다. 호환용 한글 자모 영역과 한글 자모 영역에도 없는 자모는 한양 PUA의 첫소리·가운뎃소리·끝소리 범위를 이용해 합성한다.

한양 PUA 코드는 구 버전의 유니코드 및 관련 코드에 없던 자소를 포함하고 있다. 예컨대 한양 PUA에 있는 ퟅ는 유니코드 5.1까지는 없던 것이다. 유니코드 5.2에서 옛한글 낱자를 더 추가하여 이런 자모들까지 유니코드에서 쓸 수 있게 되었다.

이러한 한계에도 불구하고 한양 PUA 코드 영역에서 지원하는 완성형 형태의 옛한글은 상당히 많이 사용되게 되었으며, 유니코드 표준을 지키지 않은 수많은 비표준 문서를 양산하는 결과를 낳게 되었다. 이러한 문제를 해결하기 위해서 한국 사용자 모임과 같은 곳에서는 한양 PUA 코드를 첫가끝 표준으로 변환하는 프로젝트를 마련하여 그 해결 방법을 제시하기도 하였다.

### 제주서체 PUA
제주서체에서는 제주어 표기를 위해 필요한 ㆍ나 ᆢ가 들어간 한글 완성자 160자를 유니코드의 사용자 정의 영역 중 U+E001~U+E0A0에 배당해 놓았다. 이 체계는 위의 한양 PUA와는 별개의 체계이다.

## 그 외 기술적인 이슈

### 방점
유니코드에서 방점은 한 점짜리를 U+302E, 두 점짜리를 U+302F에 할당하고 있다. 방점은 한글 글자 마디)가 완성된 뒤에 입력해야 한다.

그런데 이 방식이 널리 정착되지 않아서인지 출판계 등에서는 한글 글자 마디에 앞서 방점으로 가운뎃점이나 쌍점을 입력하는 방식을 대신 쓰는 경우가 많다.

또 한/글에서는 별도로 글자 모양 설정을 통해 '드러냄표'의 한 형태로 강조점을 다는 방식을 제공하고 있다. 그런데 한/글 내에서 세로쓰기를 할 경우 드러냄표의 위치가 글자 오른쪽이 아닌 위로 올라간다. 트루타입 글꼴은 GSUB의 vert를 지원하며 이러한 트루타입의 GSUB/GPOS 기술을 방점에 대해 구현하면 애플리케이션 의존적이지 않은 가로쓰기 세로쓰기에 관계 없는 방점을 구현할 수 있으나 현재 이러한 방식을 제대로 지원하는 글꼴은 없다.