- Medium 웹 편집기에서 폴란드어 대문자 Ś만 입력되지 않던 버그는 입력 관습, PC 수입 환경, 저장 단축키 습관, Windows의 Right Alt 처리 방식이 겹치며 발생함
- 폴란드어는 라틴 알파벳에 9개 발음 구별 문자를 더해 쓰며, 초기 PC 환경에서는 전용 키보드 대신 Alt+라틴 문자 조합을 쓰는 “programmer’s layout”이 사실상 표준이 됨
- Windows가 Right Alt를 내부적으로 Ctrl+Alt처럼 매핑하면서, Ś 입력에 쓰이는 Right Alt+S가 시스템 관점에서는 Ctrl+Alt+S처럼 보이게 됨
- Medium은 브라우저 저장 대화상자를 막으려고 Ctrl+S를 가로채 preventDefault()를 호출했지만, Alt 여부를 확인하지 않아 문자 입력 자체를 막아버림
- 수정은 Ctrl+S 차단 조건에 !e.altKey를 더하는 작은 변경이었고, 영어 26자 중심의 컴퓨팅 관습이 다른 언어 사용자에게 예외와 마찰을 만들 수 있음을 보여줌
Medium에서 사라진 Ś
- 한 사용자가 Medium에서 폴란드어 글을 쓰기 시작했을 때 다른 글자는 입력되지만 Ś만 입력되지 않는다고 보고함
- Medium은 특정 언어를 특별 취급하지 않았고, 폴란드어 32개 문자 중 왜 이 글자 하나만 문제가 되는지 처음에는 이상해 보였음
- 원인은 단일 기능의 결함이 아니라, 수십 년에 걸친 입력 방식과 운영체제 처리 방식이 겹친 결과였음
폴란드어와 추가 문자
- 폴란드어는 러시아어 다음으로 많이 쓰이는 슬라브어이며, 우크라이나어보다 앞섬
- 러시아어·우크라이나어와 달리 폴란드어는 영어/라틴 알파벳을 기반으로 하되 몇 가지 문자를 추가함
- 원래 폴란드어 단어에는 Q, V, X가 없지만, 라틴어와 차용어를 위해 유지됨
- 대신 라틴 문자를 바탕으로 한 9개 발음 구별 문자를 추가로 사용함
- 20세기 초 타자기는 이 추가 문자를 수용해야 했고, 일부 문자는 별도 키를 얻었지만 나머지는 숫자 키와 공유됨
- 대문자는 라틴 문자 입력 뒤 백스페이스로 돌아가 악센트를 덧입히는 방식으로 “시뮬레이션”되기도 함
- 추가 글자 공간을 마련하기 위해 세미콜론과 괄호 같은 문장부호가 희생되기도 함
공산권 폴란드의 PC 환경과 programmer’s layout
- 1980년대 폴란드의 초기 개인용 컴퓨터 환경은 가처분 소득 부족과 서구 컴퓨터의 상업적 수입 금지라는 제약을 안고 있었음
- 서구에서 들어온 컴퓨터는 원래 설명서, 번역되지 않은 소프트웨어, 미국식 키보드를 그대로 갖춘 경우가 많았음
- 프랑스와 독일 같은 국가는 타자기 배열을 반영한 맞춤 키보드를 받았지만, 폴란드는 미국식 키보드에서 9개 추가 문자를 입력할 방법을 찾아야 했음
- Ctrl은 이미 단축키로 널리 쓰였고 Alt는 상대적으로 덜 쓰였기 때문에, Alt 조합이 사실상 표준으로 자리 잡음
- 8개 발음 구별 문자는 대응하는 라틴 문자에 배정됨
- 나머지 하나는 가까운 위치의 키에 배정됨
- 기존 배열은 “typist’s layout”, 새 방식은 “programmer’s layout”으로 불림
- 초기 PC 사용자가 주로 프로그래머였기 때문일 수도 있음
- 프로그래밍에서 자주 쓰는 문장부호를 그대로 보존했기 때문일 수도 있음
- programmer’s layout은 왼쪽 Alt 하나로 가까운 키를 같은 손으로 눌러야 해 인체공학적으로 불편했지만, 하드웨어 개조나 스티커 없이 이해하기 쉬웠기 때문에 정착함
- 이후 전용 typist’s keyboard가 등장했지만 거의 아무도 바꾸지 않았고, 덜 이상적인 QWERTY가 널리 자리 잡은 상황과 비슷한 흐름을 보임
Ctrl+S 습관과 웹 편집기의 충돌
- 자동 저장이 일반화되기 전에는 문서를 직접 저장하는 습관이 중요했음
- 1980~1990년대의 저장 작업은 느리고, 디스크 같은 매체를 조금씩 닳게 하며, 때로는 CPU를 강하게 점유해 다른 일을 하기 어렵게 만들었음
- 사용자는 글을 쓰다가 숨을 돌릴 때마다 Command+S 또는 Ctrl+S를 누르는 습관을 익힘
- 어떤 사람은 문단마다 눌렀음
- 어떤 사람은 문장마다, 나중에는 몇 단어마다 눌렀음
- 웹 기반 편집기에서 이 습관은 브라우저의 현재 웹페이지 HTML 저장 대화상자를 띄우는 문제로 이어짐
- Medium도 과거에 이를 막기 위해 편집기 코드에서 Ctrl+S 또는 Command+S를 감지해 저장을 호출하고 기본 동작을 막았음
if ((e.metaKey || e.ctrlKey) && e.keyCode === goog.events.KeyCodes.S) {
this._editors.save()
e.preventDefault()
}
- 이 코드는 Mac의 metaKey 또는 Windows/Linux의 ctrlKey와 S가 함께 눌리면 편집기 저장을 실행하고, 브라우저 저장 대화상자를 막음
- 문제는 일부 환경에서 폴란드어 Ś 입력이 단순한 Alt+S처럼 보이지 않았다는 점임
Windows의 Right Alt 처리 방식
- Windows 3.x와 Windows 95는 메뉴 항목과 대화상자 컨트롤을 Alt+밑줄 문자로 빠르게 접근할 수 있게 했음
- 폴란드에서는 Alt가 이미 발음 구별 문자 입력에 쓰이고 있었기 때문에 Windows 단축키와 충돌함
- 키보드가 발전하면서 스페이스바 오른쪽에 보조 Alt 키가 생겼고, 왼쪽 Alt는 Windows 단축키에, 오른쪽 Alt는 폴란드어 입력에 쓰는 방식이 가능해짐
- 하지만 Right Alt 기능은 Alt 키가 하나뿐인 오래된 키보드에서도 가능해야 했기 때문에, Microsoft는 Windows 내부에서 Right Alt를 드물게 쓰이는 Ctrl+Alt 동시 입력 조합으로 매핑함
- 이 결정 때문에 폴란드어 Ś 입력에 쓰이는 Right Alt+S는 시스템 관점에서 Ctrl+Alt+S처럼 보이게 됨
- Medium의 Ctrl+S 차단 코드는 Alt가 함께 눌렸는지 확인하지 않았고, 결과적으로 Ś 입력을 저장 단축키 차단 처리처럼 가로막음
수정: Alt가 눌렸을 때는 Ctrl+S로 보지 않기
- 원인이 파악된 뒤 수정은 간단했음
- Ctrl+S를 무조건 막는 대신, Ctrl이 눌렸더라도 Alt가 눌리지 않았을 때만 막도록 조건을 바꿈
if ((e.metaKey || (e.ctrlKey && !e.altKey)) && e.keyCode === goog.events.KeyCodes.S) {
this._editors.save()
e.preventDefault()
}
- 변경 후 Right Alt+S 입력은 Ctrl+S 저장 차단 조건에 걸리지 않음
- Medium은 이 버그를 수정했고, 해당 조건문에는 이후 사람이 이해할 수 있도록 많은 주석이 붙게 됨
작은 조건문 뒤의 더 큰 문제
- 폴란드에서는 1989년에 공산주의가 무너졌고, 이제 컴퓨터는 개인과 회사 모두 합법적으로 수입할 수 있음
- 현재 폴란드에서 구매하는 Windows와 Mac은 폴란드어를 완전히 지원하고 운영체제도 현지화되어 있음
- 그럼에도 시스템 설정에는 여전히 programmer’s layout이 있으며, 두 배열 중 가장 흔히 쓰이는 쪽으로 남아 있음
- 이 작은 버그는 미국식 컴퓨팅 관습이 영어의 26개 비강세 문자를 중심으로 발전해 온 현실과 연결됨
- 폴란드어는 QWERTY의 파생 배열 사이를 옮겨 다니며 타협해야 했고, 영어와 더 멀리 떨어진 문자 체계를 쓰는 언어들은 더 불리한 조건에 놓일 수 있음