이 글은 제가 과거에 운영했던 사이트인 http://dotnet.mkexdev.net 의 글을 옮겨온 것입니다. 원본 글은 2008년 10월에 작성되었습니다.
그 전에 운영했었던 사이트(mkex.pe.kr)은 흔적도 없이 사라 졌습니다. 그속의 글들도 모두... 그래서 이 사이트도 사라지기 전에 옮기고 싶은 글을 조금씩 이 블로그로 이동시키려 합니다.
(원본글) http://dotnet.mkexdev.net/Article/Content.aspx?parentCategoryID=3&categoryID=26&ID=400
제목보고 놀라셨나요? ㅎㅎ
상소리(?) 같아서 기분이 상하신 분은 양해 바랍니다.
프로젝트 진행 중 '계집 녀(女)'라는 한자와 관련해서 경험한 재미있는 에피소드가 있어 이를 소개하려 합니다.
저는 게임회사를 다니고 있습니다.
저희 팀에서는 데이타베이스도 관리하고 있기 때문에 회원 DB를 직접 관리합니다.
어느날,
게임개발팀 팀장으로부터 닉네임이 중복된다는 제보(?)를 받게 됩니다.
우리 게임은 정책적으로 닉네임은 완전 고유해야 하거든요, 그리고 이를 시스템에 적용한 상태이구요
웹 사이트에서 회원 가입 시 중복 체크를 하고 있습니다.
물론 DB에서도 유니크 제약조건이 걸려 있어서, 같은 닉네임이 입력될 여지는 전혀 없는 것이지요.
그런데, 제보받은 두 명의 회원 닉네임을 보니, 정말 같아 보였습니다.
저희는 닉네임에 한자도 입력 가능하기 때문에, 두 회원의 닉네임은 한자였습니다.
그리고 그 한자 중간에는 '계집 녀(女)'가 들어 있었지요. 다음과 같이요...
회원 1 의 닉네임 : XXX女XXX
회원 2 의 닉네임 : XXX女XXX
이런, 어떻게 같은 닉네임이 DB에 입력되었을까???
닉네임 문자를 가만히 들여다 보니, 女 자가 살짝, 아주 살짝 달라보입니다.
女 / 女 <- 달라 보이나요?
메모장에서 확대를 해 봤습니다. 그랬더니, 오히려 더 같은 글자로 보이네요.
확대하기 이전 두 글자는 살짝 차이가 보이는데, 확대를 하니 오히려 완전 같은 글자처럼 보이는 군요.
여튼, 두 글자가 다른 글자일 수도 있겠구나.. 하며 문자코드를 봤습니다.
참고로, 저희 웹 사이트와 DB는 국제 표준 유니코드를 사용합니다.
두 한자의 유니코드를 보니, 이런!!!
코드가 서로 다르군요. 즉 유니코드 테이블에서는 두 글자가 서로 다른 글자로 엄연히 자리하고 있던 것입니다.
'녀'가 '여'로 발음되는 것은 두음법칙에 의해서 인데, 이러한 규칙이 국제표준코드 정의에도 그대로 적용되어 있다니. 놀랍습니다. ㅎㅎ;
결과적으로 사람이 보기에, 그리고 의미상으로는 같은 두 한자가, 시스템은 다른 글자로 인식하기 때문에
중복없이 DB에 저장된 것입니다.
한자 사전을 찾아 봤습니다. 두 글자가 떡 하니(?) 나오네요 --;
참고로 유니코드 표에서 두 글자의 16진수 10진수 코드는 다음과 같습니다.
16진수 10진수
女(여) : F981 63873
女(녀) : 5973 22899
두음법칙이 적용되는 한자는 모두??
그렇습니다. 두음법칙이 적용되는 한자는 모두, 이러한 현상이 발생합니다.
'어질 량(良) / 어질 양(良)' 도 두음법칙에 의해 서로 다르게 발음되며, 이에 대한 유니코드도 다릅니다.
그리고 '년(年)과 연(年)' 도 있지요.
또 뭐가 있을까요? 다음을 참고하세요..
제10항: 한자음 ‘녀, 뇨, 뉴, 니’가 단어 첫머리에 올 적에는 두음 법칙에 따라 ‘여, 요, 유, 이’로 적는다.
제11항: 한자음 ‘랴, 려, 례, 료, 류, 리’가 단어의 첫머리에 올 적에는 두음 법칙에 따 라 ‘야, 여, 요, 유, 이’로 적는다.
다만, 모음이나 ‘ㄴ’받침 뒤에 이어지는 ‘렬, 률’은 ‘열, 율’로 적는다.
혹시, 당신의 응용프로그램에서도 고유한 성질의 필드에 한자를 입력받고 있으신가요?
그렇다면, 이러한 중복아닌 중복마저도 허용치 않으려면 이런 현상을 미리 고려하셔야 겠네요
아니라면, 그냥 재미삼아.. 이럴 수도 있겠구나.. 하면 되겠지요 ~~
'SW개발' 카테고리의 다른 글
[C# 기초강좌] 2. 닷넷의 실행구조 (0) | 2023.11.01 |
---|---|
SBCS, MBCS, WBCS (0) | 2023.10.31 |
다차원 배열의 인덱싱 (0) | 2023.10.27 |
배열 인덱싱의 메커니즘(arr[i] == *(arr+i)) (0) | 2023.10.27 |
배열과 포인터(Pointer) 의 상관관계 (0) | 2023.10.27 |