공개

Posted 2007. 2. 7. 02:22
요즘 제가 화두로 삼고 있는 것 중에 하나가 "정보 혹은 생각을 어디까지 공개할 것인가?"라는 질문입니다.

개인이나 작은 기업이 기발한 아이디어를 떠올립니다. 잘만 하면 큰 사업 기회가 될 수도 있을 것입니다. 전통적인 사업 방식이라면 이런 아이디어를 꼭꼭 숨겨두고 극비리에 추진해서 대박을 노리는 전략을 취하는 것이 옳은 일입니다. 하지만 이렇게 떠올린 대부분의 아이디어는 개인이나 작은 기업이 추진하기에는 무리인 경우가 많이 있습니다. 이런 경우 비장의 아이템으로 꼭꼭 숨겨두는 경우가 대부분인데, 그렇게 숨겨둔 생각만 가지고는 얻을 수 있는 이익이 실상 별로 없는 경우가 많이 있습니다.

괜찮은 아이디언데 내가 당장 실행할 수 없는 일이라면 차라리 내가 먼저 공개해버리는 것이 오히려 이익이라는 생각이 듭니다. 과거는 기업 보고서에서나 볼 수 있었던 내용들이 지금은 각종 블로그를 통해서 무료로 쏟아져 나오는 것도 이런 생각과 맞닿아 있을 것이라 생각합니다. 요컨대 내가 혼자서 소화할 수 없는 아이디어라면 먼저 공개해서 관련된 피드백을 받고 다른 사람들과 함께 기회를 만들 수도 있을 것입니다. 일례로 블로그 같은 경우는 매우 효과적인 이력서 역할을 하게 될지도 모릅니다. 내가 꾸준히 공개해 온 생각들이 결국 다른 사람들이 나의 능력을 신뢰할 수 있는 밑바탕이 되는 것이지요.

요즘은 가진 게 없는 개인일수록 더욱 다 자기 패를 적극적으로 보여주는 게 올바른 전략이 아닐까라는 생각이 드네요.


Trac의 실수: 정보 은닉의 실패

Posted 2007. 2. 2. 03:43
Trac는 현재 가장 많이 쓰이는 오픈 소스 이슈 트래킹(issue tracking) 도구 중에 하나입니다. Trac에서 각각의 이슈는 티켓(ticket)이라는 이름으로 관리합니다. 각 티켓은 버그 리포트가 될 수도 있고 해야 할 일이나 제안이 될 수도 있는데, 일반적으로 다음과 같은 항목을 가집니다.

  • id
  • time
  • changetime
  • component
  • severity
  • priority
  • owner
  • reporter
  • cc
  • version
  • milestone
  • status
  • resolution
  • summary
  • description

트랙은 이런 티켓을 묶어서 관리하는 방법으로 리포트(report)라는 개념을 사용합니다. 리포트는 특정 조건을 만족시키는 티켓 만을 보여주는 논리적인 뷰(view)라고 할 수 있습니다. Trac에서 View Ticket 메뉴를 누르면 Trac에 미리 정의된 리포트를 보여주는데 다음과 같습니다.


Report Title
{1} Active Tickets
{2} Active Tickets by Version
{3} Active Tickets by Milestone
{4} Assigned, Active Tickets by Owner
{5} Assigned, Active Tickets by Owner (Full Description)
{6} All Tickets By Milestone (Including closed)
{7} My Tickets
{8} Active Tickets, Mine first


이는 어떤 티켓을 보여줄 것인지 미리 정의해놓은 것입니다. 예를 들어 {7}번의 경우 나에게 할당된 티켓만을 보여달라는 옵션이고, {6}은 특정 마일스톤에 해당하는 티켓만 보여달라는 뜻입니다.

Trac는 이 시스템을 좀 더 확장해서 사용자가 원하는 리포트를 직접 작성할 수도 있도록 하였습니다. Trac의 리포트는 티켓이 저장되는 DB 테이블을 SQL 문으로 직접 얻어오는 방식을 사용합니다. 예를 들어, 모든 티켓의 모든 필드를 얻어오고 싶다면 select * from ticket이라고 입력해 주면 됩니다.

