brunch

You can make anything
by writing

C.S.Lewis

by Cylogic Apr 04. 2019

아주 오래전 개발 프로젝트 이야기.

코딩 수업에 글 올리기를 한동안 쉬었다.

주제와 방향을 조금 바꾸어 진행해 보고 싶었기 때문이다.


그런데 너무 오래 쉬다 보면 아주 쉴지 모른다는 생각에 흔히 "아무 말 대잔치"라고 이야기하는 수다 한마디 하는 시간을 갖고, 다음 글을 이어가려고 한다.

초보 개발자들의 입장에는 도움이 될 수도 있을 것 같아서 이다.



과거에 내가 아무런 경험 없이 진행했던 두 가지 프로젝트에 대해 이야기해 본다. 

두 가지 모두 내가 전혀 경험하지 못한 OS(운영체계)에서 내가 전혀 경험하지 못한 데이터 구조를 가지고 진행한 프로젝트이다.



소프트웨어 개발로 할 수 있는 일을 "문제 해결"과 "대용량 데이터 처리" 두 가지로 나눌 수 있다고 이야기한 적이 있다. 물론 두 가지가 혼용되어 개발을 해야 하는 경우가 대부분이다.


따라서 모든 일은 잘 구조화된 "자료"를 만들고 이를 잘 이용하여 "문제를 해결"하는 것이 일반적이다.

이러한 과정을 어떻게 진행했는가와 내가 좀 더 잘할 수 있었던 부분까지 생각해 보는 시간을 갖겠다.



1. 90년대 초반에 매킨토시용 한글 폰트의 외곽선을 추출하여 그래픽 작업에 이용하게 하는 프로젝트.


- 프로젝트의 배경 : 

독자 여러분들 입장에서는 아득한 예전일 수 도 있는 1990년대에는 매킨토시 컴퓨터에 한글 트루타입이나 오픈 타입 폰트가 탑재될 수 없었다. 그래서 포토샵이나 아도비 일러스트레이터에서 한글 글자를 가지고 작업을 하려면 정말 복잡한 과정을 거쳐야 했다. 물론 지금은 그냥 타이프하면 한글 글꼴의 아우트라인이 나오지만 말이다.

그 당시 이 프로젝트를 요청했던 분은 매킨토시 대리점을 크게 운영하던 분이었고, 우리 회사가 우리나라에서 처음 개발한 디지털 폰트를 일괄 계약해준 분이다.

단 한 번도 매킨토시 프로그램을 해본 적이 없는 나였지만, 거부할 수 없는 요청이었다.


- 개발 도구 결정 :

당시 나는 C 이외의 프로그램으로 단기간에 프로젝트를 완성할 능력이 없었다.

그런데 윈도우즈에서 사용하던 C와 흡사한 구조를 가진 C  컴파일러가 매킨토시에 존재했다. 

THINK C라는 프로그램이었다. 대안을 찾을 수 없었다.


- 개발 방법 결정 :

짧은 시간에 매킨토시 시스템 내부를 이해하는 것은 불가능했다.

또한 TTF 나 PostScript 글꼴 내부에서 Outline을 추출하는 것 역시 쉽지 않은 일이었다. 

(주어진 시간은 2개월이 되지 않는 짧은 기간이었다.)

따라서 글꼴 정보를 Adobe Illustrator에서 읽을 수 있는 범용 PostScript로 변환하여 작업이 가능하도록 보여주는 방법을 택했다.


- 데이터의 구성 :

이때 자료구조론의 중요성이 발휘된다.

나는 모든 글자 자소를 PostScript 데이터로 변환하여 저장하고, 이 데이터를 글자별로 Index를 만들고 이를 불러와 화면에 보이는 방법을 택하기로 했다. (약간은 불편 하지만 성공적으로 요청한 프로젝트의 완성이 가능했다.)


-결론 :

나는 이 프로젝트를 요청받을 당시 

매킨토시, 

폰트의 데이터 구성, 

PostScript 파일의 구성 등 


어느 것도 모르는 상황이었지만, 


C 언어를 이해했었고,

프로젝트를 논리적으로 풀어 나가 프로젝트를 완성했다.


당연히 여기서 만들어진 프로그램의 라이브러리는 차후에 수많은 프로젝트에서 사용되었다.

아무것도 모르고 시작한 프로젝트였지만 원칙에 충실하면 문제를 풀 수 있음을 이야기하고자 하는 것이다.

그러나 본 프로그램의 한계는 내가 만든 폰트에 한해서만 이러한 작업이 가능하다는 것이었다.

그리고 TTF나 OTF가 일반화된 이후에는 이러한 프로그램은 존재할 필요도 없는 것이다.





2. 초기 안드로이드 태블릿에 언어 사전들을 개발하는 프로젝트.


- 프로젝트의 배경 : 

벌써 10년 전 이야기이다.

IOS과 안드로이드가 개발되어 전 세계에 스마트폰이 보급되고, 다양한 앱이 개발되기 시작했던 시절... 회사 내부에 단 한 명의 안드로이드 프로그래머도 없었는데,  모 전자에서 개발하는 최초의  안드로이드 태블릿에 기본 번들할 국어, 영한영, 중한 중, 일한일 사전을 개발해야 했다. 앞서 동일한 출판사의 사전 엔진을 C++ 언어로 개발했지만, 안드로이드는 완전히 새로운 운영체계였고, 나는 불행히도 자바 프로그램 경험이 전무했다.

