[Code Complete 2] 소프트웨어에서의 비유

Date:     Updated:

카테고리:

태그:

소프트웨어를 포함해 특정 학문을 배울 때 어려운 이론을 쉽게 이해할 수 있는 방법으로 비유가 있습니다. 하지만, 비유는 완벽하지 않고, 어떨때는 비유 때문에 정답에 가까워질 수 없게 될 수도 있습니다. 하지만 그러면서도 비유를 하는 이유는 단점보다는 장점이 훨씬 많기 때문입니다. 이번 포스팅에서는 Code Complete2 의 저자가 소프트웨어를 만드는 것에 대한 비유와 해당 비유의 한계를 이야기 합니다.

가장 먼저 건축 비유가 있습니다. 건축은 요구사항을 설계도로 만든 뒤 뼈대를 세우고 마감재를 입히며 최종 완공에 이르는 과정이 폭포수 모델과 닮아 있습니다. 이 비유는 체계적이고 예측 가능한 개발 과정을 강조하며, 일정 관리에 유리하고 결과물이 확정적일 때 강력한 힘을 발휘합니다. 하지만 소프트웨어는 건물과 달리 완성 후에도 계속 변해야 하고, 초기 설계가 잘못되면 수정 비용이 기하급수적으로 늘어난다는 문제가 있습니다. 그래서 변화와 실험이 잦은 프로젝트에서는 이 비유가 오히려 발목을 잡기도 합니다.

두 번째는 요리 비유입니다. 요리는 재료를 섞고, 맛을 보고, 양념을 조절하면서 완성도를 높여가는 과정으로 반복적이고 점진적인 개발 방식과 닮았습니다. 이 비유의 장점은 중간 결과를 빠르게 확인할 수 있고 조정과 실험이 자유롭다는 점입니다. 덕분에 팀원들이 협업하기 쉽고 창의적인 접근도 가능해집니다. 그러나 명확한 레시피, 즉 요구사항이 없다면 산으로 갈 위험이 있고, 규모가 커질수록 일관성을 유지하기 어려운 한계도 있습니다. 그래서 이 비유는 애자일 개발이나 프로토타이핑 같은 환경에서 특히 잘 맞습니다.

마지막으로 원예 비유가 있습니다. 소프트웨어는 한 번 만들고 끝나는 것이 아니라 계속 관리하고 다듬어야 하는 생명체에 가깝습니다. 정원을 가꾸듯 잡초를 뽑고 가지치기를 하듯 리팩터링과 기술 부채 관리를 꾸준히 해줘야 하죠. 이 비유는 장기적으로 시스템을 운영하고 개선해야 하는 프로젝트에서 특히 설득력이 있으며, 지속적 배포(CI/CD) 환경에서 팀이 왜 꾸준한 관리와 개선이 필요한지 이해시키는 데 유용합니다.

스티브 맥코넬은 한 가지 비유에만 의존하지 말라고 조언합니다. 어떤 프로젝트는 건축처럼 탄탄한 설계가 필요하고, 어떤 프로젝트는 요리처럼 빠른 실험과 반복이 중요하며, 또 어떤 프로젝트는 원예처럼 지속적인 관리와 성장이 중요합니다. 따라서, 한가지의 비유에 매몰되지 않고 유연한 사고를 하며 프로젝트 및 프로그래밍 공부를 하는것이 중요합니다.

Code Complete 카테고리 내 다른 글 보러가기

댓글 남기기