ݺߣ

ݺߣShare a Scribd company logo
포스트그레스큐엘 자국어화 이야기
김상기
pgday.seoul 2020 2
NLS
●
"National Language Support" or "Native Language Support"
– GNU gettext 패키지로 구현하는 것이 제일 유명함
– 국제화 (I18N), 지역화 (L10N) 두 단어가 주로 나오나 , 소프트웨어에서는
하나의 소스에 사용자의 언어 환경에 따라 보여주는 메시지를 각 언어별로
다르게 보여주는 것을 말하는 것이 일반적
– 한국어 경우는 주로 사용하는 인코딩 문자세트 변화에 따라 완성형 → 확장
완성형 → UTF-8 형태로 계속 그 인코딩이 바뀌면서 여러 시행착오가
있었고 , 요즘은 UTF-8 이 대세
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 개 행 )
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;
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" 테이블 없음
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 명령을 실행하면 도움말이 한국어로 나옴
pgday.seoul 2020 7
한국어 번역 역사
●
2002 년 PostgreSQL 7.2 버전에서 gettext 기반 국제화 기능이 도입됨
●
2004 년 이 번역 작업 때문에 한국 커뮤니티 모체가 되는 온라인 모임이
만들어짐 ( 정재익 , 신기배 , 당시 이상호 , 김상기 )
- 그 흔적은 database.sarang.net 홈페이지에서
●
2004 년 연말에 8.0 소스에 반영
●
새 메이저 버전이 발표되면 ko.po 파일은 꾸준히 번역되고 있음 (
중간에 빠진 버전도 있었지만 )
●
2020 년 11 월 최근까지 13.1 버전에 반영
●
postgresql git 저장소 역사 탐방
pgday.seoul 2020 8
다국어 번역 현황
●
버전관리를 위해 pgtranslation/messages.git 저장소를 사용함
(log, history, diff)
●
번역 작업자들을 위한 이슈트래커 : redmine.postgresql.org
●
각 언어별 번역 현황 : babel.postgresql.org
pgday.seoul 2020 9
한국어 메시지 문제점
●
작업자 모두 IT 비전공자로 시작
●
한국어 표준어와 맞춤법도 깔끔하지 않음 (‘ 반틈’이 표준어로 알고 있었음 )
●
관계형 데이터베이스 확산기에 시작한 일 , 용어 정리도 아직 다 못 함
●
시작 당시 아주 빈약한 PostgreSQL 인터넷 자료
●
영어 독해 시험을 치르는 것같은 공식 설명서
●
그리고 , 어떻게든 모였으니 , 이번에는 마무리짓겠다는 뜨거운 (?) 마음만으로
만든 결과물
●
UTF-8 기반 서버 메시지와 한국어 MS 윈도우즈 949 코드페이지 어울림 문제
●
<qbq>
pgday.seoul 2020 10
ko.po 무용론
●
관계형 데이터베이스라는 소프트웨어 특수성 ( 오피스 도구들과
다른 보다 IT 전문가들이 사용하는 소프트웨어 )
●
인공 지능 기반 통번역 서비스의 번역 품질이 좋아지고 있음
●
한국어로 보이는 문장이 오히려 이해하기 힘듦
●
옮겨도 모두 외래어 표기법인 뿐인 것을
– 테이블 칼럼 드랍 커멘드 러닝
그럼에도 불구하고
pgday.seoul 2020 11
ko.po 번역 작업 필요성
●
gettext 기반 자국어화의 기본 사상
- 하나의 영어 문장은 반드시 하나의 자국어 문장으로만 번역됨
- hello → 안녕 ( 이것뿐이지 , 어떤 경우는 ‘여보세요’ , 어떤
경우는 ‘안녕’ 이렇게 쓸 수 없음 )
●
영어 독해 실력과 데이터베이스 사용 실력은 다륾
- 자국어화는 초보의 진입장벽을 낮추는 가장 좋은 방법임
●
나름의 재능 기부 - 그저 받았으니 , 그저 주어야
이랬는데
pgday.seoul 2020 12
번역 작업 숨은 이야기
●
gettext 기반 새 .mo 파일 만드는 과정
– 소스에서 .pot ( 영어만 있는 po 템플릿 파일 ) 만들고
– 이 .pot 파일을 기반으로 이전 버전에 사용했던 ko.po 파일을 msgmerge 명령을
이용해서 새 ko.po 파일로 만들고 ,
– 새 ko.po 파일을 열어 번역이 안된 부분은 찾아 번역
●
이 과정은 결국 새 버전의 새 기능을 소스를 직접 보면서 살펴보게 되는 기회가
된다 !
●
기존 한국어 메시지를 쓰다 보면 이해가 안되는 부분이 나오면 ( 오역이거나
데이터베이스 이해부족 ) 그 번역을 고치면서 데이터베이스를 더 깊게 들여보게
된다 !
●
실력이 쌓이면 소스 코드 개선 작업을 도와 줄 수도 있다 !
pgday.seoul 2020 13
번역 작업 시현
●
babel 홈페이지로
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* 관련 명령 추가
●
서버 엔진 변경 사항들 ( 새 기능 소개 참조 )
pgday.seoul 2020 15
나도 도와줄게요
●
우리가 만드는 한국어 PostgreSQL ( 우리가 안하면 누구도 안하겠죠 )
- ko.po 번역작업은 설명서 변역작업과 달리 대부분 번역되어있기
때문에 , 일량이 그리 많지 않습니다 .
●
오탈자나 오역 보고는 redmine.postgresql.org 를 통해서 일감을
만들기 보다 , postgresql.kr/support 나 facebook postgresql korea
그룹에 알리는 것이 나을 듯
●
번역 안된 것 새로 번역 하는 작업은 babel.postgresql.org 에서 pot
파일을 받아서 merge 해서 po 파일 단위로 보내는 것이 나을 듯
●
번역 작업 참여자들이 많으면 , 그때는 github 에 한국어 작업
저장소를 만들 예정입니다 .
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
pgday.seoul 2020 17

