반응형

개요

 어떠한 값에 대해서 약속한 값을 코드라고 표현 한다. 컴퓨터에서 문자 즉, 글자를 표현 할 경우 실제로 글자를 그리는 것이 아니라 이미 각 문자에 대한 그림 즉, 폰트에 해당하는 코드 값을 이미 약속해서 컴퓨터에 저장해 놓고 문장은 숫자 코드들을 보내서 대응 되는 문자를 표시하는 방식으로 동작한다.

이는 모르스 부호 같은 초기 신호 체계에서도 2가지 신호(연결됨과 끊어짐)를 가지고 알파벳으로 치환하여 메시지를 보내는 것과도 같다.

 영어에 익숙하다면, 코드로 축약하는 것을 인코딩 코드를 문자 등으로 해석하는 것을 디코딩의 의미와도 동일하다.

 문자열을 언급하기 전에 문자 코드에 대해서 언급하는 이유는 파이썬과 같은 고도화 된 프로그래밍 언어를 처음 접한 입문자들은 종종 글자를 그대로 사용되는 것으로 생각하는 사람이 있기 때문에 이러한 문자 code 에 대해서 다루게 되었다.

역사

초기 코드

전자 기기로 구성된 컴퓨터의 상용화는 미국에서 먼저 진행 되었다. 때문에 미국 기업(IBM) 입자에서 글자를 표현하기 위해 코드를 구성했을 때 7개의 bit(비트)로 구성이 가능했다. 이는 특수기호까지 포함한 코드였다.

ASCII 코드

컴퓨터와 각종 통신장비의 제작으로 각 제조사별로 코드를 만드는 것보다는 표준을 정의하여 사용하게 되었다. 이를 America Standard Code for Information Interchange(미국 정보 교환 표준 부호)로 각 글자머리를 따서 ASCII가 되었다. 이 ASCII는 7 bits로 구성이 되어 있다.

Byte의 탄생

 사실상 초기 문자 하나를 표현할 수 있는 단위로 비트와 구분하기 위해 사용되었다. 용어의 최초의 사용은 1956년 IBM에서 설계과정에서 표기한 것이 오늘날 정착 되었다고 한다.

오늘날은 1 Bytes 는 8 bits로 정착이 되었지만, 초기에는 7 bits, 8bits 등 여러개의 bit를 묶어서 혼용하여 사용하였다. 하지만 오늘날에도 종종 저수준 기기 제어시 신호가 7 bit로 된 회로를 볼 수 있다.

 정보 통신 분야에서는 bytes의 이러한 모호성을 배제하기 위해 정확하게 8 bits를 의미하는 옥텟(octet)이라는 단위를 사용한다.

UNICODE

컴퓨터의 사용이 전세계로 확산됨에 따라서 전세계의 모든 문자와 기호를 표현하기 위한 표준 작업이 진행이 되었고 이를 표현한 것이 UNICODE라 한다. UNICODE 포멧으로 UTF-8, UTF-16, UTF-32 등이 있다. 이중 현재 널리 사용되고 있는 것은 가변형인 UTF-8 이다.

UTF-8이 널리 사용되기 이전에는 각 회사별로 독자적인 국가 언어 코드를 만들어서 사용했었다. 예를 들어 일본어로 발매된 Windows 용 소프트웨어의 경우 따로 한글화를 지원하지 않는다면, 한글 Windows에서 사용할 수 없다.

유니코드가 정착화 되기 이전의 경우 영문으로 발매된 게임 소프트웨어를 동아시아 계열의 한자나 한글로 번역하는 것이 결코 쉽지 않음을 예상할 수 있다. MS사의 Windows 10 이전의 경우 국가별로 독자적인 방식으로 2 bytes로 영어와 혼용을 표기하였기 때문에 해당 운영체제 내에서 응용프로그램을 개발을 할 경우 다른 나라 언어로 번역을 지원할 때 지금보다 더 많은 어려움이 따랐었다. 과거(Windows 10 이전)에 윈도우즈에서 프로그래밍을 하신분은 EUC-KR 이라는 포멧을 들어 본적이 있을 것이다.

UTF-8

 인터넷 브라우저 등 가장 널리 사용되고 있는 가변형 유니코드이다. ASCII 코드에서는 7 bits만 사용하기 때문에 사용하지 않는 비트를 사용해서 하나의 문자를 인식하는 크기를 가변으로 지정한다. 아래와 같은 방식을 통해서 최대 4 bytes를 한문자로 인식을 하기로 규약되어 있다.

