티스토리 뷰
언젠가 이와 관련해서 양질의 포스팅을 써보려고 했는데 계속 미루기만할수는 없고 일단 부족하지만 관련 내용을 포스팅해봅니다.
한글은 알파벳과는 다르게 초성, 중성, 종성이 모여서 하나의 단어를 만듭니다
"김"이라는 단어는 "ㄱ", "ㅣ", "ㅁ" 이렇게 초성, 중성, 종성 세개의 조합이죠
프로그램 관점에서 보자면
초성, 중성, 종성을 각각 따로 처리하는 방식과
초성, 중성, 종성이 모두 합쳐진 하나의 글자를 처리하는 방식으로 나누어볼수 있습니다
바로 전자가 조립형 한글(NFD)이고, 후자가 완성형한글(NFC)입니다
맥이 대표적으로 NFD를 사용하고 윈도우를 비롯해서 대부분은 NFC를 사용합니다
특히 이 차이를 피부로 느낄수 있는 곳은
맥에서 전송한 파일을 윈도우에서 확인할때
ㅇㅏㄴㄴㅕㅇㅎㅏㅅㅔㅇㅛ.zip
이런식으로 파일이름이 변경되는것을 볼수 있는데요 맥과 윈도우가 한글을 다루는 방법에서 차이가 있기 때문입니다
윈도우는 완성형 한글을 사용하고
맥은 조립형 한글을 사용하기때문입니다.
아래의 샘플을 살펴보겠습니다
urlencode된 한글을 decode하면 실제로는 같은 "안녕하세요" 이지만 두개의 string이 같지 않습니다
실제로 안녕하세요는 5글자이지만 이 두개는 length도 다릅니다
이게 바로 한글조합형과, 한글완성형인 같지만 서로다른 글자입니다
aws s3 콘솔에서 파일업로드를 해봅시다
안녕하세요.xlsx
라는 이름의 파일을 맥에서도 만들어보고, 윈도우에서도 만들어서 업로드해보세요
맥은 조합형한글을 사용하기 때문에 s3 object 주소는 다음과 같은 주소를 갖게 됩니다
https://kkmtest.s3.ap-northeast-2.amazonaws.com/%E1%84%8B%E1%85%A1%E1%86%AB%E1%84%82%E1%85%A7%E1%86%BC%E1%84%92%E1%85%A1%E1%84%89%E1%85%A6%E1%84%8B%E1%85%AD.xlsx
윈도우는 완성형한글을 이용해서 s3 object 주소는 다음과 같은 주소를 갖게 됩니다
https://kkmtest.s3.ap-northeast-2.amazonaws.com/%EC%95%88%EB%85%95%ED%95%98%EC%84%B8%EC%9A%94.xlsx
s3는 같은 파일명을 올리게되면 옵션에 따라 기본적으로 덮어쓰기를 하는데
두개의 파일이 사용자가 보기에는 같은 "안녕하세요.xlsx"지만 모두 s3에 업로드가 되었습니다
url이 일단 길이에서도 확연한차이가 있네요
s3에 한글파일명의 파일을 업로드해서
s3 object가 한글이름으로 되었을때는 이 파일명이 조합형이냐 완성형이냐에 따라
이 s3 object의 주소가 서로 다르게 됩니다
조합형은 "ㅇ"인코딩 %E1%84%8B "ㅏ"인코딩 %E1%85%A1 "ㄴ"인코딩 %E1%86%AB
완성형은 "안"인코딩 %EC%95%88
이런식으로 urlencode를 했기때문에 같은 "안녕하세요"를 encode했지만
서로 다른 결과가 나온것입니다
s3 콘솔화면에서 파일명을 검색할때는 "한글완성형"으로 검색을 하기 때문에 완성형 한글파일명의 파일만 검색이 되고,
조합형으로 만들어진 파일은 한글명이 같더라도 검색되지 않습니다
그리고 많은 툴들이 완성형 한글을 사용하기 때문에
조합형 한글을 사용하면 같은 문제로 인해 이래저래 불편한 일이 많습니다
예를 들어 조합형 한글로 된 데이터를 DB에 저장했다고 합시다
DB툴을 이용해서 where 조건에 해당 한글의 데이터를 찾는 쿼리를 만들때도
대부분이 완성형을 기본으로 사용하기 때문에
분명 일치하는 한글로 검색했지만 완성형으로 조합형의 한글을 검색하려고 한것이기 때문에 원하는 검색결과가 보이지 않습니다
이러한 측면에서 볼때
파일명등을 다룰때는 한글보다는 유니크한 영문과 숫자등으로 구성된 이름을 사용해서 최종 사용자에게 serving할때만 한글로 바꿔주거나
파일명을 normalize 하여 일관되도록 저장하는 방법이 깨끗한 코드에 도움이 될것 같습니다
'WEB2.0 > 프로그래밍' 카테고리의 다른 글
무료로 mongodb 사용하는 방법 (0) | 2021.08.06 |
---|---|
amazon linux2 arm아키텍쳐에서 mongodb 사용하기 (0) | 2021.08.05 |
AWS lightsail VPC 피어링 (1) | 2021.05.22 |
lightsail에서도 컨테이너서비스를 이용할수 있다고? (0) | 2021.05.19 |
angular 프로젝트에 firebase analytics 적용하기 (0) | 2021.05.18 |
- Total
- Today
- Yesterday
- android
- 경진대회
- 대학생
- 앱스토어
- 창업
- 네이버
- 구글
- 앱
- JavaScript
- 웹표준
- Apple
- 자바스크립트
- 소프트웨어
- 애플
- AWS
- 안드로이드
- php
- CSS
- 아이디어
- 벤처
- 스마트폰
- 어플리케이션
- iPhone
- 공모전
- 모바일
- 게임
- 아이폰
- 트위터
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |