unicodevariable-lengthcharacter-set

UTF-8이란 무엇인가요?

예상 시간
6
30초 답변

꼬리질문

조금 더 깊게 물어본다면

답변 뒤에 이어질 수 있는 질문들을 하나씩 열어볼 수 있어요.

Unicode code point는 무엇인가요?

부가 설명

Unicode는 전 세계 문자 각각에 고유 번호를 붙인 표준입니다. 이 번호를 code point라고 하며, A는 U+0041, 는 U+AC00, 😀는 U+1F600입니다. code point는 번호일 뿐, 메모리나 파일에 실제로 어떻게 저장할지는 정하지 않습니다. Unicode의 범위는 U+0000 ~ U+10FFFF로, 17개 평면(plane) × 65,536개 슬롯 = 약 110만 개입니다. U+10FFFF가 상한인 이유는 UTF-16의 surrogate pair가 표현할 수 있는 최대치가 그 범위이기 때문입니다.

UTF-8은 code point를 바이트열로 변환하는 규칙입니다. code point 범위에 따라 바이트 수가 달라집니다.

범위바이트 수
U+0000 - U+007F1바이트영문, 숫자, 특수문자
U+0080 - U+07FF2바이트라틴 확장, 아랍어
U+0800 - U+FFFF3바이트한글, 한자
U+10000 - U+10FFFF4바이트이모지, 희귀 문자

ASCII(U+0000-U+007F)가 1바이트로 그대로 유지되기 때문에, 기존 ASCII 파일을 UTF-8로 읽어도 동일하게 동작합니다.

웹에서 UTF-8이 표준이 된 결정적 이유는 ASCII와 완전히 호환된다는 점입니다. HTTP 헤더와 HTML 태그가 ASCII 기반이라, 기존 서버와 파서를 수정 없이 그대로 쓸 수 있었습니다.

UTF-16은 A(0x41)를 00 41로 저장하는데, 앞에 붙는 00이 null byte라서 C로 짠 대부분의 프로그램이 문자열의 끝으로 오해합니다. 웹 초창기 인프라가 전부 C 기반이었으니 UTF-16은 처음부터 선택지가 아니었습니다. EUC-KR 같은 국가별 인코딩은 특정 언어만 담을 수 있어 전 세계 문자를 하나의 방식으로 처리하는 건 불가능했고요.

한 줄 정리

UTF-8은 Unicode 문자를 1~4바이트의 가변 길이 바이트열로 표현하는 문자 인코딩 방식입니다.