유니코드란 무엇인가 - 전 세계 문자를 하나로 묶은 글로벌 표준 코드 완전 정리
한글, 영어, 이모지까지 모두 표현 가능한 유니코드의 원리와 UTF-8, UTF-16 차이, 실무에서 자주 마주치는 인코딩 문제 해결법까지 한 번에 정리했습니다.
![]()
웹사이트에서 한글이 깨져서 표시되거나, 다른 컴퓨터로 파일을 옮겼더니 글자가 외계어처럼 보였던 경험이 있으실 겁니다. 이런 문제의 대부분은 문자 인코딩 때문에 발생합니다. 유니코드는 이런 혼란을 해결하기 위해 만들어진 글로벌 표준입니다.
유니코드를 제대로 이해하면 개발자가 아니더라도 파일 저장, 웹페이지 작성, 데이터베이스 관리에서 발생하는 인코딩 문제를 훨씬 수월하게 다룰 수 있습니다.
유니코드란 무엇인가
유니코드(Unicode)는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현하기 위해 만들어진 국제 표준 문자 코드입니다. 1991년 유니코드 컨소시엄에서 첫 버전을 발표했고, 현재 한글, 영어, 한자, 아랍 문자, 그리고 이모지까지 15만 개에 가까운 문자를 정의하고 있습니다.
쉽게 말해, 컴퓨터는 숫자만 이해합니다. 그래서 '가'라는 글자도 내부적으로는 특정 숫자로 저장됩니다. 유니코드는 이 문자와 숫자의 매핑을 전 세계가 공통으로 쓸 수 있게 정해 놓은 약속입니다.
유니코드 이전에는 나라마다, 운영체제마다 서로 다른 문자 코드를 사용했기 때문에 한국에서 만든 파일이 일본 컴퓨터에서 깨지는 일이 일상이었습니다.
유니코드 등장 전 인코딩의 혼란
1980년대까지 컴퓨터는 주로 영어 중심의 ASCII 코드를 사용했습니다. ASCII는 0부터 127까지 128개의 숫자에 알파벳과 숫자, 일부 기호만 담을 수 있었습니다. 한글은 표현할 수가 없었죠.
그래서 각 나라는 자체 인코딩을 만들었습니다.
- 한국: KS X 1001(완성형), EUC-KR, CP949
- 일본: Shift_JIS, EUC-JP
- 중국: GB2312, GBK
- 서유럽: ISO-8859-1(Latin-1)
문제는 같은 숫자가 나라마다 다른 글자를 의미했다는 점입니다. 0xB0A1이라는 숫자가 한국 인코딩에서는 '가'지만 다른 인코딩에서는 전혀 다른 글자로 해석되니, 파일 교환이 사실상 불가능했습니다.
유니코드의 등장
이런 혼란을 끝내기 위해 유니코드 컨소시엄이 결성됐고, '전 세계 모든 문자에 단 하나의 고유 번호를 부여하자'는 목표로 표준을 만들었습니다. 현재 유니코드 16.0(2024년 9월 발표) 기준으로 154,998개의 문자가 등록되어 있습니다.
UTF-8, UTF-16, UTF-32 차이점
유니코드는 '문자에 번호를 매기는 규칙'이고, UTF는 '그 번호를 컴퓨터에 어떻게 저장할지에 대한 규칙'입니다. 같은 유니코드 문자라도 어떤 UTF 방식을 쓰느냐에 따라 저장되는 바이트 수가 달라집니다.
| 인코딩 | 최소 크기 | 최대 크기 | 주 용도 |
|---|---|---|---|
| UTF-8 | 1바이트 | 4바이트 | 웹, 이메일, 대부분의 파일 |
| UTF-16 | 2바이트 | 4바이트 | Java, Windows 내부, JavaScript |
| UTF-32 | 4바이트 | 4바이트 | 고정 크기 필요한 시스템 |
UTF-8이 가장 널리 쓰이는 이유는 영어 같은 ASCII 호환 문자를 1바이트로 처리해서 공간 효율이 좋고, ASCII와 완벽하게 호환되기 때문입니다. 한글은 UTF-8에서 보통 3바이트를 차지합니다.
유니코드 코드 포인트와 문자 표현 방식
유니코드에서 각 문자에 부여된 고유 번호를 코드 포인트(Code Point)라고 부릅니다. 표기법은 'U+' 뒤에 16진수 숫자를 붙입니다.
- 'A' - U+0041
- '가' - U+AC00
- '한' - U+D55C
- 웃는 얼굴 이모지 - U+1F600
한글의 유니코드 구조
한글은 두 가지 방식으로 유니코드에 들어가 있습니다. 첫째는 완성형 한글 영역(U+AC00 ~ U+D7A3)에 11,172자가 들어 있고, 둘째는 자모 분리 영역(U+1100 ~ U+11FF)에 초성과 중성, 종성이 따로 정의돼 있습니다.
그래서 같은 '가'라도 완성형('가' = U+AC00)과 조합형('ㄱ' + 'ㅏ' = U+1100 + U+1161) 두 가지 방식으로 표현될 수 있습니다. 맥OS에서 만든 한글 파일명이 윈도우에서 이상하게 보이는 이유가 보통 이 차이 때문입니다.
실무에서 만나는 유니코드 문제와 해결법
유니코드 관련 문제는 실무에서도 자주 발생합니다. 대표적인 사례와 해결법을 정리합니다.
1. 파일 글자가 깨질 때
메모장에서 한글이 '?????'로 보인다면 인코딩 불일치 문제입니다. 파일 저장 시 인코딩을 'UTF-8'로 통일하고, 텍스트 에디터(VS Code, Notepad++)에서 'Reopen with Encoding' 기능으로 다른 인코딩으로 다시 열어보면 원인을 빨리 찾을 수 있습니다.
2. 데이터베이스 한글 입력 오류
MySQL 등에서 한글이 깨진다면 데이터베이스, 테이블, 컬럼 모두 utf8mb4로 설정해야 합니다. utf8(3바이트)은 이모지를 저장하지 못하므로 반드시 utf8mb4(4바이트)를 써야 합니다.
3. URL에서 한글 인코딩
URL에 한글이 들어가면 자동으로 퍼센트 인코딩으로 변환됩니다. '큰손탐지기'가 URL에서 '%ED%81%B0%EC%86%90%ED%83%90%EC%A7%80%EA%B8%B0'처럼 보이는 게 그 예입니다. 이것은 UTF-8 바이트를 16진수로 표현한 결과입니다.
유니코드 활용 시 주의사항
일상 작업에서도 유니코드를 다룰 일이 많습니다. 예를 들어 웹사이트 운영 시 이미지 파일명에 한글이 들어가면 일부 서버에서 문제가 생기기도 합니다. 이런 경우 이미지 리사이저 같은 도구로 이미지를 처리한 뒤 파일명을 영문으로 바꿔 저장하는 것이 안전합니다.
또한 비밀번호 생성 시 한글이나 특수 유니코드 문자를 포함하면 일부 시스템에서 로그인이 안 되는 경우가 있습니다. ASCII 범위 내에서 안전한 비밀번호를 만들고 싶다면 비밀번호 생성기를 활용하면 호환성 문제를 피할 수 있습니다.
이모지와 정규화
같은 모양의 글자가 코드 포인트는 다를 수 있습니다. 예를 들어 'é'는 단일 문자(U+00E9)로도, 'e' + 액센트(U+0065 + U+0301)로도 표현됩니다. 시스템에 따라 두 'é'가 서로 다르게 판정될 수 있는 이유입니다. 이런 경우 유니코드 정규화(NFC, NFD)를 적용해 표현을 통일해야 합니다.
유니코드를 정확히 이해하고 있으면 파일 깨짐, 데이터베이스 문자 오류, URL 처리 문제 등 디지털 환경의 답답함을 빠르게 해결할 수 있습니다. 오늘부터는 파일을 저장할 때 인코딩을 UTF-8로 통일하는 습관부터 만들어 보시기 바랍니다.