. 코드명 당근

여기까지 ApiEdit 컨트롤을 부지런히 만들어 왔는데 텍스트 편집에 필요한 기능들을 하나 둘씩 작성하고 재사용성을 위해 컨트롤 형태로 소스를 일차 정리하였다. 다음 단계는 이 컨트롤을 사용하여 실무에 쓸 수 있는 텍스트 편집 프로그램을 작성하는 것이다. , 최종 사용자들이 편리하게 쓸 수 있으며 반응이 좋으면 돈받고 팔 수도 있는 제품을 만들어야 한다.

소프트웨어 개발자는 반드시 판매를 목적으로 개발을 하지는 않는다. 하지만 프로그램이란 개발자 자신만을 위해서 만드는 것이 아니며 어쨌든 사용자(End User)를 위해 존재하는 것이므로 쉽게 설치해서 편리하게 사용할 수 있는 제품 형태로 최종 릴리즈를 해야 한다. 판매하는 상품이 될 것인가 아니면 아무나 쓸 수 있도록 공개하는 프리웨어가 될 것인가는 만들고 난 다음에 결정해도 되지만 개발과정에서는 최종 제품의 형태를 미리 염두에 두고 작성해야 하는 것이다. 사용자들이 컨트롤을 컴파일해서 쓸 수는 없지 않겠는가?

컨트롤을 만드는 것과 제품을 만드는 것은 작업 과정과 목표 등 여러 가지 면에서 다르다. 컨트롤은 프로그래머를 위한 것이므로 프로그래밍 인터페이스를 잘 설계해야 하지만 제품은 아무 것도 모르는 최종 사용자들을 대상으로 하므로 편리한 사용자 인터페이스에 중점을 두어야 한다. 누구나 보면 알 수 있는(Look and Feel) 직관적인 인터페이스를 설계해야 하며 게다가 쓰고 싶은 마음이 들 정도로 예쁜 모양을 가지면 더욱 좋다.

제품은 미리 작성된 기능을 제공하는 컨트롤()과 이 컨트롤을 감싸는 껍데기인 호스트로 구성된다. 컨트롤이 대부분의 기능을 제공하는 것(:IE)도 있고 호스트가 더 많은 기능을 제공하는 것(:탐색기)도 있는데 두 모듈의 기능이 완전히 통합되어야 하나의 완성된 제품이 된다. 그러기 위해서 컨트롤은 호스트가 쓰기 쉽도록 자신의 기능을 공개해야 하고 호스트는 컨트롤과 사용자를 연결시키기 위한 인터페이스를 잘 만들어야 한다.

ApiEdit는 아직도 더 많은 편집기능을 만들어야 하는데 지금부터는 사용자 인터페이스가 필요한 기능들이 많기 때문에 이 시점부터 호스트와 함께 만들어 나갈 것이다. 호스트가 있어야 최종적인 모양을 결정할 수 있으며 또한 기능이 제대로 수행되는지 정밀하게 테스트해 볼 수도 있다. 컨트롤만 따로 개발해서는 사용자를 위한 기능 설계를 하기 어렵다. 하지만 ApiEdit를 편집기와 통합 개발한다고 하더라도 항상 컨트롤임을 잊어서는 안된다. ApiEdit는 어떤 프로젝트에도 텍스트 편집 부품으로 사용될 수 있는 독립성을 유지해야 하며 개발중인 호스트의 전용 컨트롤이 되어서는 안된다.

제품을 만들려면 먼저 이름을 결정해야 하는데 이름은 제품의 간판이기 때문에 신중하게 잘 지어야 한다. 한 번이라도 이름을 지어 본 경험이 있다면 알겠지만 이 작업도 결코 쉬운 작업이 아니다. 좋은 이름을 가지고 있으면 대충 만들어 놔도 잘 팔리는 수가 있고 반대로 성의없이 이름을 붙여 놓으면 아무리 질이 좋아도 외면당하게 된다. 프로그램의 성격을 잘 표현하면서도 너무 길어서는 안되며 가급적이면 예쁜 이름을 붙여주고 싶다. 그러면서도 남이 이미 지어 놓은 이름과 충돌하지 않도록 주의해야 하며 등록상표 등의 법적인 문제까지 고려해야 한다. 또한 이 제품으로 사업을 하려면 인터넷 도메인도 미리 선점해두어야 하고 의장 등록도 해야 하고 신경쓸 것이 한 두 가지가 아니다.

이렇게 이름을 정하는 것이 어렵기 때문에 개발하는 동안 이름을 정하지 않고 최종 릴리즈할 때까지 미루는 경우가 많다. 하지만 이름이 미리 정해지지 않으면 곤란한 문제가 많아진다. 프로그램의 이름은 곧 프로젝트의 이름이 되는데 예를 들어 SuperEdit라는 이름을 붙였다면 프로젝트명은 SuperEdit.sln이 되고 이 프로젝트는 SuperEdit라는 폴더에 저장된다. 뿐만 아니라 이 프로젝트에 사용되는 모든 클래스나 변수, 대화상자 캡션 등에도 SuperEdit가 곳곳에 들어가게 될 것이며 매뉴얼이나 도움말에도 기록된다. 프로젝트를 백업할 때도 이 이름이 사용될 것이며 개발팀의 이름에도 프로젝트명이 사용된다. 이렇게 여러 곳에 사용되는 이름을 대충 지어 놓았다가는 중간에 바꾸기가 무척 어렵다.

그래서 개발 초기부터 프로젝트의 이름이 반드시 있어야 하는데 이를 코드명(Code Name)이라고 한다. 코드명이 정해지면 프로젝트, 클래스, 변수, 리소스, 함수 등에 활용되고 프로젝트를 관리할 때도 요긴하게 사용되며 개발이 완료될 때까지 이 프로젝트를 대표하는 이름이 된다. 코드명은 프로젝트의 이름이기 때문에 제품명과 일단은 다르다. 코드명이 그대로 제품명이 되는 경우도 있고 개발이 완료된 후 다른 제품명을 붙일 수도 있다.

이 책에서 만들고자 하는 프로그램도 지금 코드명을 정할 필요가 있다. 컨트롤 개발만 하는 것이 아니므로 더 이상 ApiEdit를 코드명으로 사용할 수가 없다. 이름을 정하기 위해 꽤 오랫동안 고심을 했었는데 결국 당근이라는 코드명을 붙여주었다. 만약 이 프로그램이 널리 사용된다면 사람들은 분명히 이 프로그램의 이름이 왜 당근이지?라고 물어볼 것이다. 사실 별 특별한 이유는 없고 왜 당근이라는 이름을 선택했는지는 정확하게 생각이 나지 않으며 언제부턴가 나 스스로 이 프로그램을 당근이라고 부르기 시작했다. 여러 가지 후보들이 있었지만 당근을 선택한 가장 큰 이유는 아마도 발음이 분명해서였던 것 같다.

이 이름이 최종 제품명이 될지 아닐지는 아직 알 수 없지만 어쨌든 나는 이 프로젝트를 당근이라고 부르기로 결정했으므로 여러분들도 이제 당근 그렇게 불러야 한다. 지금부터 만들게 될 프로젝트 이름은 당근의 영문 표기인 Dangeun이 될 것이다. 이름을 내 마음대로 붙일 수 있는 것은 개발자의 고유한 특권이다.