Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기

117 views

Published on

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기 - 김상기

Published in: Software
  • Be the first to comment

[Pgday.Seoul 2020] 포스트그레스큐엘 자국어화 이야기

  1. 1. 포스트그레스큐엘 자국어화 이야기 김상기
  2. 2. pgday.seoul 2020 2 NLS ● "National Language Support" or "Native Language Support" – GNU gettext 패키지로 구현하는 것이 제일 유명함 – 국제화 (I18N), 지역화 (L10N) 두 단어가 주로 나오나 , 소프트웨어에서는 하나의 소스에 사용자의 언어 환경에 따라 보여주는 메시지를 각 언어별로 다르게 보여주는 것을 말하는 것이 일반적 – 한국어 경우는 주로 사용하는 인코딩 문자세트 변화에 따라 완성형 → 확장 완성형 → UTF-8 형태로 계속 그 인코딩이 바뀌면서 여러 시행착오가 있었고 , 요즘은 UTF-8 이 대세
  3. 3. pgday.seoul 2020 3 lc_time postgres=# show lc_ lc_collate lc_ctype lc_messages lc_monetary lc_numeric lc_time postgres=# show lc_time; lc_time --------- C (1 개 행 ) postgres=# select to_char(current_timestamp, 'TMMonth'); to_char ---------- November (1 개 행 ) postgres=# set lc_time='ko_KR.UTF-8'; SET postgres=# select to_char(current_timestamp, 'TMMonth'); to_char --------- 11 월 (1 개 행 )
  4. 4. pgday.seoul 2020 4 lc_monetary postgres=# show lc_monetary ; lc_monetary ------------- C (1 개 행 ) postgres=# select 10000::money; money ------------ $10,000.00 (1 개 행 ) postgres=# set lc_monetary='ko_KR.UTF-8'; SET postgres=# select 10000::money; money --------- ₩10,000 (1 개 행 ) postgres=# select relname, (relpages*8192)::money from pg_class order by 2 desc;
  5. 5. pgday.seoul 2020 5 lc_messages postgres=# show lc_messages; lc_messages ------------- C (1 개 행 ) postgres=# drop table asdf; ERROR: table "asdf" does not exist postgres=# set lc_messages = 'ko_KR.UTF-8'; SET postgres=# drop table asdf; 오류 : "asdf" 테이블 없음
  6. 6. pgday.seoul 2020 6 ko.po ● postgresql-13.1/src/backend/po/ko.po – 한국어 서버 메시지 일반 텍스트 소스 파일 – 소스를 컴파일 하기 전 빌드 환경을 설정하는 configure 작업에서 --enable-nls 옵션을 지정해서 활성화 함 – msgfmt 명령으로 ko.mo 바이너리 파일로 변환 – .../share/locale/ko/LC_MESSAGES/postgres-13.mo 파일로 설치됨 – 운영체제가 gettext 기반 한국어 메시지를 볼 수 있는 환경이라면 ● locale -a 명령 결과에 ko_KR.utf8 목록이 있고 , ● 쉘 LANG 환경 변수 값이 ko_KR.utf8 이고 , ● 사용하는 터미널에서 utf8 문자셋으로 한글이 출력될 때 – postgres –help 명령을 실행하면 도움말이 한국어로 나옴
  7. 7. pgday.seoul 2020 7 한국어 번역 역사 ● 2002 년 PostgreSQL 7.2 버전에서 gettext 기반 국제화 기능이 도입됨 ● 2004 년 이 번역 작업 때문에 한국 커뮤니티 모체가 되는 온라인 모임이 만들어짐 ( 정재익 , 신기배 , 당시 이상호 , 김상기 ) - 그 흔적은 database.sarang.net 홈페이지에서 ● 2004 년 연말에 8.0 소스에 반영 ● 새 메이저 버전이 발표되면 ko.po 파일은 꾸준히 번역되고 있음 ( 중간에 빠진 버전도 있었지만 ) ● 2020 년 11 월 최근까지 13.1 버전에 반영 ● postgresql git 저장소 역사 탐방
  8. 8. pgday.seoul 2020 8 다국어 번역 현황 ● 버전관리를 위해 pgtranslation/messages.git 저장소를 사용함 (log, history, diff) ● 번역 작업자들을 위한 이슈트래커 : redmine.postgresql.org ● 각 언어별 번역 현황 : babel.postgresql.org
  9. 9. pgday.seoul 2020 9 한국어 메시지 문제점 ● 작업자 모두 IT 비전공자로 시작 ● 한국어 표준어와 맞춤법도 깔끔하지 않음 (‘ 반틈’이 표준어로 알고 있었음 ) ● 관계형 데이터베이스 확산기에 시작한 일 , 용어 정리도 아직 다 못 함 ● 시작 당시 아주 빈약한 PostgreSQL 인터넷 자료 ● 영어 독해 시험을 치르는 것같은 공식 설명서 ● 그리고 , 어떻게든 모였으니 , 이번에는 마무리짓겠다는 뜨거운 (?) 마음만으로 만든 결과물 ● UTF-8 기반 서버 메시지와 한국어 MS 윈도우즈 949 코드페이지 어울림 문제 ● <qbq>
  10. 10. pgday.seoul 2020 10 ko.po 무용론 ● 관계형 데이터베이스라는 소프트웨어 특수성 ( 오피스 도구들과 다른 보다 IT 전문가들이 사용하는 소프트웨어 ) ● 인공 지능 기반 통번역 서비스의 번역 품질이 좋아지고 있음 ● 한국어로 보이는 문장이 오히려 이해하기 힘듦 ● 옮겨도 모두 외래어 표기법인 뿐인 것을 – 테이블 칼럼 드랍 커멘드 러닝 그럼에도 불구하고
  11. 11. pgday.seoul 2020 11 ko.po 번역 작업 필요성 ● gettext 기반 자국어화의 기본 사상 - 하나의 영어 문장은 반드시 하나의 자국어 문장으로만 번역됨 - hello → 안녕 ( 이것뿐이지 , 어떤 경우는 ‘여보세요’ , 어떤 경우는 ‘안녕’ 이렇게 쓸 수 없음 ) ● 영어 독해 실력과 데이터베이스 사용 실력은 다륾 - 자국어화는 초보의 진입장벽을 낮추는 가장 좋은 방법임 ● 나름의 재능 기부 - 그저 받았으니 , 그저 주어야 이랬는데
  12. 12. pgday.seoul 2020 12 번역 작업 숨은 이야기 ● gettext 기반 새 .mo 파일 만드는 과정 – 소스에서 .pot ( 영어만 있는 po 템플릿 파일 ) 만들고 – 이 .pot 파일을 기반으로 이전 버전에 사용했던 ko.po 파일을 msgmerge 명령을 이용해서 새 ko.po 파일로 만들고 , – 새 ko.po 파일을 열어 번역이 안된 부분은 찾아 번역 ● 이 과정은 결국 새 버전의 새 기능을 소스를 직접 보면서 살펴보게 되는 기회가 된다 ! ● 기존 한국어 메시지를 쓰다 보면 이해가 안되는 부분이 나오면 ( 오역이거나 데이터베이스 이해부족 ) 그 번역을 고치면서 데이터베이스를 더 깊게 들여보게 된다 ! ● 실력이 쌓이면 소스 코드 개선 작업을 도와 줄 수도 있다 !
  13. 13. pgday.seoul 2020 13 번역 작업 시현 ● babel 홈페이지로
  14. 14. pgday.seoul 2020 14 13 버전에서는 ● pg_basebackup: manifest 파일 기반 검증 기능 추가 ● pg_dump: --include-foreign-data 옵션 추가 ● pg_verifybackup.po 새 번역 ( 이 명령어 전체를 살펴보게 됨 ) ● pg_upgrade: 의존성이나 오류 개체 관련 목록을 표준 출력으로 보여주던 것을 파일에 저장함 ● dropdb force 기능 추가 ● online reindex, 병렬 vacuumdb ● psql g, gx 내장 명령어에 옵션 추가 , 연산자 클래스 , 연산자 가족 목록 보는 dA* 관련 명령 추가 ● 서버 엔진 변경 사항들 ( 새 기능 소개 참조 )
  15. 15. pgday.seoul 2020 15 나도 도와줄게요 ● 우리가 만드는 한국어 PostgreSQL ( 우리가 안하면 누구도 안하겠죠 ) - ko.po 번역작업은 설명서 변역작업과 달리 대부분 번역되어있기 때문에 , 일량이 그리 많지 않습니다 . ● 오탈자나 오역 보고는 redmine.postgresql.org 를 통해서 일감을 만들기 보다 , postgresql.kr/support 나 facebook postgresql korea 그룹에 알리는 것이 나을 듯 ● 번역 안된 것 새로 번역 하는 작업은 babel.postgresql.org 에서 pot 파일을 받아서 merge 해서 po 파일 단위로 보내는 것이 나을 듯 ● 번역 작업 참여자들이 많으면 , 그때는 github 에 한국어 작업 저장소를 만들 예정입니다 .
  16. 16. pgday.seoul 2020 16 링크들 ● 이 발표를 준비 하면서 살펴본 링크들 – https://postgresql.kr/docs/current/functions-formatting.html – https://postgresql.kr/docs/current/install-procedure.html – https://postgresql.kr/docs/current/charset.html – https://postgresql.kr/docs/current/nls.html – http://wiki.postgresql.org/wiki/NLS
  17. 17. pgday.seoul 2020 17

×