More Related Content

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

  • 2. pgday.seoul 2020 2 NLS ● "National Language Support" or "Native Language Support" – GNU gettext 패키지로 구현하는 것이 제일 유명함 – 국제화 (I18N), 지역화 (L10N) 두 단어가 주로 나오나 , 소프트웨어에서는 하나의 소스에 사용자의 언어 환경에 따라 보여주는 메시지를 각 언어별로 다르게 보여주는 것을 말하는 것이 일반적 – 한국어 경우는 주로 사용하는 인코딩 문자세트 변화에 따라 완성형 → 확장 완성형 → UTF-8 형태로 계속 그 인코딩이 바뀌면서 여러 시행착오가 있었고 , 요즘은 UTF-8 이 대세
  • 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. 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. 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. 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. 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. pgday.seoul 2020 8 다국어 번역 현황 ● 버전관리를 위해 pgtranslation/messages.git 저장소를 사용함 (log, history, diff) ● 번역 작업자들을 위한 이슈트래커 : redmine.postgresql.org ● 각 언어별 번역 현황 : babel.postgresql.org
  • 9. pgday.seoul 2020 9 한국어 메시지 문제점 ● 작업자 모두 IT 비전공자로 시작 ● 한국어 표준어와 맞춤법도 깔끔하지 않음 (‘ 반틈’이 표준어로 알고 있었음 ) ● 관계형 데이터베이스 확산기에 시작한 일 , 용어 정리도 아직 다 못 함 ● 시작 당시 아주 빈약한 PostgreSQL 인터넷 자료 ● 영어 독해 시험을 치르는 것같은 공식 설명서 ● 그리고 , 어떻게든 모였으니 , 이번에는 마무리짓겠다는 뜨거운 (?) 마음만으로 만든 결과물 ● UTF-8 기반 서버 메시지와 한국어 MS 윈도우즈 949 코드페이지 어울림 문제 ● <qbq>
  • 10. pgday.seoul 2020 10 ko.po 무용론 ● 관계형 데이터베이스라는 소프트웨어 특수성 ( 오피스 도구들과 다른 보다 IT 전문가들이 사용하는 소프트웨어 ) ● 인공 지능 기반 통번역 서비스의 번역 품질이 좋아지고 있음 ● 한국어로 보이는 문장이 오히려 이해하기 힘듦 ● 옮겨도 모두 외래어 표기법인 뿐인 것을 – 테이블 칼럼 드랍 커멘드 러닝 그럼에도 불구하고
  • 11. pgday.seoul 2020 11 ko.po 번역 작업 필요성 ● gettext 기반 자국어화의 기본 사상 - 하나의 영어 문장은 반드시 하나의 자국어 문장으로만 번역됨 - hello → 안녕 ( 이것뿐이지 , 어떤 경우는 ‘여보세요’ , 어떤 경우는 ‘안녕’ 이렇게 쓸 수 없음 ) ● 영어 독해 실력과 데이터베이스 사용 실력은 다륾 - 자국어화는 초보의 진입장벽을 낮추는 가장 좋은 방법임 ● 나름의 재능 기부 - 그저 받았으니 , 그저 주어야 이랬는데
  • 12. pgday.seoul 2020 12 번역 작업 숨은 이야기 ● gettext 기반 새 .mo 파일 만드는 과정 – 소스에서 .pot ( 영어만 있는 po 템플릿 파일 ) 만들고 – 이 .pot 파일을 기반으로 이전 버전에 사용했던 ko.po 파일을 msgmerge 명령을 이용해서 새 ko.po 파일로 만들고 , – 새 ko.po 파일을 열어 번역이 안된 부분은 찾아 번역 ● 이 과정은 결국 새 버전의 새 기능을 소스를 직접 보면서 살펴보게 되는 기회가 된다 ! ● 기존 한국어 메시지를 쓰다 보면 이해가 안되는 부분이 나오면 ( 오역이거나 데이터베이스 이해부족 ) 그 번역을 고치면서 데이터베이스를 더 깊게 들여보게 된다 ! ● 실력이 쌓이면 소스 코드 개선 작업을 도와 줄 수도 있다 !
  • 13. pgday.seoul 2020 13 번역 작업 시현 ● babel 홈페이지로
  • 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. pgday.seoul 2020 15 나도 도와줄게요 ● 우리가 만드는 한국어 PostgreSQL ( 우리가 안하면 누구도 안하겠죠 ) - ko.po 번역작업은 설명서 변역작업과 달리 대부분 번역되어있기 때문에 , 일량이 그리 많지 않습니다 . ● 오탈자나 오역 보고는 redmine.postgresql.org 를 통해서 일감을 만들기 보다 , postgresql.kr/support 나 facebook postgresql korea 그룹에 알리는 것이 나을 듯 ● 번역 안된 것 새로 번역 하는 작업은 babel.postgresql.org 에서 pot 파일을 받아서 merge 해서 po 파일 단위로 보내는 것이 나을 듯 ● 번역 작업 참여자들이 많으면 , 그때는 github 에 한국어 작업 저장소를 만들 예정입니다 .
  • 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