스피커덱에서 더 편하게 보실 수 있습니다: https://subl.ee/~gokr1808
https://hangulize.org/
〈한글라이즈〉는 외국어 단어를 외래어 표기법에 따라 한글로 옮겨 적어주는 도구입니다. "Espresso"를 "에스프레소"로, "東京"을 "도쿄"로 변환할 수 있죠. 본래 Python으로 구현했던 한글라이즈를 Go로 재구현하면서 겪은 경험과 느낀점을 공유합니다.
고랭코리아 2018년 8월 밋업에서 발표했습니다.
슬라이드셰어에 슬라이드 300장 제한이 있어서 부득이하게 2부로 나눠서 올렸습니다. 보는 데 불편하시겠지만 양해를 부탁드립니다.
- 1부: https://subl.ee/~gokr1808
- 2부: https://subl.ee/~gokr1808.2
64. •ピカチュウ ▶ 피카츄
•靑島 ▶ 칭따오
•Chevrolet ▶ 쉐보레
어디까지나 권고사항
피카추
칭다오
셰브럴레이
하지만 외래어 표기법은
어디까지나 권고사항일 뿐이라서
65. •ピカチュウ ▶ 피카츄
•靑島 ▶ 칭따오
•Chevrolet ▶ 쉐보레
어디까지나 권고사항
피카추
칭다오
셰브럴레이
이미 다른 표기가 널리 퍼져 있는 브랜드라면
국립국어원에서도 그쪽의 손을 들어주고 있습니다.
66. 제1항
외래어는 국어의 현용 24 자모만으로 적는다.
제2항
외래어의 1 음운은 원칙적으로 1 기호로 적는다.
제3항
받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다.
제4항
파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다.
제5항
이미 굳어진 외래어는 관용을 존중하되,
그 범위와 용례는 따로 정한다.
외래어 표기법
자음 반모음 모음
국제 음성
기호
한글 국제 음성
기호
한글 국제 음성
기호
한글
모음 앞 자음 앞
또는 어
말
p ㅍ ㅂ, 프 j 이 i 이
b ㅂ 브 ɥ 위 y 위
t ㅌ ㅅ, 트 w 오, 우 e 에
d ㄷ 드 φ 외
k ㅋ ㄱ, 크 ɛ 에
g ㄱ 그 ɛ̃ 앵
f ㅍ 프 œ 외
v ㅂ 브 œ̃ 욍
θ ㅅ 스 æ 애
ð ㄷ 드 a 아
s ㅅ 스 ɑ 아
67. 제1항
외래어는 국어의 현용 24 자모만으로 적는다.
제2항
외래어의 1 음운은 원칙적으로 1 기호로 적는다.
제3항
받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다.
제4항
파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다.
제5항
이미 굳어진 외래어는 관용을 존중하되,
그 범위와 용례는 따로 정한다.
외래어 표기법
자음 반모음 모음
국제 음성
기호
한글 국제 음성
기호
한글 국제 음성
기호
한글
모음 앞 자음 앞
또는 어
말
p ㅍ ㅂ, 프 j 이 i 이
b ㅂ 브 ɥ 위 y 위
t ㅌ ㅅ, 트 w 오, 우 e 에
d ㄷ 드 φ 외
k ㅋ ㄱ, 크 ɛ 에
g ㄱ 그 ɛ̃ 앵
f ㅍ 프 œ 외
v ㅂ 브 œ̃ 욍
θ ㅅ 스 æ 애
ð ㄷ 드 a 아
s ㅅ 스 ɑ 아
외래어 표기법은 이런
규칙집으로 이뤄져 있습니다.
68. 제1항
외래어는 국어의 현용 24 자모만으로 적는다.
제2항
외래어의 1 음운은 원칙적으로 1 기호로 적는다.
제3항
받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다.
제4항
파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다.
제5항
이미 굳어진 외래어는 관용을 존중하되,
그 범위와 용례는 따로 정한다.
외래어 표기법
자음 반모음 모음
국제 음성
기호
한글 국제 음성
기호
한글 국제 음성
기호
한글
모음 앞 자음 앞
또는 어
말
p ㅍ ㅂ, 프 j 이 i 이
b ㅂ 브 ɥ 위 y 위
t ㅌ ㅅ, 트 w 오, 우 e 에
d ㄷ 드 φ 외
k ㅋ ㄱ, 크 ɛ 에
g ㄱ 그 ɛ̃ 앵
f ㅍ 프 œ 외
v ㅂ 브 œ̃ 욍
θ ㅅ 스 æ 애
ð ㄷ 드 a 아
s ㅅ 스 ɑ 아
국립국어원 홈페이지에서
누구나 자유롭게 볼 수 있죠.
69. 제1항
외래어는 국어의 현용 24 자모만으로 적는다.
제2항
외래어의 1 음운은 원칙적으로 1 기호로 적는다.
제3항
받침에는 ㄱ, ㄴ, ㄹ, ㅁ, ㅂ, ㅅ, ㅇ만을 쓴다.
제4항
파열음 표기에는 된소리를 쓰지 않는 것을 원칙으로 한다.
제5항
이미 굳어진 외래어는 관용을 존중하되,
그 범위와 용례는 따로 정한다.
외래어 표기법
자음 반모음 모음
국제 음성
기호
한글 국제 음성
기호
한글 국제 음성
기호
한글
모음 앞 자음 앞
또는 어
말
p ㅍ ㅂ, 프 j 이 i 이
b ㅂ 브 ɥ 위 y 위
t ㅌ ㅅ, 트 w 오, 우 e 에
d ㄷ 드 φ 외
k ㅋ ㄱ, 크 ɛ 에
g ㄱ 그 ɛ̃ 앵
f ㅍ 프 œ 외
v ㅂ 브 œ̃ 욍
θ ㅅ 스 æ 애
ð ㄷ 드 a 아
s ㅅ 스 ɑ 아
하지만 워낙 복잡해서 아무리 잘 따르려 노력해도
틀리는 경우가 많습니다.
70. •정기적으로 각 외래어의 한글 표기 결정
•언론에 보도되는 이름 중심
정부·언론 외래어 심의 공동위원회
그래서 바른 말 쓰기를
특히 중요하게 여기는 정부와 언론 쪽에선
71. •정기적으로 각 외래어의 한글 표기 결정
•언론에 보도되는 이름 중심
정부·언론 외래어 심의 공동위원회
외래어 표기법이
잘 지켜지고 있는지 평가하고
72. •정기적으로 각 외래어의 한글 표기 결정
•언론에 보도되는 이름 중심
정부·언론 외래어 심의 공동위원회
정기적으로 공식 외래어 표기를 발표하는
위원회를 두고 있어요.
73. •정기적으로 각 외래어의 한글 표기 결정
•언론에 보도되는 이름 중심
정부·언론 외래어 심의 공동위원회
"정부·언론 외래어 심의 공동위원회"라는 곳인데
코드리뷰어 집단이라고 생각하면 될 것 같습니다.
74. 제92차 정부·언론외래어심의공동위원회 심의 결정안
(인명 52건, 일반용어 1건-재심의 2건)
• 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아
여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자
인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을
강조하는 디자인으로 유명함.
• 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA)
회장(1974~1998). 브라질 인.
• 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사.
일본 간사이(關西)학원 원장(2007. 4.~ ).
75. 제92차 정부·언론외래어심의공동위원회 심의 결정안
(인명 52건, 일반용어 1건-재심의 2건)
• 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아
여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자
인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을
강조하는 디자인으로 유명함.
• 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA)
회장(1974~1998). 브라질 인.
• 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사.
일본 간사이(關西)학원 원장(2007. 4.~ ).
이건 외래어 심의위가 발표한
표기 심의 결정안 중 하나인데
76. 제92차 정부·언론외래어심의공동위원회 심의 결정안
(인명 52건, 일반용어 1건-재심의 2건)
• 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아
여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자
인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을
강조하는 디자인으로 유명함.
• 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA)
회장(1974~1998). 브라질 인.
• 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사.
일본 간사이(關西)학원 원장(2007. 4.~ ).
아버라, 암살러
그루블
심의위에서도 드물게
틀리는 경우가 있습니다.
77. 제92차 정부·언론외래어심의공동위원회 심의 결정안
(인명 52건, 일반용어 1건-재심의 2건)
• 아베라, 암살라 Amsale Aberra 1954(?1953)~ 에티오피아
여성 기업가·디자이너. 암살라(Amsale) 그룹 대표 겸 디자
인 총책임자. 유행을 좇지 않으면서 세련된 클래식 모던을
강조하는 디자인으로 유명함.
• 아벨란제, 주앙 João Havelange 1916~ 국제축구연맹(FIFA)
회장(1974~1998). 브라질 인.
• 그루벨, 루스 Ruth M. Grubel 1950~ 미국 교육가·선교사.
일본 간사이(關西)학원 원장(2007. 4.~ ).
아버라, 암살러
그루블
원 단어의 발음을 잘못 유추하는 바람에
표기를 잘못 정하는 경우가 종종 있다고 해요.
87. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
88. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
8년 전, 종성 님은 블로그에
이런 글을 쓰셨어요.
89. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
정기적으로 회의를 열어
용례를 정하는 것으로는 한계가 있다.
90. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
외래어 표기 심의 방식이 자동화되어
91. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
한글로 표기하고 싶은 외국어를 입력하자마자
한글 표기가 나와야 한다.
92. 강범모, 《언어: 풀어 쓴 언어학 개론》(2005)
잠깐 샛길로 빠지면, 제가 대학교 다닐 때
제일 좋아했던 강의는 〈언어학 개론〉이었거든요.
93. 강범모, 《언어: 풀어 쓴 언어학 개론》(2005)
언어학은 사람이 구사하는 언어를
연구하는 과학분야인데
94. 강범모, 《언어: 풀어 쓴 언어학 개론》(2005)
학생 절반이 수능시험의
언어영역 생각하고 들어왔다가
95. 강범모, 《언어: 풀어 쓴 언어학 개론》(2005)
첫 강의만 듣고 대거 취소했던 강의이긴 하지만
저에겐 인생 강의였습니다.
96. 강범모, 《언어: 풀어 쓴 언어학 개론》(2005)
언어학을 전공한 건 아니더라도
늘 덕심을 갖고 있었죠.
97. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
그런 전 종성 님의 이 글을 보고
깊은 감명을 받았어요.
98. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
외래어 표기법이 자동화되면
당장 저에게도 도움될 것 같았고
99. 정기적으로 회의를 열어 용례를 정하는 것으
로는 한계가 있다. 외래어 표기 심의 방식이
자동화되어 한글로 표기하고 싶은 외국어를
입력하자마자 한글 표기가 나와야 한다.
http://iceager.egloos.com/2610028
그걸 만드는 과정도
굉장히 재밌어 보였죠.
131. •뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
한자 "四川"의 경우
중국어 병음 "si chuan"으로 바뀌죠.
132. •뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
Phonemize 단계가 모든 언어에서
필요한 건 아니지만
133. •뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
중국어나 일본어처럼 뜻글자를 쓰는 경우엔
이 단계를 거쳐야만 한글로 옮길 수 있습니다.
134. •뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
이때 방대한 발음 사전이나
형태소 분석 같은 기능이 필요한데
135. •뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
여기에 어떤 라이브러리를 썼는지는
뒤에서 다시 소개하겠습니다.
136. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
137. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
두 번째 Rewrite 단계에선
일련의 패턴 찾아 바꾸기로
138. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
앞에서 넘어온 "si chuan"을
"si, chwan,"로 바꿔줍니다.
139. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
이 단계의 용도는
소리글자의 표음성을 강화하는 것인데
146. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
따라서 소리글자라고 해도 실제 소리에
1:1 대응되는 경우는 별로 없는데
147. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
한글로 옮기려면 의미가 아닌
발음이 필요하니까
148. •패턴 찾아 바꾸기
•표음성 강화
2단계: Rewrite
Rewrite TranscribePhonemize
si chuan
"{s}i" -> "i,"
si, chuan
"{h}uan" -> "wan"
si, chwan
"n$" -> "n,"
si, chwan,
이 단계에서 철자로부터
발음을 최대한 유추합니다.
275. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
세 번째 "a"에서도
같은 일을 반복합니다.
276. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
매치!
그러면 패턴 끝까지 도달한
가능성이 하나 나타나는데
277. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
매치!
바로 매치를 찾은 것이죠.
278. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
매치!
퇴각검색 방식을 쓰는
Spencer 류에서와 달리
279. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
매치!
Thompson 류에서 대상 문자열의 각 글자는
단 한 번씩만 읽히는데
280. Thompson 류
"aaa"
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
매치!
즉, 되돌아가는 일 없이
전진만 하는 것입니다.
281. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
282. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
이 벤치마크에서 Spencer 류가
탐색하는 가능성은 2ˣ개인데 반해
283. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
Thompson 류는
x+1개만 탐색합니다.
284. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
그래서 Spencer 류의 탐색 횟수는
지수적으로 증가하고
285. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
Thompson 류의 탐색 횟수는
선형적으로 증가하죠.
286. Spencer 류 Thompson 류
"aaa" "aaa"a? a? a? aaa
a? a? aaa
a? aaa
a? aaa
aaa
aaa
aaa
aaa
2ˣ a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
a?a?a?aaa a?a?a?aaa a?a?a?aaa
첫 번째 a 두 번째 a 세 번째 a
x+1
이 때문에 특정한 경우에 둘 사이에서
극단적인 성능차이를 볼 수 있습니다.