SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
포스트그레스큐엘 자국어화 이야기
김상기
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

Más contenido relacionado

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

C'est la vie (hello bert!)
C'est la vie (hello bert!)C'est la vie (hello bert!)
C'est la vie (hello bert!)Junho Lee
 
오픈소스 번역 기여하기
오픈소스 번역 기여하기오픈소스 번역 기여하기
오픈소스 번역 기여하기Changwoo Ryu
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2Hyejong
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu ManualUbuntu Korea Community
 
3.ubuntu custom
3.ubuntu custom3.ubuntu custom
3.ubuntu customsprdd
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 Joohyun Han
 
자바, 미안하다! 파이썬 한국어 NLP
자바, 미안하다! 파이썬 한국어 NLP자바, 미안하다! 파이썬 한국어 NLP
자바, 미안하다! 파이썬 한국어 NLPEunjeong (Lucy) Park
 
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬Joohyun Han
 
5세대 코딩 - 우리글 코딩 글로리
5세대 코딩 - 우리글 코딩 글로리5세대 코딩 - 우리글 코딩 글로리
5세대 코딩 - 우리글 코딩 글로리Sung-Jin (James) Kim
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템Young Soo Kim
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Suho Lee
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)Dong Chan Shin
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)Ubuntu Korea Community
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발동현 김
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)NAVER D2
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기Jaeseung Ha
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기Minho Lee
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengeYoongi Kim
 
제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기Mario Cho
 

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

C'est la vie (hello bert!)
C'est la vie (hello bert!)C'est la vie (hello bert!)
C'est la vie (hello bert!)
 
오픈소스 번역 기여하기
오픈소스 번역 기여하기오픈소스 번역 기여하기
오픈소스 번역 기여하기
 
Introduction to Golang v2
Introduction to Golang v2Introduction to Golang v2
Introduction to Golang v2
 
코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual코분투메뉴얼 10.04 Cobuntu Manual
코분투메뉴얼 10.04 Cobuntu Manual
 
3.ubuntu custom
3.ubuntu custom3.ubuntu custom
3.ubuntu custom
 
200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의 200720 바이오협회 생물정보학 파이썬 강의
200720 바이오협회 생물정보학 파이썬 강의
 
자바, 미안하다! 파이썬 한국어 NLP
자바, 미안하다! 파이썬 한국어 NLP자바, 미안하다! 파이썬 한국어 NLP
자바, 미안하다! 파이썬 한국어 NLP
 
자연어1 | 1차강의
자연어1 | 1차강의자연어1 | 1차강의
자연어1 | 1차강의
 
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
200718 덕성여대 생물정보학 강의 :: 생물정보학 파이썬
 
5세대 코딩 - 우리글 코딩 글로리
5세대 코딩 - 우리글 코딩 글로리5세대 코딩 - 우리글 코딩 글로리
5세대 코딩 - 우리글 코딩 글로리
 
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
[IGC2017] Protocol:hyperspace Diver 개발 포스트모템
 
Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?Github? linux? 이건 뭐지?
Github? linux? 이건 뭐지?
 
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
C# / .NET Framework로 미래 밥그릇을 챙겨보자 (Basic)
 
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)강분도 - 공개SW개발과 우분투 (2010Y10M05D)
강분도 - 공개SW개발과 우분투 (2010Y10M05D)
 
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
[HYSS 2016] 쉽고 빠르게 시작하는 Volatility Plugin 개발
 
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
[Kerference] 쉽고 빠르게 시작하는 Volatility plugin 개발 - 김동현(BoB)
 
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
NDC2018 안드로이드+유니티 네이티브 프로파일링 삽질기
 
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기[DS Meetup] iPad로 가벼운 분석환경 구축해보기
[DS Meetup] iPad로 가벼운 분석환경 구축해보기
 
PyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challengePyCon2020 NLP beginner's BERT challenge
PyCon2020 NLP beginner's BERT challenge
 
제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기제로부터시작하는 Git 두번째 이야기
제로부터시작하는 Git 두번째 이야기
 

Más de PgDay.Seoul

[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정PgDay.Seoul
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱PgDay.Seoul
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재PgDay.Seoul
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google CloudPgDay.Seoul
 
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and OptimizationPgDay.Seoul
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQLPgDay.Seoul
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL TuningPgDay.Seoul
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기PgDay.Seoul
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스PgDay.Seoul
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDWPgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개PgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposhaPgDay.Seoul
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPAPgDay.Seoul
 
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PGPgDay.Seoul
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기PgDay.Seoul
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계PgDay.Seoul
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgresPgDay.Seoul
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우PgDay.Seoul
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종PgDay.Seoul
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진PgDay.Seoul
 

Más de PgDay.Seoul (20)

[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
[pgday.Seoul 2022] 서비스개편시 PostgreSQL 도입기 - 진소린 & 김태정
 
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
[pgday.Seoul 2022] POSTGRES 테스트코드로 기여하기 - 이동욱
 
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
[pgday.Seoul 2022] PostgreSQL구조 - 윤성재
 
[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud[pgday.Seoul 2022] PostgreSQL with Google Cloud
[pgday.Seoul 2022] PostgreSQL with Google Cloud
 
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
[Pgday.Seoul 2021] 2. Porting Oracle UDF and Optimization
 
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
[Pgday.Seoul 2021] 1. 예제로 살펴보는 포스트그레스큐엘의 독특한 SQL
 
[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning[Pgday.Seoul 2020] SQL Tuning
[Pgday.Seoul 2020] SQL Tuning
 
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
[Pgday.Seoul 2019] AppOS 고성능 I/O 확장 모듈로 성능 10배 향상시키기
 
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
[Pgday.Seoul 2019] Citus를 이용한 분산 데이터베이스
 
[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW[Pgday.Seoul 2019] Advanced FDW
[Pgday.Seoul 2019] Advanced FDW
 
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개[Pgday.Seoul 2018]  PostgreSQL 11 새 기능 소개
[Pgday.Seoul 2018] PostgreSQL 11 새 기능 소개
 
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha[Pgday.Seoul 2018]  PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
[Pgday.Seoul 2018] PostgreSQL 성능을 위해 개발된 라이브러리 OS 소개 apposha
 
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA[Pgday.Seoul 2018]  PostgreSQL Authentication with FreeIPA
[Pgday.Seoul 2018] PostgreSQL Authentication with FreeIPA
 
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG[Pgday.Seoul 2018]  이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
[Pgday.Seoul 2018] 이기종 DB에서 PostgreSQL로의 Migration을 위한 DB2PG
 
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기[Pgday.Seoul 2018]  AWS Cloud 환경에서 PostgreSQL 구축하기
[Pgday.Seoul 2018] AWS Cloud 환경에서 PostgreSQL 구축하기
 
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계[Pgday.Seoul 2018]  Greenplum의 노드 분산 설계
[Pgday.Seoul 2018] Greenplum의 노드 분산 설계
 
[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres[Pgday.Seoul 2018] replacing oracle with edb postgres
[Pgday.Seoul 2018] replacing oracle with edb postgres
 
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
[Pgday.Seoul 2017] 6. GIN vs GiST 인덱스 이야기 - 박진우
 
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
[Pgday.Seoul 2017] 5. 테드폴허브(올챙이) PostgreSQL 확장하기 - 조현종
 
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
[Pgday.Seoul 2017] 1. PostGIS의 사례로 본 PostgreSQL 확장 - 장병진
 

[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