소프트웨어의 디자인은 과연 유연한가? 그(it) 얘기

트랙백: 소프트웨어와 공학 - 달룟 님

흔히들 소프트웨어는 말 그대로 소프트(soft)한 무형의 제품이기 때문에 나중에 얼마든지 변경할 수 있다고 생각합니다. 그리고 그것이 소프트웨어의 하나의 특징이자 장점으로도 여기지고 있는게 사실입니다.

그러나.. 그건 착각일 뿐입니다.

소프트웨어가 무형이라고요?
천만에요. 그것도 엄연히 형태를 가지고 있습니다.

바로 코드(Code)라는 것으로 말이지요.

코드는 단순한 문자열이 덩어리가 아닙니다. 코드를 작성하는 행위 그 자체는 실제 건축을 하는 행위와 마찬가지입니다. 프로그래머가 코드를 한 줄 작성하는 것은 벽돌을 하나 쌓아 올리는 것과 마찬가지인 겁니다. 코드는 그 자체가 프로그램의 하나의 동작을 표현하는 것이고, 각 코드는 톱니바퀴처럼 서로 긴밀한 연관을 가지면서 움직이고 있는 겁니다. 때문에 이미 만들어져 있는 코드를 수정하게 되면 그 여파가 어떻게든 다른 코드의 동작에도 영향을 미치기 마련입니다. (물론 그 여파를 최소화하기 위해서 좋은 설계라는 것이 필요하긴 합니다.)

문서상에서 소프트웨어의 동작 하나를 수정하는 것은 매우 쉬운 일입니다. 해당 문장을 삭제하고 고쳐쓰기만 하면 되니까요. 하지만 코드상에서 그걸 수정하려면, 건축을 하는 도중에 설계를 변경하는 것 만큼이나 큰 비용을 지불해야 합니다. 코드 하나 수정하는게 뭐 그리 돈 드는 일이냐구요? 그 코드를 수정하는데 걸리는 시간 만큼 제품의 출시가 지연되고, 그러는 동안 프로그래머가 땅파먹고 살지는 않겠죠.

사소한 변경은 그런대로 잘 처리될지도 모르겠지만, 요구사항 수준의 변경은 개발 일정 자체를 흔들어 놓을 수 있습니다. 개발이 지연되면 지연되는 만큼 프로그래머를 먹이고 재우는 데 드는 비용도 추가되는 겁니다.

요구사항을 변경하려면, 적어도 그 내용이 코드로 옮겨지기 전에 하는 것이 바람직합니다. 소프트웨어의 유연성을 믿고 나중에 바꾸면 된다... 물론 그렇게 할 수는 있습니다. 하지만 그만큼 개발이 늦어지고 개발에 들어가는 비용 역시 증가하게 될 겁니다.

어쨌거나 모든 변경에는 돈이 든다는 것을 기억해야 할 겁니다.

