본문 바로가기

ComputerScience/ComputerScience

한글코드 관련 자료조사, KS 완성형, 유니코드, UTF 인코딩 등

이미지 출처: https://0xdf.gitlab.io/2022/05/07/htb-unicode.html

한글코드란?

컴퓨터에 한 번 입력된 자료는 우리가 아는 문자나 숫자의 형태에서 컴퓨터가 처리하기 쉬운 부호로 바뀌어서 기억 장치에 저장되는데 이 컴퓨터용 부호를 한글코드라고 말한다.

 

예를 들어 미국에서 표준으로 쓰이는 ASCⅡ코드를 지원하는 컴퓨터들에서는 영문의 ‘A’는 컴퓨터 내부에서 숫자 65로 ‘B’는 66으로 바뀌어 저장된다.

 

마찬가지로 한글코드는 한글로 작성한 문자를 컴퓨터용 부호로 변환하기 위한 규칙이다.

 

한글코드의 유형으로는 조합 원리에 따른 유형, 완성형에 따른 유형이 있다.

조합 원리에 따른 유형

조합 원리에 따른 유형으로는 N 바이트 코드, 3 바이트 코드, 상용 조합형이 있다.

 

N 바이트 코드

한글을 풀어쓴 것과 같이 자음과 모음을 각각 1바이트씩 처리하는 형식의 코드이며 2~5바이트까지 가변적으로 크기가 변할 수 있다.

 

3 바이트 코드

한글 1음절을 초성, 중성, 종성으로 나누고 각각을 1바이트씩 배정해서 처리하는 것으로 한글 1음절을 처리하는 데 3바이트를 사용한다.

 

상용 조합형(2 바이트 코드)

초성, 중성, 종성 각각을 5비트로 표현하고 이를 묶어서 2바이트로 만들어서 한 글자를 표현하는 방식이다. 이때 초성, 중성, 종성에 각각 5비트를 주면 2바이트 중에서 최상위 비트(MSB)가 남게 되는데, 이것은 한글과 영문자를 구별하는 용도로 사용한다. 즉 첫 번째 바이트의 최상위 비트가 1이면 한글이고 0이면 영문자이다.

완성형 한글 코드

한글 1음절에 하나의 코드값을 부여하는 방식의 코드이며 대표적으로 2바이트 완성형인 KS완성형 코드가 있다.

 

KS완성형

ISO표준을 따랐는데, ISO 표준은 ASCII 영역과 겹치지 않도록 첫 번째 비트 값을 1로 규정하였으므로, KS완성형은 0xA1A1부터 0xFEFE까지의 영역(94x94, 8,836글자)만을 사용하였다.

 

그런데 8,836개의 글자 중에서 부호 및 일본, 러시아 글자에 1,598자를, 한자에 4,888자를 할당하여 한글에는 2,350자밖에 사용할 수 없었다. 2바이트 완성형의 문제는 1990년에 방영된 MBC 드라마 제목 '똠방각하'를 표현하지 못하면서 불거졌는데, 완성형으로는 '똠'을 표현할 수 없어 한글의 제자 원리를 무시한 방식이라는 비난을 받았다고 한다.

 

이러한 문제를 해결하기 위해 1992년에 KS C 5601 표준안에 완성형/조합형을 모두 표준으로 지정하였으나, 표준 조합형은 기존에 사용되던 상용 조합형(KSSM)과 코드가 맞지 않아 거의 사용되지 않았다.

 

1990년대 초반까지 조합형과 완성형이 모두 사용되었지만, 국가 주도의 프로그램, 운영체제에서 완성형을 기본으로 지원하였고, Microsoft Windows 95에서 확장 완성형이 사용됨으로써 조합형은 사장되었다. 현재는 KS C 5601은 KS X 1001로, KS C 5636은 KS X 1003으로 변경되었다. KS X 1003 표준안은 ASCII와 동일하나, 역슬래시()가원화()로 표기되는 것만 다르다.

유니코드

1980년대에 전 세계에 컴퓨터가 널리 보급되고 또한 정보 교환이 일반화되면서 정보의 공유를 위한 문자 코드의 표준화가 절대적으로 필요하게 되었다. 그래서 1984년경부터 전 세계의 모든 국가에서 사용하고 있는 문자들을 하나의 단일 코드 체계로 통합하려는 움직임이 일어났다.

이러한 움직임은 두 갈래로 일어났는데, 하나는 국제표준화기구ISO가 추진해 온 ISO 10646의 제정의 움직임이고, 또 하나는 미국의 컴퓨터 업체, 예컨대 아이비엠, 애플, 휼렛패커드 등의 업체가 협력하여 추진한 유니코드이다.

 

국제표준화기구ISO가 추진해 온 ISO 10646의 제정의 움직임은 멀티바이트, 실제로는 2바이트 또는 4바이트 코드로 규격화하는 방안이고 하나는 미국의 컴퓨터 업체, 예컨대 아이비엠, 애플, 휼렛패커드 등의 업체가 협력하여 추진한 유니코드는 16비트로 구성되는 문자 공간65,536자에 전 세계의 모든 문자를 배당하려고 한 것이다.

 

그러다가 1993년에 국제표준화기구에서 추진하고 있던 국제 표준화 규격인 유시에스UCS, Universal Multiple-Octet Coded Character Set로 단일화되었디.

 

유니코드는 2바이트로서 전 세계의 모든 문자를 표현할 것을 목표로 하여, 65,536자의 코드 영역을 사용하고 있다. 그래서 유니코드는 전 세계의 모든 언어를 표현하는 문자를 포함하고 있으며, 16비트의 길이로 효율성을 높이고 문자 코드의 중첩을 최소화하게 되었다.

UTF 인코딩

UTF(UCS Transformation Format) 인코딩이란 문자를 유니코드 값을 컴퓨터에 저장하기 위해 변환하는 과정이다. 가장 많이 사용하는 인코딩 방식은 UTF-8이다.

 

UTF-8 인코딩 방식은 ASCII와 호환이 가능하면서 모든 유니코드 문자 표현이 가능한 장점이 있지만, 한글은 2바이트나 3바이트를 사용하는 가변길이 인코딩이기 때문에 저장공간 낭비의 단점이 있다. 

참고문서

https://cafe.naver.com/kmuir

https://www.korean.go.kr/nkview/nklife/1990_2/21_8.html

http://09robotics.blogspot.com/2016/10/blog-post_52.html

https://d2.naver.com/helloworld/19187

https://jeongdowon.medium.com/unicode%EC%99%80-utf-8-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0-b6aa3f7edf96

'ComputerScience > ComputerScience' 카테고리의 다른 글

[CS] 시간 복잡도란  (1) 2024.03.13