[RestAPI 개발기] 5. UTF-8

편준민's avatar
May 08, 2025
[RestAPI 개발기] 5. UTF-8
💡
유니코드를 위한 가변 길이 문자 인코딩 방식이다.
  • 유니코드 - 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준이다.
notion image
컴퓨터는 문자를 받을 때에 Byte로 받는다. 이때에 인코딩 또는 디코딩을 통해서 컴퓨터에게 문자를 주거나 받거나 할 수 있다.
  • 인코딩이란? 사람이 보내고자 하는 데이터를 컴퓨터가 이해 할 수 있는 언어로 바꿔 주는 것이다.
  • 디코딩이란? 컴퓨터가 데이터를 줄 때사람이 이해 할 수 있는 언어로 바꿔주는 것이다.
 
대표적인 예시로는 모스부호가 있다. 우리가 A를 보내게 되면 인코딩을 하여 컴퓨터에게 0110을 전달 해준다. 이때 0110은 우리가 이해 할 수 없는 언어이다. 인코딩과 디코딩을 하기 위해서는 모스부호를 분석하기 위한 표가 필요하다.
notion image
 
모스부호를 해석하는 것은 어려운 것이 아니고, 표를 직접 하나하나 찾아봐야 하기때문에 귀찮은 일이다. 우리는 이럴 때 컴퓨터에게 시키면된다. 이것을 최초로 미국에서 시작을 하였고, 분석을 위한 표의 이름은 아스키 코드표 라고 하였다. 하지만 아스키 코드표는 미국에서만 사용이 가능하기 때문에 각 나라에서는 해당 나라에 필요한 분석표가 따로 필요하였다. 한국에서는 완성형 문자를 표로 만들어 이름을 EUC-KR이라고 하였다. 완성형 문자에 단점으로는 해당 분석표에 없는 경우에는 표현이 불가능하다. 예시로 뷁 같은 단어가 있다. 이런 단어는 분석표에 없기 때문에 표시를 못하는데, 그러려면 분석표를 업데이트 해야한다. 하지만 이것은 개인이 수정이 불가능하기 때문에 해당 단어를 표시 할 수 없는 단점이 있다.
notion image
이제 각 나라에서 통신을 하려고 할 때에 문제가 생긴다. 만약 한국과 미국에서 서로 통신을 하려고 할 때에 한국에서 ‘안녕’이라는 글자를 보낼 때, 완성형 문자한 글자에 2Byte를 잡고 데이터를 보낸다. 그치만 미국에서 사용하는 분석표는 아스키 코드표1Byte를 읽는다. 한글을 1Byte로 끊어 읽게 되면서 미국에서는 한국에서 보낸 글자가 깨져서 화면에 출력이 되는 것이다. 만약 미국과 통신을 하기 위해서아스키 코드표를 받아야지 아스키 코드표에 맞는 데이터를 보내고, 아스키 코드표에 맞는 데이터를 받는다.
그렇지만 전 세계와 통신을 한다고 생각해보면? 전세계의 분석표를 받아서 통신을 할 때마다 분석표에 맞는 방식으로 데이터를 보내거나 받아야한다. 이런 문제를 해결하기 위해 유니코드(국제 표준 표)를 만들었다.
notion image
 
유니코드는 기본적으로 4Byte 문자 체계이다. 미국에서 아스키 코드를 유니코드로 인코딩을 하게 되면 3Byte가 낭비가 된다. 이런 것을 해결하기 위해서 유니코드는 가변 코드로 1~4Byte를 동적으로 표현한다.
notion image
한글을 UTF-8 방식으로 인코딩 할 때에는 완성형 문자가 아닌 조합형 문자를 사용한다. 이 방식은 ㅇ / ㅏ / ㄴ 처럼 자음 / 모음 / 받침을 각각 조합하는 형태이다. 이 방식을 사용하는 이유는 예상치 못한 단어나, 옛한글 같은 경우에 표현이 되지 않을 경우가 있기 때문이다. 조합형 문자를 사용하게 되면 완성형 문자와 섞어써도 데이터 출력이 편하다.
예시로 안녕을 조합형으로 나누어보면 ㅇ / ㅏ / ㄴ / ㄴ / ㅕ / ㅇ 이다. 이러한 경우에는 UTF-8로 디코딩할 때에 1 byte씩 뽑아서 조합형 문자이다 하면, 3 byte씩 조합하기 때문에 안녕 이라는 글자로 정상 출력이 된다.
만약 안녕a 라는 글자가 나오게 되면 a는 아스키코드표에 완성형 문자이기 때문에 그대로 1byte를 차지하게 되며 안녕a 라는 글자로 정상 출력 된다.
 
지금 모든 세상은 유니코드를 위해서 UTF-8 설정을 해주어야 내가 보내는 데이터와 받는 데이터가 정상적으로 각 나라에 필요한 문자로 출력된다!
notion image
Share article

YunSeolAn