본문 바로가기

지앤선 이야기

[한글화 프로젝트] 4. 설계 지구력 가설



 


번역가 : 박성철


월간 라디오와 모형의 마이컴 강좌를 시작으로 컴퓨터 프로그래밍에 빠져서 지금까지 시간 가는 줄 모르고 살았다. 현 SK 플래닛 개발팀 팀장으로 멋진 팀원의 덕을 보며 잘 지내는 중이며 한국 SW 개발 문화를 개선하는 데 관심이 많다.


원문링크



설계 지구력 가설Design Stamina Hypothesis


소프트웨어를 잘 설계하려고 수고할 가치가 있을까?


이따금 소프트웨어를 설계하는 활동이 가치 있는지 따지는 (진심을 숨긴) 간접적 대화를 나눈다. 이 대화가 간접적이라고 한 이유는 소프트웨어 설계가 무의미하다고 말하는 사람과 마음이 맞은 적이 없기 때문이다. 흔히들 목표를 내년에 달성하려면 정말 빨리 움직여야 해서 설계 활동을 일부 축소했다는 식으로 해명한다.


속도를 높이려면 설계를 포기할 수 있다는 의견이 있다. 사실 난 오히려 속도가 떨어지더라도 프로그래머의 행복을 지키기 위해서 설계에 힘을 기울이도록 한다는 말에는 여러 번 감명 받았다.


설계에 노력을 기울이는 바람에 프로그래밍의 효율성이 떨어진다면 난 설계에 반대할 것이다. 사실 난 대부분의 소프트웨어 개발자도 그 같은 상황이라면 설계에 반대할 것으로 생각한다. 좋은 설계가 정확히 무엇을 말하는지 개발자마다 생각이 다를 테지만, 개발자들은 자신이 선호하는 어떤 설계가 생산성을 높여준다고 믿기 때문에 그 설계를 지지한다. (그리고 여기서 말하는 설계란 프로젝트 초기 단계에 하는 선행 설계나 애자일의 방식 모두를 뜻한다. 계획이나 진화적 설계 모두 말이다.)


설계 활동에는 확실히 시간과 노력이 들어가지만, 나중에 소프트웨어를 개선하기 쉽게 해주기 때문에 허사가 아니다. 설계를 등한시해서 잠시 시간을 벌 수는 있어도, 기술 부채가 누적돼 나중엔 생산성이 떨어질 것이다. 소프트웨어를 개발하면서 설계에 노력을 기울이면 프로젝트의 지구력이 개선되어 더 오래 더 빠르게 진행할 수 있게 된다.


이를 한 가지 방법으로 시각화하면 다음과 같은 유사 도표가 된다.



유사 도표에, 두 가상의 전형적인 프로젝트에서 시간이 지남에 따라 개발되는 기능의 누적 건수를 그렸다. 하나는 좋은 설계를 하고 하나는 설계를 하지 않는다. 설계하지 않는 프로젝트는 선행 설계나 애자일 기법 중 어떤 설계 활동에도 노력을 기울이지 않는다. 설계 활동에 들어가는 수고가 없어서 초기에는 프로젝트가 빠르게 진행된다.


설계에 노력을 기울이지 않아서 설계 없이 개발하게 되면, 코드 기반이 악화되고 수정해지기 어려워져서 생산성이 떨어진다. 생산성은 도표에서 선의 기울기로 나타난다. 좋은 설계가 상대적으로 생산성을 일정하게 보존하기 때문에 어느 지점부터는 설계 없는 프로젝트의 누적 기능 개수를 따로 잡고 차이가 점점 더 벌어질 것이다.


이 생각을 가설이라고 하는 이유는 이런 현상이 실제로 일어났다는 객관적인 증거가 없는 추측이기 때문이다. 실험으로 증명하기 어려우므로 과학의 관점에서는 그리 좋은 가설이 아니다. 우리는 생산성을 측정할 수 없을 뿐 아니라 설계 품질도 측정할 수 없다.


비록 가설일 뿐이더라도, 나를 포함해 많은 사람에겐 공리이기도 하다. 이런 효과가 일어난다는 객관적인 증거는 확보할 수 없겠지만, 우리 중 대부분은 이 가설이 우리가 실무에서 질적으로 관찰한 현상을 설명해 준다고 느낀다. 이 가설은 소프트웨어 설계 관련 저자로서의 내 전 경력을 떠받치는 가정이므로 나에겐 공리이다. 설계가 어떤 형태로든 실질적으로 생산성을 개선하지 않는다면, 내 저술 대부분이 의미 없다.


가설을 공리로 취급하다니 많은 사람에겐 낯선 얘기일 것이다. 하지만 이는 흔하게 행해지는 일이다. 난 내가 분별력을 가지고, 가설의 객관적 약점을 무시하지 않고도, 이 가설을 참으로 평가하는지 살핀다. 가설을 증명할 방법을 찾고 싶은 만큼이나 반박할 방법도 찾고 싶다.


이 가설의 설계 상환선에서 도출되는 추론이 하나 있다. 초기 출시에 필요한 기능의 수가 설계 상환선 이하라면, 설계 품질을 속도와 맞바꿀만할 것이다. 하지만 선 이상에서의 맞교환은 착각이다. 설계 상환선을 지나쳐서 출시하는데도 설계에 소홀하다면 출시는 항상 늦어지게 된다. 기술 부채의 관점에서 이는 대출 받아 생긴 자본을 오래 묵혀 두는 바람에, 이자를 더 많이 지출하게 된 경우와 같다.


이렇게 추론하고 나면 이 선의 위치가 어디인지 궁금해진다. 설계 지구력 가설을 받아들이는 사람 사이에도 분기선이 있는 위치에 대해 상당한 (그리고 현저한) 견해 차이가 있다. 나는 대부분 사람의 생각보다 훨씬 아래, 보통 한 달을 넘지 않는, 수 주 정도라는 입장이다. 하지만 이 역시 개인의 견해일 뿐이다.


이로써 기술 부채와 관련된 결론에 다다르게 된다. 기술 부채는 나도 자주 사용하는 멋진 유비이다. 하지만 설계 상환선은 특정 지점까지만 기술 부채를 질 가치가 있음을 상기시킨다. 출시로 얻을 가치가 갚을 이자보다 큰지 아닌지를 고려해야 할 뿐 아니라, 출시 시점이 상환선을 넘는지도 처음부터 판단해야 한다.