지난해 말에 <날개셋> 한글 입력기 6.71이 나온 지도 벌써 두 주가 넘게 지났다.
한 열흘 동안은 프로그램 소스를 고칠 일이 없이 나도 새 버전을 잘 썼다. 한글 입력과 관련하여 내가 속으로 구상하고 있는 최소한의 기술적 기반을 아주 탄탄히 갖춰 놓은 이 프로그램에 만족하면서 지냈다.
그러나 세월이 흐르면서 역시 프로그램에는 약점, 버그 내지 개선할 점이 발견된다.
그리고 지금 추세대로라면 다음 달쯤에 6.72 정도의 마이너 업그레이드 버전이 또 나와야 할 것 같다.
이 글에서는 2013년 1월 현재의 <날개셋> 한글 입력기의 개발 소식을 좀 전하도록 하겠다.
1. 사용자 정의 조합 제어판 UI에 프로그램이 뻗는 버그가 있음
먼저, 좀 어이없고 치명적인 버그가 발견되었다.
6.71은 제어판에서 '<날개셋> 고급 입력기'의 관할에 있는 '사용자 정의 조합'의 데이터를 조합 로직이든 후보 데이터든 고칠 수가 없다. 그걸 고치고 나면 데이터가 쓰레기값으로 바뀌고 프로그램이 죽는다.
본인은 한번 만들었던 코드를 그냥 내버려 두는 게 아니라 끊임없이 최신 코딩 스타일로 리팩터링을 하는 편인데, 그 과정에서, 해제해서는 안 되는 메모리를 부적절한 타이밍에 먼저 해제해 버리는 실수가 들어갔다.
이런 버그가 생긴 것을 유감-_-스럽게 생각한다.
2. 외부 모듈, 한글 첫 타가 덧나거나 끊기는 문제
<날개셋> 한글 입력기 외부 모듈은 특정 응용 프로그램에서 한글 조합 첫 타가 덧나거나 조합이 끊어지는 등, 제대로 인식되지 않는 문제가 종종 있었다. MS 오피스의 엑셀이나 파워포인트 등, 평상시에는 텍스트 편집 모드가 아닌데 한글 입력과 동시에 cursor가 나타나고 텍스트 편집 모드로 진입하는 프로그램의 경우 이런 오동작이 있는 편이었다.
그리고 최근에는 유명 공개 소프트웨어인 Paint .NET의 텍스트 입력 도구에서도 첫 타가 제대로 처리되지 않는다는 버그 신고가 있어서 이를 확인했다.
분석을 해 보니, 문제를 해결하는 방법은 간단하다. 이미 알려져 있는 방법론을 적용하면 된다. 그런데 문제는, 그 방법론은 다른 프로그램에서는 또 다른 오동작을 일으킨다는 것이다.
모든 프로그램에서 정확하게 잘 동작하는 해결책은 본인은 MS 한글 IME의 소스를 보지 않은 이상, 난 알지 못한다. 이게 사실은 IME의 개발과 관련해서 굉장히 골치 아픈 문제이기도 하다. 결국 현재 IME를 사용 중인 응용 프로그램의 이름에 따라 일부러 서로 다르게 동작하는 지저분한 꼼수를 동원할 수밖에 없었다.
그래서 Paint .NET에서 발생하는 그 문제를 어쨌든 해결은 했다. 그러고 보니 네이티브 코드 프로그램이 아닌 닷넷 기반 프로그램을 디버깅한 건 이번이 처음인 것 같다. .NET 프로그램은 EXE의 PE 헤더로는 x86용 32비트 프로그램이라고 명시되어 있어도, 64비트 운영체제에서는 결국 64비트 IME가 동작한다는 걸 알 수 있었다. 신기한 환경이다.
하지만 근본적인 문제를 해결한 게 아니라 응용 프로그램별로 인위적으로 문제를 피해 가게 한 것일 뿐이기 때문에, 앞으로 또 특이한 프로그램에서는 한글 첫 타와 관련된 문제가 여전히 있을 수 있다.
내가 나름 <날개셋> 편집기라는 에디터까지 다 만들어 봤지만, IME가 아닌 응용 프로그램의 관점에서 어떻게 해야 “첫 타를 그렇게 특이하게 처리하는 프로그램”을 만들 수 있는지를 모른다. 그래서 IME도 그렇게 불완전하게 만들 수밖에 없음을 밝힌다.
3. 윈8 지원은?
그리고 많은 사용자들이 기다리고 있을 Windows 8 환경의 지원에 대해서도 얘기를 하겠다.
결론부터 말하자면 잘 되고 있다.
윈8의 문자 입력 시스템은 이전 버전과 비교했을 때 크게 두 가지가 바뀌었다.
첫째, 스레드 단위로 모든 프로그램이 제각각 서로 다른 입력 언어와 한영 상태를 갖던 전통 관행을 깨고 모든 시스템이 동일한 입력 언어와 입력 상태를 공유하는 옵션이 추가되었다.
둘째, 입력 언어당 한/영 상태 같은 오로지 한 개의 버튼만을 갖는 극단적인 간소화 모드가 추가되었다.
이 두 옵션은 모두 기본적으로 “켜져 있다”.
거기에다 갑자기 무슨 바람이 들었는지 IME의 아이콘들의 배색을 전부 black & white 배색으로 바꿔 버린 건 부가적인 사항이고.
일단 개인적인 평을 말하자면 '둘째'의 경우 왜 지금과 같은 체계로 바꿨는지가 불만이며 좀 이해가 안 간다.
기존의 TSF language bar에도 개념적으로 간소화 모드는 있었다. IME는 도구모음줄에다 버튼들을 등록할 때, 간소화 모드에서도 표시되어야 하는 정말 중요한 아이콘에 대해서는 별도의 옵션 플래그를 주게 할 수 있었다.
그래서 도구모음줄을 우클릭한 뒤 '작업 표시줄에 아이콘 추가' 옵션을 끄면 중요한 아이콘만 표시되는 간소화 모드가 된다. 사실 이건 사용자를 오도하기에 충분할 정도로 말을 굉장히 이상하게 번역해 놓은 것이다.
뭐 아무튼.. 이것만 활용하면 아무 문제가 없을 텐데,
윈8은 또 자체적인 간소화 모드를 구현하기 위해서 IME가 별도의 카테고리 등록을 하고 아이콘을 추가로 등록해야만 하는 등, 굉장히 비생산적이고 번거로운 절차를 추가했다.
그래도 어쩔 수 있나.. 까라면 까야지. 어쨌든 윈8만의 간소화 모드를 지원하게 해서 데스크톱 모드에서 도구모음줄이 나오게 했고, 그리고...
메트로 앱에서 Win+Space로 입력기를 전환하여 <날개셋> 한글 입력기를 구동한 모습 인증샷이다. 올레!
나는 평가판을 쓰고 있어서 그런지, 디지털 서명을 안 해도 동작을 하긴 한다.
윈8 지원이 잘 되면.. 6.72가 아니라 8자에 맞춰서 다음 버전을 그냥 6.8로 올려 버릴 수도 있다.
사실, '메트로'라는 단어는 윈8이 나오기 전에 잠깐 쓰이다가 폐기된 용어이고 현재 MS에서 공식적으로는 Modern UI라고 부른다. 하지만 난 '모던 UI'보다 '메트로'가 훨씬 더 직관적으로 잘 와 닿는데 어떡하지? 마치 notification area vs '시스템 트레이'처럼 윈도우 운영체제에는 공식 명칭과 비공식 명칭이 따로 노는 요소가 몇 가지 더 있다.
전체 화면에서 돌아가고 단축키를 외워야 하는 등, 메트로 앱은 어찌 보면 옛날 도스용 프로그램으로 회귀한 듯한 느낌이다. 단지 도스 시절보다 하드웨어의 성능이 훨씬 더 좋고 앱 프로그래머가 직접 하드웨어를 저수준에서 제어해야 할 필요가 없을 뿐이다.
4. 기타
사소한 사항이지만, 도움말과 UI의 용어를 추가로 좀 교정한 게 있다.
그리고 도구모음줄이 세로로 길쭉한 작업 표시줄에 embed되어 있어서 버튼 아이콘들이 여러 줄에 걸쳐서 나열될 때, 아이콘들이 언제나 순서대로 위에서 아래로 순서대로 잘 표시되게 로직을 개선했다. 이것도 원래는 스펙대로만 만들면 운영체제가 보장을 잘 해 줘야 하는 건데 좀 사소한 잡음이 있었다.
지난 6.7 이래로 6.71의 다음 버전도 실질적인 '새로운 기능의 추가'는 없이 버그 수정, 최신 운영체제 지원, 데이터와 도움말의 개선 같은 변화만 있을 듯하다.
Posted by 사무엘