하지만 TracReports의 노트를 보면 이런 디자인 결정이 실수라고 이야기하고 있습니다. 티켓의 테이블은 세부 구현 사항에 해당하는데, 리포트를 구현하기 위해 티켓 테이블을 외부로 노출시켰기 때문입니다. 따라서 이후 버전에서 티켓 테이블의 구조를 변경해야 하거나 최적화가 필요할 경우 이를 수정할 수 있는 유연성이 떨어지게 되는 것이죠.

이 문제를 해결하기 위해 Trac은 원하는 티켓을 검색해주는 트랙 질의(Trac Query) 모듈을 별도로 만들었습니다. 트랙 질의 모듈은 티켓 테이블에 직접 접근하는 방식에서 벗어나 사용자가 원하는 정보를 몇 가지 필터를 적용해 얻어올 수 있도록 하였습니다. 티켓 테이블이라는 내부 구현을 숨겼기 때문에 이후 버전에서 변경의 용이성이 생긴 셈입니다.

Trac은 현재는 두 가지 버전(SQL 이용, 질의 모듈 이용)을 모두 지원하지만, 앞으로는 질의 모듈을 사용할 것을 강력히 권고하고 있습니다. 이는 정보 은닉(information hiding)과 관련된 잘못된 디자인이 소프트웨어의 유지 보수(maintenance)에 어떤 영향을 미치는지를 보여주는 좋은 사례라 할 수 있습니다.

DMDScript

Posted 2007. 1. 31. 05:40
D 언어로 알려진 Digital Mars 사에서도 EcmaScript 엔진을 만들어서 팔더군요. DMDScript라는 제품은 ECMA 262 스크립트 언어(네스케이프 구현은 자바스크립트, MS의 구현은 JScript로 알려져 있음)를 구현한 엔진입니다. D 언어를 만든 Digital Mars 사답게 이 엔진도 D 언어를 사용해서 만들었더군요.

D 언어 컴파일러를 설치하고, DMDScript를 컴파일해서 실행시켜보았는데, DMDScript에 포함된 "Sieve prime number calculation" 벤치마크 결과는 다음과 같습니다.

[1] 인터넷 익스플로러 7.0

Microsoft Internet Explorer ie
ScriptEngine JScript Build 5730

Eratosthenes Sieve prime number calculation


10 iterations
1899 primes
elapsed time = 938

[2] DMDScript 엔진

$ ./ds.exe sieve.ds
Digital Mars DMDScript 1.13
www.digitalmars.com
Compiled by Digital Mars DMD D compiler
Copyright (c) 1999-2007 by Digital Mars
written by Walter Bright
1 source files
10 iterations

1899 primes
elapsed time = 265

속도 차이가 대략 3.5 배 정도 DMDScript가 빠름을 알 수 있습니다.



** 벤치마크에 사용된 자바스크립트 소스 코드

/* Eratosthenes Sieve prime number calculation. */

size = 8190;
sizepl = 8191;

var flags = new Array(sizepl);

var i, prime, k, count, iter;

print("10 iterations\n");
starttime = new Date();
for (iter = 1; iter <= 10; iter++)
{   count = 0;
    for (i = 0; i <= size; i++)
        flags[i] = true;
    for (i = 0; i <= size; i++)
    {   if (flags[i])
        {   prime = i + i + 3;
            k = i + prime;
            while (k <= size)
            {
                flags[k] = false;
                k += prime;
            }
            count += 1;
        }
    }
}
elapsedtime = new Date() - starttime;
print("\n" + count + " primes\n");
print("elapsed time = " + elapsedtime + "\n");

벤치 마크에 사용된 소스 코드가 비교적 단순해서 쉽게 결론 내리기는 어렵지만, 기존 인터넷 익스플로러나 모질라에 포함된 자바스크립트 엔진이 상당한 개선의 여지가 있다는 생각이 드네요.


더불어 DMDScript의 라이센스는 GPL로 소스 코드는 공개 되어 있습니다. 상업적으로 이용하기 위해서는 DMDScript Commercial License를 구입해야 하는데, $999.00 이면 살 수 있고 별도의 로얄티(running royalty)는 받지 않는군요.


« PREV : 1 : ··· : 45 : 46 : 47 : 48 : 49 : 50 : 51 : ··· : 82 : NEXT »