[CS] Chapter 2-2. 데이터_0과 1로 문자를 표현하는 방법
📚 출처: 강민철 지음, 혼자 공부하는 컴퓨터구조 + 운영체제
🧾 키워드
- 문자 집합(character set), 문자 인코딩(encoding), 문자 디코딩(decoding)
🔤 문자 집합이란?
- 문자 집합(character set): 컴퓨터가 인식하고 표현할 수 있는 문자들의 모음
- 집합에 없는 문자는 애초에 “알아볼 수 없음”
- 컴퓨터는 0과 1만 이해하므로, 문자를 0과 1로 바꾸는 과정이 필요함
- 인코딩(encoding): 문자 -> 0과 1(비트열)로 변환해 컴퓨터가 이해할 수 있게 함
- 디코딩(decoding): 0과 1(비트열) -> 문자로 변환해 사람이 읽을 수 있게 함
예시(개념 흐름)
문자 "박" → [인코딩] → 0과 1의 비트열 → [디코딩] → 문자 "박"
🌐 다양한 문자 집합과 인코딩
1) ASCII(아스키 코드)
- 초기의 대표적 문자 집합/인코딩
- 영어 알파벳, 아라비아 숫자, 일부 특수문자만 포함
- 7비트로 표현 -> $2^7 = 128$개 문자
- 확장 아스키(8비트)는 256개까지 확장하지만 지역/플랫폼별 상이함
2) EUC-KR (한글 완성형 인코딩)
- 한글을 완성형으로 다루는 대표 인코딩(한국어 중심의 레거시 인코딩)
- 완성형: 초 $\cdot$ 중 $\cdot$ 종성을 조합해 만들어진 “완성된 글자” 각각에 코드값을 부여
- (참고) 조합형: 초 $\cdot$ 중 $\cdot$ 종성 코드들을 조합해 글자를 구성
- EUC-KR은 한글 완성형 인코딩 방식으로 약 2,350자 수준의 완성형 한글만 표현(모든 조합 불가)
- 이를 보완하려고 마이크로소프트가 CP949(=Windows-949) 를 확장했지만, 여전히 전 범위 표현/호환성에 한계가 있음
3) 유니코드(Unicode)
- 전 세계 거의 모든 문자에 유일한 번호(코드 포인트) 를 부여하는 표준
- 코드 포인트 표기: 예) U+AC00(가)
- 유니코드 “문자 목록”을 실제 바이트로 저장/전송하기 위해 여러 인코딩 방식을 사용
- 대표: UTF-8, UTF-16, UTF-32
대표 인코딩 비교(핵심만)
인코딩 | 길이 | 특징 | 한글(평균) |
---|---|---|---|
UTF-8 | 가변(1~4바이트) | 아스키 1바이트 그대로 유지, 웹 표준, 전 세계적 호환성 최고 | 3바이트 |
UTF-16 | 가변(2 또는 4바이트) | 동아시아 문자 밀집 영역에 효율적, 엔디안/BOM 고려 | 대개 2바이트 |
UTF-32 | 고정(4바이트) | 인덱싱은 단순하나 공간 비효율 | 4바이트 |
🧠 용어 정리(헷갈리기 쉬운 개념)
- 코드 포인트(code point): 유니코드가 문자에 부여한 번호(U+XXXX)
- 코드 유닛(code unit): 인코딩에서 사용하는 최소 단위(UTF-8의 1바이트, UTF-16의 2바이트 등)
- 엔디안(Endianness): 2바이트 이상 단위를 저장할 때 바이트 순서(리틀/빅 엔디안)
- 주로 UTF-16/UTF-32에서 중요, UTF-8은 엔디안 영향 없음
- BOM(Byte Order Mark): 바이트 순서를 알리기 위한 서명 역할(UTF-8에서는 선택 사항)
✅ 한눈에 요약
- 문자 집합: 컴퓨터가 다룰 수 있는 문자들의 목록
- 인코딩/디코딩: 문자 <-> 비트열(0과 1) 변환 과정
- EUC-KR/CP949: 한글 완성형 기반(범위 한계와 호환 이슈 존재)
- 유니코드 + UTF-8: 전 세계 표준, 웹/크로스플랫폼에 가장 안전한 선택
- 실무에서는 UTF-8로 통일하고, 전 구간 설정을 일관되게 유지할 것
💭 느낀점(예시)
숫자에 이어 문자가 어떻게 0과 1로 바뀌는지 이해하니, 파일 $\cdot$ 웹 $\cdot$ DB 등에서 “문자 깨짐”이 왜 생기는지 바로 연결되어 보였다. 앞으로는 UTF-8을 기본으로 쓰고, 외부 시스템과 연동할 때 인코딩 스펙을 먼저 확인하는 습관을 들여야겠다.
또한 DB 분석할때 utf-8로해도 깨지고 euc-kr로 해도 데이터가 깨져서 불러왔던 적이
그 당시에는 일단 잘 불러와지니까 일단쓰고 나중에 알아봐야지 하고 생각만하고 지나쳤는데 이번 계기를 통해서 문자 집합이 어떤식으로 발전해서 현재 내가 DA할때 UTF-8, CP949를 자주 사용하는지 알게 되면서 흥미로웠음!
Leave a comment