덧글

  • 대나무 2006/09/13 12:31 # 답글

    소프트웨어는 도자기와 비슷하다고 생각됩니다. 처음 설계할때는 무른 흙과 같이 변경하기 쉽지만 일단 코드로 작성되고 나면 구워놓은 도자기와 같아서 수정하는것은 어렵지요.
  • kykisk 2006/09/13 12:37 # 답글

    문제는 갑은 그걸 모른다는거죠...=ㅅ=;;
  • Sikuru 2006/09/13 13:04 # 답글

    kykisk님 말씀이 막 가슴을 후벼팝니다. 털썩 orz
  • 스리 2006/09/13 13:10 # 답글

    소프트웨어라.. 전 프로그래밍 자체도 어려워요.. C고 VB고 HTML이고 배우긴 이것저것 배웠지만 개념 잡는 것도 힘들다는...[먼산]
  • 아르비드 2006/09/13 13:31 # 답글

    모르는 사람에게 설명할때는 소설쓰는거랑 비슷하다고 생각하라고 해야죠. 줄거리 바꿔야 된다고 생각하면, 전부 다시 쓰는거나 마찬가지. 코드는 그래도 유연하게 짠다고 짜지만, 결국 구조 바뀌면 난감해지는건 마찬가지.

    웃기는건 일부 프로그래머들은 저 유연한 구조가 필요 없는곳에도 억지로 넣어서 나중에 수정이 더 골때려지는 재미있는 현상도 나타나죠. ^^;
  • WizMasia 2006/09/13 14:49 # 삭제 답글

    최대한 초기 계획을 잘 해야..

    진짜로 수정하기는 힘든거니까요..(주석을 아무리 달아도 헷갈리는...)
  • 가이우스 2006/09/13 14:57 # 답글

    자기가 안다고 남들도 안다는 착각을 하지 않았으면 하는 경우가 많습니다...

    헝가리안 표기법까지는 안바라니까.. 주석이라도 잘 달았으면... 설계는 포기고..
    (학생들의 경우입니다만)

    팀 프로젝트할 경우에 진짜 난감한 경우가 많습니다...
  • 달룟 2006/09/13 15:13 # 답글

    우선, 흥분을 가라앉혀 주시기 바랍니다. 저의 글이 약간 과격하게 들렸을지도 모르지만, 소프트웨어가 수정비용이 들지 않는다는 말은 하지 않았습니다. "전통 산업에 비교하였을 때"라는 제한구를 항상 쓰고 있음을 알아주셨으면 하구요. 소프트웨어에 수정비용은 분명 있습니다. 수정에 돈이 들지 않는 분야가 어디 있겠습니까? 제가 말씀 드린 것은, 건축이나 전자제품의 경우와 비교했을 때는 상대가 되지 않는 정도라는 것입니다. 건축설계기사도 수정을 하려면 시간이 소요되고 거기에 따르는 인건비와 부대비용이 들겠죠. 하지만, 건축업에서는 기존 건물을 허물어야하고 폐기물을 처리해야하는 대규모 비용이 발생합니다. 이건 소프트웨어에는 없죠. 건축이나 전자산업에는 찾아볼 수 없는 XP라는 기이한 방법론이 유독 소프트웨어 업계에만 존재하는 것에 대한 이유가 있지 않겠습니까?
  • 달룟 2006/09/13 15:30 # 답글

    제가 2년간 근무했던 전자업체에서의 분위기를 말씀드리면, 제품 바디의 기구물 수정을 하려면, 금형을 다시 만들어야 하고, 그 때의 비용은 몇천에서 몇억이 들어갑니다. 회로를 살짝만 수정하려고 해도, SMT를 뜨는 비용 몇 백이 그자리에서 깨집니다. 어떤 부품을 다른 부품으로 바꾸려하면, 항구에 쌓아둔 부품들을 헐값에 팔고, 새 부품 견적을 다시 들어가야합니다.
  • 시즈하 2006/09/13 15:35 # 답글

    >> 달룟 님

    아, 그다지 반론하기 위해서 글을 쓴건 아니었습니다만, 생각나는대로 쓰다보니 문장체가 그리되어버린 것 같습니다.

    제가 말하고 싶은 건, 소프트웨어가 무형적 제품이라고 볼 수는 없지 않을까 하는 점이었는데 뒤에 사족을 좀 달다보니 어조가 강해졌군요.

    지금생각하면 굳이 트랙백까지 걸필요는 없지않나는 생각도 듭니다.

    오해의 소지가 있는 부분에 대해서는 사과드립니다. -_-
  • WizMasia 2006/09/13 18:11 # 삭제 답글

    약간의 오해는 오히려 더 친하게 만들 수 있는 원동력이 아닐까요?
  • 시즈하 2006/09/13 18:44 # 답글

    메신저에서 화해(?)했습니다. +_+
  • 2006/09/15 11:13 # 답글

    비공개 덧글입니다.
  • 은미 2007/01/11 10:31 # 삭제 답글

    이 글이 게재되었어요^^
    지난번 글이 너무- 반응이 좋더라구요

    이제는 [오피니언]이 아니라 [블로그뉴스]라는 섹션을 개설했답니다.
    앞으로는 뉴스-[블로그뉴스]로 오시면 볼 수 있을 꺼에요

    좋은하루 보내세요~
  • 시즈하 2007/01/11 21:41 # 답글

    또 실어주시다니, 감사합니다. ^^ >> 은미 님
※ 이 포스트는 더 이상 덧글을 남길 수 없습니다.