[0][x][x][x] [x][x][x][x] --> 아스키 코드

[1][1][0][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 2 bytes

[1][1][1][0] [x][x][x][x], [1][0][x][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 3 bytes

[1][1][1][1] [0][z][z][z], [1][0][z][z] [x][x][x][x], [1][0][x][x] [x][x][x][x], [1][0][x][x] [x][x][x][x] --> 4 bytes

4 bytes 에서 z로 표현된 영역은 서로게이트라는 UTF-16 에서 등장한 개념이다. 이는 글자를 BMP 라는 맵형태로 관리하는데, 충분하지 않기 때문에 보조값을 의미한다. 보조문자 영역으로도 불린다.

이 문자 코드로 인간이 사용하는 다양한 문자가 등록 되어 있고, 심지어 현재 인간이 사용하지 않는 문자도 포함되어 있다. 여담이지만, 코드중 가장 점유율이 높은 문자는 한자이다. 그 다음이 한글이다. 한글의 점유율이 높은 이유는 하나의 문자 즉, 조합된 문자들을 코드로 넣어놓았기 때문이다.

문자는 코드

 이로써 컴퓨터는 숫자 값 뿐만 아니라 문자를 저장 할 때 문자를 직접 저장하는 것이 아니라 미리 정의 되어 있는 코드로 저장을 한다. 때문에 우리가 지금 이 글도 눈으로 디코딩된 문자를 보고 있으나 실제로 저장되어 있는 것은 숫자로 된 코드이다. 그리고 이러한 코드 덕에 적은 용량으로 많은 정보를 저장하고 표기할 수 있다.

반응형

'Python > 배경이 있는 파이썬' 카테고리의 다른 글

리스트(list)  (0) 2024.04.27
문자열(str)  (1) 2024.04.27
숫자형(int, float)  (0) 2024.04.24
변수(variable)와 상수(constant)  (0) 2024.04.23
개발 환경 만들기  (0) 2024.04.22
반응형

Linux CentOS 7 : MariaDB 문자 설정

문자설정 배경

 MySQL 시절부터 기본설정이 Latin으로 되어 있어서 한글을 입력할 경우 깨지는 경우가 있었다. 때문에 이러한 문제점을 해결하기 위한 문자셋 설정이 필요하다. 현재 전세계 언어를 지원하는 가변 문자셋으로 utf8를 거의 표준처럼(그리고 잠정적인 표준) 사용하고 있기 때문에 이 설정으로 해야 한다.


문자셋 확인

 MariaDB로 로그인이 된상태에서 status를 입력하면 문자셋을 확인할 수 있다. 과거에는 기본적 설정으로 Latin으로 주로 되어 있었는데 요즘에는 server, client 일부만 Latin으로 설정되어 있다.


기본문자셋 설정

 대부분 인터넷에 있는 설정을 확인을 해보면 /etc/my.cnf 파일에서 [mysqld]항목을 수정하도록 되어 있다. 하지만, 해당 파일일을 내용을 보면 [mysqld]항목이 아예 없고 대신 /etc/my.cnf.d 폴더에서 설정파일들을 읽어도록 되어 있는 것을 확인 할 수 있다.

 따라서 이제는 /etc/my.cnf.d/ 항목중에서 적합한 파일을 수정해야 한다. 주로 server쪽 문자셋을 수정해야 하므로 /etc/my.cnf.d/server.cnf 항목을 수정하려고 열어보자. 이 파일안에 우리가 수정하고자 하는 [mysqld]를 찾을 수 있다.

vi /etc/my.cnf.d/server.cnf

파일에서 [mysqld]밑에 문자셋 설정을 추가한다.

# 생략
[mysqld]
init_connect="SET collation_connection=utf8_general_ci"
init_connect="SET NAMES utf8"
character-set-server=utf8
collation-server=utf8_general_ci
# 생략


 문자셋 설정을 하고 나서 MariaDB를 재시작하자.

systemctl restart mariadb


주의 : 종종 재시작이 안되는 경우가 있는데, 이럴경우 침착하게 방금수정한 설정을 삭제한뒤 다시 시도해 본다. 다시 시도했을 때 정상작동되는 경우 오타가 있을 가능성이 크다.

참고자료

 대부분 자료는 각 설정 항목마다 기본문자셋을 설정하지만, 현재는 그럴 필요가 없다.

블로그 : 우분투 환경에서 MariaDB 문자셋 설정

블로그 : CentOS 환경에서 MariaDB 문자셋 설정


반응형

+ Recent posts