1. 문자 인코딩의 구성 요소
1. 들어가며
간략하게 논리적으로 정리만 가능하고 상대방에게 설명할 수 있을 정도로만 합시다.
문자인코딩은 3가지 구성요소로 나눌 수 있다.
- 문자 집합
- 문자 인코딩 형태
- 문자 인코딩 구조
하나씩 정리해보겠다.
2. 문자 집합 또는 문자 셋(Charset Set) or CCS(Coded Character Set)
"글자들의 집합을 정의한 것"
영어를 예로 들어보자.
- 영어에서 알파벳은 문자집합이라고 할 수 있다.
- 위의 (1)의 문자집합에 정수값을 부여하면 부호화된 문자코드 - CCS(Coded Character Set)이라고 불린다.
- 부호화된 문자코드(CCS)는 그 값을 직접 사용하기도 하고, 인코딩해서 값을 변환해서 사용하기도 한다.
- ASCII 코드는 문자집합과 그에 부여된 코드를 그대로 사용하는 예로 볼 수 있다.
유니코드를 예로 들어보자.
- 유니코드는 전세계의 문자들을 문자집합으로 가진다.
- 유니코드는 각각의 문자 코드를 가지고 있다.
- 유니코드는 전세계의 문자들이 추가되고 있으므로 문자집합이 변하며 확장하고 있다. 이는 문자집합의 특성 중 하나다. 영어의 예에서 ASCII방식과 다른점이다.
- 유니코드는 이 문자코드를 인코딩해서 사용하는 여러가지 방식이 있다.
3. 문자 인코딩 형태(Character Encoding Form)
- 문자 집합에 부여된 문자 코드들을 그대로 사용하기도 하지만, 인코딩하여 다른 값으로 변환하여 사용한다.
- 인코딩은 각각 다른 특성을 가지고 목적에 따라서 달리 사용할 수 있다.
- 유니코드를 문자집합으로 사용하면서 인코딩 차이점에 대해서 이해하는 것이 중요해졌다.
- 문자 인코딩 형태는 각각의 규격이 있으며 이 값을 해석하면 결국 문자코드가 되고 이것을 이용해서 문자를 표현하게 된다.
4. 문자 인코딩 구조(Character Encoding Scheme)
- 문자 인코딩 구조는 연속된 바이트를 표현하는 방법이다. 문자에서는 엔디언을 통해서 표현한다.
- BOM(Byte Order Mark)라는 값을 사용해서 문자열의 바이트 순서를 명시해 줄 수 있다.
- 널리 쓰이는 UTF-8의 경우 BOM을 명시하지 않아도 되며, 명시 하는 것을 추천하지 않는다.
- 엔디언은 컴퓨터의 메모리와 같은 1차원의 공간에 여러개의 연속된 대상을 배열하는 방법을 뜻하며, 바이트를 배열하는 방법윽 특히 Byte Order라고 한다.
- 엔디언은 큰 단위가 아에 나오는 빅 엔디언, 작은 단위가 앞에 나오는 리틀 엔디언으로 나눌 수 있으며, 둘다 속하지 않거나, 둘다 지원하는 경우를 미들 엔디언이라고 부르기도 한다.
참조 자료
다시 읽을 때 위의 대략적인 흐름을 가지고 아래 자료들을 다시 순회하는게 좋겠다.
- 한글 위키피디아: 문자 인코딩 - https://ko.wikipedia.org/wiki/문자_인코딩
- 영어 위키피디아: character encoding - https://en.wikipedia.org/wiki/Character_encoding
- 한글 위키피디아: 엔디언 - https://ko.wikipedia.org/wiki/엔디언
- 영어 위키피디아: utf-8 - https://en.wikipedia.org/wiki/UTF-8
- 나무위키: 인코딩 - https://namu.wiki/w/인코딩
- 유니코드 스탠다드 6.0 - https://www.unicode.org/versions/Unicode6.0.0/ch02.pdf
- 여기서 utf-8의 BOM에 대한 정보를 검색할 수 있다.
- 영어 위키피디아: unicode - https://en.wikipedia.org/wiki/Unicode#UTF
기타
이야기1
- 아스키코드는 알파벳을 충분히 표현했지만 다양한 국가에서 컴퓨터를 사용하면서 각국의 언어를 표현하려고 했다.
- 알파벳 이외의 특수문자들 영역에 각국의 문자를 넣어서 사용했다.
- 그러나 이 방식은 문제점이 있었는데
- A국가에서 특수문자영역을 사용해서 화면 출력을 꾸몄을 때, B국가에서는 해당 국가의 문자로 출력되는 문제가 있었다.
- 하나의 페이지에서 여러 국가의 문자를 표현하는 것은 불가능했다. 현재를 예로 들면 유투브 댓글 같이 여러 국가의 댓글을 표현할 수 없는 것이다.
- 이것은 문자 집합의 문제이기도 하고, 해당 영역이 매우 협소해서 발생한 문제이기도 하다.
- 각국의 다양한 문자를 하나의 페이지에서 올바르게 출력하는 방법을 강구하기 시작했다.
- 유니코드는 전세계의 모든 문자를 표현하고 다루기 위해서 만들어졌다.
- 유니코드를 사용하면 한 페이지에서 각국의 문자들을 충돌 없이 표현할 수 있다.
이야기2
- 웹 프로그래머 관점에서 경험을 정리해보면
- 문자 인코딩을 학습해야 하는 이유는.
- EUC-KR과 같은 과거의 문자열들에서 왜 UTF-8로 변경되었는지 알 수 있다.
- 해당 문자열을 변환해야 하는 경우가 있었는데, 그 작업을 왜 수행해야 하는지. 문제가 발생하면 어떤 부분을 살펴보아야 하는지 위의 지식으로 추측해 볼 수 있을 것이다.
- 문자 인코딩 방식에 따라서 저장 크기가 달라질 수 있으므로 대용량 텍스트를 처리할 때 최적화에 쓸 수 있을 것이다.
'코딩이야기 > 웹알아보기' 카테고리의 다른 글
[HTTPS] 0. HTTPS 개념적으로 이해하기 (0) | 2019.05.20 |
---|---|
[HTTPS] 3. TLS/SSL 소개 (0) | 2019.05.18 |
[HTTPS] 2. 이해를 위한 관련용어 보기 (0) | 2019.05.18 |
[HTTPS] 1. HTTPS에 이해하기 (0) | 2019.05.17 |
springboot jdbc 미 설정시 발생 에러 (0) | 2018.09.28 |