SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our User Agreement and Privacy Policy.
SlideShare uses cookies to improve functionality and performance, and to provide you with relevant advertising. If you continue browsing the site, you agree to the use of cookies on this website. See our Privacy Policy and User Agreement for details.
Successfully reported this slideshow.
Activate your 14 day free trial to unlock unlimited reading.
5.
•야생의 땅: 듀랑고
•카트라이더 코인러시
•카트라이더 대시
넥슨 왓 스튜디오 서버아키텍트
저는 넥슨 왓 스튜디오에서
서버아키텍트를 맡고 있고
6.
•야생의 땅: 듀랑고
•카트라이더 코인러시
•카트라이더 대시
넥슨 왓 스튜디오 서버아키텍트
얼마 전 〈야생의 땅: 듀랑고〉를
출시했습니다.
7.
•what-studio/profiling
•sublee/trueskill
•what-studio/tossi
•hangulize/hangulize
오픈소스
2744
385
110
53
개수는 2018년 9월 6일 기준
8.
•what-studio/profiling
•sublee/trueskill
•what-studio/tossi
•hangulize/hangulize
오픈소스
2744
385
110
53
개수는 2018년 9월 6일 기준
한편으론 틈틈이
오픈소스 활동도 하고 있어요.
9.
•what-studio/profiling
•sublee/trueskill
•what-studio/tossi
•hangulize/hangulize
오픈소스
2744
385
110
53
개수는 2018년 9월 6일 기준
제가 주축이 된 오픈소스 프로젝트 중에
별이 많은 것만 한 번 추려봤는데
10.
•what-studio/profiling
•sublee/trueskill
•what-studio/tossi
•hangulize/hangulize
오픈소스
2744
385
110
53
개수는 2018년 9월 6일 기준
이 중에선 가장 별이 적은
〈한글라이즈〉가 오늘 발표의 주제입니다.
62.
ピカチュウ일본어
▶ 피카츄
때론 표기법대로 쓰는 게 불편할 수도 있어요.
일본어 이름인 "피카츄"의 경우
63.
ピカチュウ일본어
▶ 피카추
외래어 표기법에 따르면
"츄"가 아닌 "추"로 표기해야 합니다.
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.~ ).
아버라, 암살러
그루블
원 단어의 발음을 잘못 유추하는 바람에
표기를 잘못 정하는 경우가 종종 있다고 해요.
81.
•세계의 말과 글
•끝소리
박종성
@iceager
종성 님은 "세계의 말과 글"이라는 블로그와
"끝소리"라는 페이스북 페이지에서
82.
•세계의 말과 글
•끝소리
박종성
@iceager
외래어 표기법이나 여러가지 언어에 대한
글을 연재하고 계세요.
83.
•세계의 말과 글
•끝소리
박종성
@iceager
연재하는 글이 굉장히
깊고 재밌으니
84.
•세계의 말과 글
•끝소리
박종성
@iceager
혹시 이 발표가 흥미롭다면
한 번 들어가 보길 추천해드립니다.
85.
•세계의 말과 글
•끝소리
외래어 심의 위원
박종성
@iceager
종성 님은 작년부터는
글 연재 이외에
86.
•세계의 말과 글
•끝소리
외래어 심의 위원
박종성
@iceager
외래어 심의위 위원으로도
활동하고 계십니다.
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
그걸 만드는 과정도
굉장히 재밌어 보였죠.
119.
gore> :import "github.com/hangulize/hangulize"
gore> hangulize.Hangulize("rus", "Владивосто́к")
"블라디보스토크"
새 한글라이즈
2018년 5월-
"새 한글라이즈"는 8년 만인
지난 5월부터 만들었어요.
120.
gore> :import "github.com/hangulize/hangulize"
gore> hangulize.Hangulize("rus", "Владивосто́к")
"블라디보스토크"
새 한글라이즈
2018년 5월-
옛 한글라이즈처럼 Go 환경에서
쓸 수 있는 간단한 라이브러리죠.
121.
lang:
id = "rus"
codes = "ru", "rus"
english = "Russian"
korean = "러시아어"
script = "cyrillic"
macros:
"@" = "<vowels>"
vars:
"cs" = "б", "в", "г"
전사 규칙 .hgl 파일
rewrite:
"град" -> "град-"
"^ль" -> "л-ь"
"ый" -> "ы"
transcribe:
"б" -> "ㅂ"
"л," -> "-ㄹ"
test:
"Ольга" -> "올가"
"Пётр" -> "표트르"
새로 구현하면서는 전사 규칙도 코드 대신
이런 텍스트파일로 정의할 수 있게 설계했는데
122.
lang:
id = "rus"
codes = "ru", "rus"
english = "Russian"
korean = "러시아어"
script = "cyrillic"
macros:
"@" = "<vowels>"
vars:
"cs" = "б", "в", "г"
전사 규칙 .hgl 파일
rewrite:
"град" -> "град-"
"^ль" -> "л-ь"
"ый" -> "ы"
transcribe:
"б" -> "ㅂ"
"л," -> "-ㄹ"
test:
"Ольга" -> "올가"
"Пётр" -> "표트르"
정해진 틀 안에서 쓰다 보니
버그가 발생할 여지도 적고
126.
四川 쓰촨
이번엔 한글라이즈의 원리를 살펴보기 위해
중국 지명인 "쓰촨"을 예로 들어보겠습니다.
127.
Rewrite TranscribePhonemize四川 쓰촨
한글라이즈 파이프라인
한글라이즈에 한자 "四川"이 입력되면
128.
Rewrite TranscribePhonemize四川 쓰촨
한글라이즈 파이프라인
일련의 파이프라인을 통과해
최종적으로 "쓰촨"이 되죠.
129.
•뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
파이프라인의 첫 단계는
Phonemize 단계인데
130.
•뜻글자를 소리글자로
•사전
•형태소 분석
1단계: Phonemize
Rewrite TranscribePhonemize
四川 si chuan
여기선 뜻글자를
소리글자로 바꾸는 작업을 합니다.
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,
이 단계의 용도는
소리글자의 표음성을 강화하는 것인데
140.
표음성
신도림행 열차
지옥행 급행열차
표음성 극대화 형태학적 표기
신도리맹 녈차
지오캥 그팽녈차
여기서 "표음성"이란
141.
표음성
신도림행 열차
지옥행 급행열차
표음성 극대화 형태학적 표기
신도리맹 녈차
지오캥 그팽녈차
소리글자가 실제 소리에
대응되는 정도를 뜻합니다.
143.
표음성
신도림행 열차
지옥행 급행열차
표음성 극대화 형태학적 표기
신도리맹 녈차
지오캥 그팽녈차
한 눈에 의미를 파악하긴 더 어렵죠.
144.
표음성
신도림행 열차
지옥행 급행열차
표음성 극대화 형태학적 표기
신도리맹 녈차
지오캥 그팽녈차
그래서 철자법에선 오른쪽처럼
표음성을 희생하고
145.
표음성
신도림행 열차
지옥행 급행열차
표음성 극대화 형태학적 표기
신도리맹 녈차
지오캥 그팽녈차
대신 단어의 형태와 어원을
살리는 경우가 많습니다.
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,
이 단계에서 철자로부터
발음을 최대한 유추합니다.
153.
•한글 자모로 변환
•패턴 찾아 바꾸기
•외래어 표기법 구현
3단계: Transcribe
Rewrite TranscribePhonemize
si, chwan,
"wan,?" -> "ㅘ-ㄴ"
si, chㅘ-ㄴ
"i," -> "ㅡ"
sㅡ chㅘ-ㄴ
"ch" -> "ㅊ"
sㅡ ㅊㅘ-ㄴ
"s" -> "ㅆ"
ㅆㅡ ㅊㅘ-ㄴ
Transcribe 단계도 Rewrite 단계와 마찬가지로
일련의 패턴 찾아 바꾸기로 이뤄져 있습니다.
154.
Rewrite TranscribePhonemize四川 쓰촨
한글라이즈 파이프라인
si chuan si, chwan, ㅆㅡㅊㅘ-ㄴ
마지막으로 나열된 자모들을
한글 글자로 모아쓰기하면 전사가 완료돼요.
155.
아제르바이잔어
벨라루스어
불가리아어
카탈로니아어
체코어
중국어
웨일스어
독일어
그리스어
에스페란토어
에스토니아어
핀란드어
고대 그리스어
세르보크로아트어
헝가리어
아이슬란드어
이탈리아어
일본어
일본어최영애-김용옥
조지아어제1안
조지아어제2안
라틴어
라트비아어
리투아니아어
마케도니아어
네덜란드어
폴란드어
포르투갈어
브라질 포르투갈어
루마니아어
러시아어
슬로바키아어
슬로베니아어
스페인어
알바니아어
스웨덴어
터키어
우크라이나어
베트남어
웨일스어중세
156.
아제르바이잔어
벨라루스어
불가리아어
카탈로니아어
체코어
중국어
웨일스어
독일어
그리스어
에스페란토어
에스토니아어
핀란드어
고대 그리스어
세르보크로아트어
헝가리어
아이슬란드어
이탈리아어
일본어
일본어최영애-김용옥
조지아어제1안
조지아어제2안
라틴어
라트비아어
리투아니아어
마케도니아어
네덜란드어
폴란드어
포르투갈어
브라질 포르투갈어
루마니아어
러시아어
슬로바키아어
슬로베니아어
스페인어
알바니아어
스웨덴어
터키어
우크라이나어
베트남어
웨일스어중세
한글라이즈엔 현재 일본어, 헝가리어 등
총 40개의 전사 규칙이 들어있어요.
212.
/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-
]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-
x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-
]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-
5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-
9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-
x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])/
이메일 정규표현식
http://emailregex.com/
텍스트 매칭하는 데에 다들
한 번 쯤은 써보셨을 것 같아요.
213.
/(?:[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:.[a-z0-9!#$%&'*+/=?^_`{|}~-
]+)*|"(?:[x01-x08x0bx0cx0e-x1fx21x23-x5bx5d-
x7f]|[x01-x09x0bx0cx0e-x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-
]*[a-z0-9])?.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|[(?:(?:25[0-
5]|2[0-4][0-9]|[01]?[0-9][0-9]?).){3}(?:25[0-5]|2[0-4][0-
9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[x01-x08x0bx0cx0e-
x1fx21-x5ax53-x7f]|[x01-x09x0bx0cx0e-x7f])+)])/
이메일 정규표현식
http://emailregex.com/
정규식 엔진엔 몇 가지
알고리즘이 있지만
270.
Thompson 류
"aaa"
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
첫 번째 a
반면 Thompson 류 정규식 엔진은
대상 문자열의 각 글자에 대해서
271.
Thompson 류
"aaa"
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
첫 번째 a
가능한 선택지를
모두 평가하면서 전진해요.
272.
Thompson 류
"aaa"
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
첫 번째 a
대상 문자열의 첫 번째 "a"의 경우
패턴의 세 /a?/ 중 어디에도 매치될 수 있고
273.
Thompson 류
"aaa"
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
a?a?a?aaa
첫 번째 a
첫 번째 리터럴 /a/에도 매치될 수 있어서
총 4가지 가능성을 가집니다.
274.
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"에 매치해보고
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
이 때문에 특정한 경우에 둘 사이에서
극단적인 성능차이를 볼 수 있습니다.
287.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
288.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
하지만 일반적인 경우 Spencer 류 정규식 엔진도
충분히 빠르게 동작해요.
289.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
패턴만 안전하게 짜면 Thompson 류만큼
안정적으로 쓸 수 있죠.
290.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
그리고 정규식 기능 중엔
퇴각검색으로만 구현할 수 있는 것도 있어서
291.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
이쪽의 정규식 표현력이
훨씬 좋습니다.
292.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
그래서인지
펄과 PCRE, 파이썬을 비롯해
293.
•평균적으론 충분히 빠르고
•표현력이 더 좋아요.
•펄, PCRE, 파이썬, 루비, 자바
Spencer 류
오늘날 수많은 정규식 엔진이
이 방식을 쓴다고 해요.
294.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
하지만 Spencer 류
정규식 엔진을 쓰는 서버가
295.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
만약 사용자 입력으로 정규식 패턴을 받는다면
얘기가 달라집니다.
296.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
공격자가 정규식 엔진에서
최악의 경우를 이끌어내는
297.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
악의적인 정규식 패턴으로
ReDoS 공격을 가할 수 있거든요.
298.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
구글에서도 ReDoS 공격에 대한
우려가 있어서
299.
/(a+)+/
/([a-zA-Z]+)*/
/(a|aa)+/
/(a|a?)+/
ReDoS 공격
Thompson의 정규식 알고리즘을 기반으로
RE2를 만들게 됐다고 합니다.
300.
2부에서 계속…
슬라이드셰어에 슬라이드 300장 제한이 있어서
부득이하게 2부로 나눠서 올렸습니다. 보는 데
불편하시겠지만 양해를 부탁드립니다.