꽤 오랫동안 윈도 프로그래밍에서 떨어져 살다가 윈도폰은 어떨지 궁금해서 문득 윈도폰 하나를 중고로 구입해본 적이 있었다.
그게 NT 커널이 올라가있는 윈도폰 8.0 이었다. 세컨드 폰으로 장난감 다루듯이 사용해보려고.
시간이 좀 흐르고 BUILD 2014 행사에서 MS가 윈도폰 8.1을 발표했다.

그 때쯤 처음으로 윈도폰과 Windows Runtime 에 관심을 가지고 진지하게 책을 읽어보기 시작했다.
Build 2014 에 나오는 대부분의 비디오를 다운받아서 봤는데 Windows Runtime 기반으로 한번 앱을 만들어보는 것도 좋겠다는 생각이 들었다.

마침 회사에서는 윈도폰을 위한 카카오톡을 새로 만들기로 결정을 했기 때문에 나도 꼽사리를 껴서 같이 만들어 보기로 했다.

오래 전에는 윈도 개발에 익숙했기도 하고 이것저것 아는 것들도 조금 있었기 때문에 처음에는 그리 오래 걸리지 않을 작업이라고 쉽게 생각했었는데 막상 Windows Runtime 과 부딪혀보고는 곧 쉬운 일이 아니라는 걸 깨달았다.
기존에 알고 있었던 네이티브 지식들과 Win32 Api 지식들은 거의 도움이 되지 않았다.

Windows Runtime 의 새로운 프로세스, 패키지 데이터, 네비게이션 모델 등을 다 새로 공부해야만 했다.
닷넷은 책으로만 보고 작은 프로그램들 정도만 작성해봤었는데, 처음으로 정교한 프로젝트에 맞딱드려보니 UI 와 데이터를 유지보수하기 쉽도록 바인딩하는게 쉽지 않아 고생을 많이 했었다.
또 Task 기반 프로그래밍 역시 책으로 이해한 것과는 달리 실제로 적용해보면서 꽤 많이 해맸었던 것 같다.
대부분의 라이브러리들이 윈도폰용의 Windows Runtime 을 지원하지 않거나 지원 준비중이 었기 때문에 스트레스를 받기도 했다.

무엇보다 나를 괴롭혔던 것은 Windows Runtime 이라는 새로운 환경 자체였다.
아무리 책과 MSDN 을 보고 잘 이해했다고 생각을 하고 코드를 짜도 전혀 기대하지 않은 동작을 해서 미궁에 빠졌을 때가 여러번 있었다.
새로운 환경에 부딪히면서 일을 할 때 이렇게 미궁에 빠지게 되는 때의 원인은 다음과 같은 경우들이 있는 것 같다.

  1. 프로그래머 자신은 잘 이해했다고 생각했지만 실제로는 잘 이해하지 못하고 있었다.
  2. 문서에 정보가 애매하거나 빈약하게 써있어서 이해하기가 쉽지 않았거나 혹은 문서에 정보가 적혀있지 않았다.
  3. 기반 프레임워크에 버그가 있었다.

나는 대부분의 문제는 1번에서 발생한다고 생각하는(사실은 거의 확신) 편인데, 이번 프로젝트에서는 2번과 3번의 문제가 더 많았던 것 같다.
정보를 얻을 수 있는 곳이 없어서 정말 많은 실험과 해킹을 하면서 답을 알아낸 경우가 많이 있었고, 윈도폰 자체의 버그 때문에 Windows Phone 8.1 Update 1이 나오고 나서 자연스레 해결된 문제들도 있었다.
어떤 문제는 아직도 해결되지 않아 Windows 10 에서나 해결될 수 있을 거라는 답변도 받았다.

예전에 Win32 Api 들을 다룰 때는 MSDN이 정말 잘 쓰여진 문서시스템이라는 생각을 했었는데, 닷넷 쪽과 Windows Runtime Api 문서들을 보면서 생각이 좀 바뀌었다.
파이썬이나 루비 온 레일즈와 같은 오픈소스 언어/프레임워크 들의 문서화가 훨씬 더 잘되어 있는 것 같다.
Windows Runtime 용 샘플 코드들 또한 매우 조잡한 수준이었다.

그럼에도 불구하고 (수많은 삽질로 인해 시스템에 익숙함을 갖게된 상태에서 바라보면) 기존의 Win32 프로그래밍 환경과 비교했을 때, 프로그래밍은 많이 쉬워졌다.
닷넷의 풍부한 모든 기능들을 사용할 수 있고, 레이아웃을 다루는 일과 화면 해상도에 따른 대응도 쉬워졌다.
클라이언트 프로그램을 작성할 때는 UI를 멈추지 않게 작성하는 것이 아주 중요한데, C#의 Task 기반 프로그래밍과 Windows Runtime의 Api 들은 이를 쉽게 가능하게 만들어주는 것도 좋은 점 중의 하나였다.

이런 저런 고생들을 하며 지난 달에 Windows Runtime 으로 완전히 새롭게 태어난 카카오톡을 오픈하고 애프터 서비스를 좀 하다가 얼마 전 다시 서버팀으로 돌아왔다.
이제 윈도우즈로 개발 할 일이 또 거의 없어져서 집에서 사용하던 랩탑은 Windows 10 으로 새로 설치해버리고 새 운영체제를 조금씩 알아가고 있는 중이다.
API 가 어떻게 바뀌었는지는 아직 잘 모르겠지만 사용자 입장에서 봤을 때, 모던앱들이 창크기가 변경 가능하다는 점은 정말 편리한 것 같고, 이제서야 뭔가를 모던앱을 만들어보는 것도 좋겠다 하는 생각이 처음으로 든다.

함께 읽으면 좋은 글: