티스토리 뷰
전기 신호로 데이터를 전달하는 컴퓨터에서 어떻게 데이터를 표현할 수 있을까요?
전기 신호를 나타내기 위해 있으면 1
, 없으면 0
으로 데이터를 인식합니다. 그렇기에 0과 1은 데이터를 나타내는 최소 단위이며 이를 비트(bit)라고 부릅니다.
하지만 비트라는 단위는 우리가 사용하는 문자를 표현하기에는 너무 작기에 여러 개를 합쳐 하나의 단위로 사용하고 있습니다. 여러 개의 비트를 합친 단위를 바이트(byte)라고 합니다. 일반적으로 8개를 합쳐 하나의 바이트라고 사용하고 있습니다.
하나의 비트는 0과 1의 2가지 정보를 표현할 수 있기에 8개의 비트를 합친 바이트는 2^8 = 256가지 정보를 표현할 수 있습니다. 표현할 수 있는 정보에 우리가 사용하는 문자를 매핑시켜 만든 규칙이 바로 아스키코드와 유니코드입니다.
인코딩과 디코딩
아스키코드와 유니코드를 알아보기에 앞서 인코딩과 디코딩에 대해 알아보도록 하겠습니다.
인코딩은 문자 인코딩 또는 텍스트 인코딩으로 표현할 수 있는데 사용자가 입력한 문자나 기호를 컴퓨터가 알 수 있는 신호로 만드는 것을 의미합니다. 'A'라는 문자를 입력했을 때 컴퓨터는 이 문자를 이해하지 못할뿐더러 'A' 그대로 저장되지 않기 때문에 컴퓨터가 알 수 있는 신호로 바꿔줘야 합니다. 이 과정이 인코딩입니다.
디코딩은 인코딩과 반대로 컴퓨터가 알고 있는 신호를 사람이 이해할 수 있는 문자로 만드는 것을 의미합니다. 컴퓨터가 저장하고 있는 값을 그대로 가져오게 된다면 사용자는 이를 이해하지 못하기에 디코딩을 통해 이해할 수 있는 문자로 바꿔줘야 합니다.
여기서 중요한 점은 인코딩 규칙에 알맞게 디코딩을 해주어야 의도했던 원래의 값을 가져올 수 있습니다. 1번 인코딩 규칙은 A를 65로 저장하고 2번 인코딩 규칙은 B를 65로 저장한다고 했을 때, 1번으로 인코딩한 값을 2번 규칙으로 디코딩하게 된다면 의도와 다른 값을 가져와 문제가 발생할 수 있습니다.
아스키(ASCII)
ASCII는 'American Standard Code for Information Intercharge'의 약자로 영문 알파벳을 사용하는 대표적인 문자 인코딩 규칙입니다.
7bit를 사용해서 규칙을 정의하였는데, 처음 32개의 문자는 제어를 위해 사용되는 제어 문자로 출력할 수 없고 33번째 이후 문자들은 출력할 수 있는 문자로 기호, 숫자, 영어 소문자, 영어 대문자로 이루어져 있습니다. 7개의 비트를 사용했기에 2^7 = 128가지 정보를 표현할 수 있습니다.
확장 아스키
일반적으로 데이터는 바이트 단위로 다뤄지기에 아스키는 1bit가 남게 됩니다. 남는 비트를 활용해서 추가로 문자를 표현한 것이 확장 아스키입니다. 국가마다 언어가 다르기에 필요에 따라 다르게 정의해서 사용하게 됩니다.
국가에 따라 여러 버전의 확장 아스키가 필요하게 되었고 국가별로 규칙을 작성해 둔 것을 코드 페이지라고 합니다. 데이터 통신할 때 어떤 규칙으로 인코딩해두었는지 같이 알려준다면 디코딩 시 알맞게 번역하여 이해할 수 있게 되는 것입니다.
유니코드
인터넷이 발전함으로 다른 언어를 사용하는 컴퓨터 간 문서교환이 활발해지자 많은 표준을 처리하기에 어려움이 생겼고 이를 해결하기 위해 전 세계의 모든 문자를 정의하기 위한 표준 코드가 필요해졌습니다. 그 표준이 바로 유니코드입니다.
1바이트에서 용량을 확장하여 2바이트로 처음에 표현하려고 했으나 이마저도 부족하였고 21bit로 확장하게 되었습니다. 2바이트에서 새로 추가된 문자들은 보충 문자라고 하는데 이 문자들을 표현하기 위해서는 char
타입이 아닌 int
타입을 사용해야 합니다.
유니코드는 유니코드에 포함하고자 하는 문자들을 먼저 정의하였는데 이것을 유니코드 문자 셋이라고 합니다. 이 문자 셋을 인코딩하는 것이 유니코드 인코딩입니다. 유니코드 인코딩에는 받은 데이터로부터 얼마나 읽어야 하는지 차이에 따라 UTF-8
, UTF-16
, UTF-32
등 여러 가지 종류가 존재합니다.
UTF-8
가장 많이 사용되는 유니코드 인코딩으로 하나의 문자를 1~4byte의 가변크기로 표현합니다. 처음 128문자는 아스키와 같다는 특징을 가지고 있습니다.
영문과 숫자는 1byte, 한글은 3byte로 표현됩니다. 가변크기로 표현할 수 있다는 장점으로 인해 문서의 크기가 상대적으로 작아지고 전송속도가 중요한 인터넷에서 유리합니다. 그렇기에 세계적으로 널리 사용되고 있습니다.
UTF-16
모든 문자를 동일한 2byte의 고정크기로 표현합니다. UTF-16도 처음 128문자는 아스키와 같다는 특징을 가지고 있습니다.
모든 문자의 크기가 동일하기에 문자를 다루기 편하다는 장점을 가지고 있지만 영어와 숫자 또한 2byte로 표현되기에 문서의 크기가 커진다는 단점이 존재합니다.
'Etc' 카테고리의 다른 글
[Web] 웹 서버(WS)와 웹 애플리케이션 서버(WAS) (4) | 2023.04.15 |
---|---|
[MyBatis] org.apache.ibatis.binding.BindingException 해결 (0) | 2022.12.04 |