시간은 3개월...


- 개발 도구 결정 :

당시의 안드로이드는 이클립스가 유일한 개발 환경이었다.

여기에 제조업체에서 지정한 UI를 기반으로 한 플러그 인들을 설치하고, 외부에 전혀 공개되지 않은 시제품 태블릿 한대만이 개발을 위한 모든 장치였다.


- 개발 방법 결정 :

제일 먼저 고민했던 부분은 사전 데이터를 얼마나 콤팩트 하게 줄이고, 그 데이터에 대한 보안을 잘 유지하느냐 였다. 사전 데이터는 수백 메가바이트의 크기를 가지고 있으므로 이를 어떻게 구조화하고 이용할지는 사전 프로그램의 근간이 된다. 

기존에 나와 있는 다양한 DB 사용방법과 보안 방법에 대해 추후에 알게 되었지만, 당시에는 타사의 툴을 검색하기보다는 내가 직접 툴을 만들어 사용할 생각을 했다. 

앞서 아이폰용 사전 엔진을 내가 직접 개발했으므로 이 엔진을 자바로 변경하거나, C 언어 상태의 라이브러리로 사용하는 방법을 강구했다.

다행히도 내가 만든 검색 툴은 사용이 불편했지만, 속도가 일반 DB기반 검색 속도에 뒤지지 않았다.

안드로이드의 다양한 기능을 알지 못했기 때문에 코딩 중 막히는 부분이 있으면 예전에 함께 일했던 다른 직원들에게 연락하여 도움을 청했고 큰 도움이 되었다.


- 데이터의 구성 :

여기서도 자료구조론의 중요성이 발휘된다.

앞선 프로젝트에서 글자 자소의 데이터를 보관하고 인덱스 하는 것과 마찬가지로 사전 데이터도 표제어와 해설 부분을 연결하는 인덱스를 만들고 이를 기반으로 자료를 콤팩트 하게 구성하였다.

필요에 따라 데이터를 분리하기도 하고 합치기도 하여 검색 속도가 떨어지지 않도록 만들었다.

당연히 자료가 어떻게 구성되어 있느냐에 따라 데이터 처리 속도는 크게 차이가 난다.


- 수행의 어려움:

이 프로젝트 당시에 나를 가장 괴롭혔던 부분 두 가지...

첫째, 내가 앱 프로그램들의 "라이프 사이클" - 어떻게 프로그램이 로딩되고 어떻게 진행되다가 어떻게 메모리를 벗어나서 종료되는지를 완벽히 이해하지 못하고 프로그램을 시작한 부분이었다.

언제든 새로운 운영체계에서 코딩을 시작하려면 그 운영체계가 프로그램을 어떻게 처리하여 수행하는지를 잘 이해해야 한다는 것을 다시 한번 명심하게 해 준 프로젝트였다.


두 번째, UI/UX에 대한 이해 부족 - 각 화면과 프로그램의 유기적 작동을 위해서는 플랫폼 개발업체가 제시하는 UI/UX 가이드라인을 잘 이해하고 있어야 하는데, 이에 대한 이해를 하지 못한 상태에서 프로젝트를 진행하여, 여러 번 인터페이스 부분의 코딩을 뒤집어엎어야 했다.

또한 이미 개발된 다양한 라이브러리에 대해서도 정보가 충분하지 않았던 것이 프로젝트 진행을 어렵게 만든 이유였다. 특정 플랫폼에 대한 도전을 준비한다면 관련된 많은 정보를 받아들이기 위해 부단히 노력해야 한다.


-결론 :

사전은 다양한 영역이 통합되어 수행되는 프로그램이다.

 

UI/UX를 어떻게 만들 것인가는 앞서 말한 바와 같이 아주 중요한 요소이다. 모든 프로그램 프로젝트가 그러하지만 디자이너들과의 긴밀한 업무가 무척이나 중요하다.

또한 각종 발음기호나 사전에서만 사용되는 특수 기호들은 모두 폰트로 처리하여야 했고, 이를 위해 사전용 전문 폰트 한 세트를 개발해야 했다. 사용자 정의 영역의 코드를 어떻게 배분할지는 아주 중요한 결정 사항이다. 

조판도 중요하다. 특정한 사전 요소 부분을 어떠한 폰트, 어떠한 크기, 어떠한 색으로 표현해야 사용자가 편할지 항상 고려하여야 한다.


이렇게 다양한 분야에 대한 지식과 협력이 있어야 좋은 프로그램 하나가 탄생하게 되는 것이다.


프로그래머는 논리적 사고를 가지고 다양한 영역에 대한  넓고 깊은 지식이 필요한 직업이다. 그래서 쉽지 않을 것이다 ^^




두 가지 모두 완벽히 성공한 프로젝트라고는 이야기하지 않겠다.

단, 새로운 플랫폼에서 새로운 애플리케이션을 만드는 과정을 어찌 진행하는지를 이야기하고 싶었을 뿐이다.

각 프로젝트에서 있었던 수많은 난관과 그 극복에 대한 이야기는 다음 기회에 좀 더 자세히 이야기해 보겠다.


다음 이야기부터 코딩 수업은 완전히 새로운 플랫폼에서 하드웨어와 소프트웨어를 오가는 형태의 이야기를 진행해 보려고 한다. 

게으름 신이 다시 내게 강림하지 않기를 바라며...

매거진의 이전글 최대공약수, 최소공배수 구하기 #2 - 코딩수업#19
브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari