if ( 소프트웨어공학 == 건축학 ) ... 보통 소프트웨어공학을 건축학과 비슷하다고 합니다. 건축학에서 건물이 완성될 때 수요 분석, 설계, 시공, 검사, 유지보수로 단계를 거치듯이, 소프트웨어공학에서도 소프트웨어가 제품화(완성)될 때 고객의 요구사항 분석, 설계, 구현(코딩), 테스트, 유지보수단계를 거치게 됩니다.
건축학은 예전부터 내려온 학문으로 체계적으로 잘 정리가 되어 있고 시공만 제대로 하면 많은 시간을 할애할 필요가 없으며,소프트웨어공학은 시스템이 복잡해지면서 소프트웨어 신뢰성 저하, 개발비 증가되는 현상이 자주 발생(소프트웨어 위기)하여 이를 해결하기 위해 최근에 생겨난 학문으로 구현보다 유지보수 단계에 많은 노력이 필요하다는 것이 다른 점이라고 할 수 있습니다. 비록 건축학과 소프트웨어공학은 다른 점이 있지만, 소프트웨어공학이 건축학과 많이 비슷하다는 것은 부인할 수 없는 사실입니다.
현재 건축학의 많은 것들을 벤치마킹하여 소프트웨어공학에서 사용하고 있습니다. 예를 들면 건축가(Architect)에 해당하는용어를 소프트웨어 공학에서는 소프트웨어 아키텍트(Software Architect)라고 정의하고 있으며 요즘 들어 소프트웨어아키텍트의 존재와 역할이 중요하다고 시끌벅적대고 있습니다.
소프트웨어 공학이 발전하고 나뿐만 아니라 다른 개발자들이 관심을 가지고 있다는 사실을 기쁘게 생각하고 있지만, 소프트웨어 공학을 건축학에 비교하면서 소프트웨어 개발자를 건축학의 시공단계에서 일하고 계시는 분들(이 분들을 폄하하는 발언이 절대 아님을 밝혀드립니다.)과 비슷하다고 나도 모르게 각인하고 있는 안타까운 마음을 조금이나마 달래고 싶어 몇자 적어봅니다.
if ( 소프트웨어 개발 == 오케스트라 연주 ) ... 인류문명과 함께 발을 맞춰오며 소리를 통해 사람들에게 즐거움과 감동을 주는 음악처럼 소프트웨어는 정보화시대의 꽃으로서 사람들에게 즐거움과 감동을 주는 예술이라고 할 수 있습니다. 시스템이 점점 복잡해져 한 두 명이 아니라 수십명이 하나가 되어 개발하는 모습은 마치 오케스트라 연주를 연상하게 합니다. 두 눈을 감고 상상해 보시기 바랍니다.(정말 눈을 감고 있나요? 눈을 감았다면 순수한 마음을 가진 당신을 이시대 진정한 개발자로 임명합니다.^^) 같은 곡이라도 혼을 다해 연주한 오케스트라를 감상한 사람들이 더 많은 감동을 받듯이, 혼을 다해 개발한 소프트웨어는 더 많은 사람들에게 감동을 줍니다.
자 그럼 소프트웨어 개발과 오케스트라 연주가 무엇이 비슷할까요? 같이 알아보도록 하겠습니다.
수 십명의 연주자가 모여 관/현/타 악기(musical instrument)를 가지고 오케스트라를 연주하게 되듯이, 구현에 필요한 프로그래밍 도구(Tool, 언어:ASM, COBOL, Pascal, C, C++, JAVA, Haskell, Scheme, Ruby,Ocaml, ...)를 사용하여 코딩을 하게 됩니다. 악기 종류마다 같은 음을 내기위해 연주하는 방법이 다르며, 같은 음이라도 악기에 따라 특색이 있습니다. 프로그래밍 언어도 같은 결과를 얻기위해 표현 방법이 다르며, 패러다임이나 철학이 다릅니다. 또한 연주자에 따라 선호하는 악기가 차이 있듯이, 개발자에 따라 선호하는 악기도 다를 수 있습니다. 연주자들이 연주하기전 악기를 튜닝하는 모습은 개발자가 개발하기전 프로젝트에 관련된 용어나 정보를 습득하고 자기계발하는 것과 닮았습니다.
오케스트라 연주할 때 지휘봉을 가지고 음악 연주를 이끄는 지휘자는 연주자들에게 박자를 알려주고 악기나 성부가 들어가는 부분도 지적해줍니다. 지휘자처럼 프로젝트관리자는 프로젝트의 일정을 개발자들에게 알려주며 자원 투입시기를 알려 줍니다. 지휘자와 연주자의 호흡이 좋을수록 오케스트라 연주를 관람하는 사람에게 더 큰 감동을 주듯이, 프로젝트관리자와 개발자의 커뮤니케이션이 잘 되면 잘 될 수 록 고객에게 더 많은 감동을 줄 수 있는 소프트웨어를 개발할 수 있습니다. 오케스트라 연주를 통해서 오케스트라 단원의 호흡을 알 수 있듯이, 프로젝트팀의 팀웍은 프로젝트팀이 개발한 소프트웨어를 통해서 알 수 있습니다.
지휘자와 연주자만 있다고 훌륭한 오케스트라를 연주할 수 있을까요? 지휘자와 연주자 사이 호흡이 중요하다고 했습니다. 아름다운 오케스트라 연주를 위해 지휘자와 연주자 사이의 호흡을 어떻게 맞출 수 있을까요? 학교 다닐 때 처럼 여행이나 MT를 가는 것도좋은 방법입니다. 그러나 그런 방법은 외적호흡은 맞출 수 있지만 내적호흡은 맞출 수 없을 것입니다. 그럼 내적호흡은 어떻게 맞출수 있을까요? 내적호흡을 맞추기 위해서는 오로지 연습밖에 없습니다. 무엇을 연습해야 할까요? 당연히 오케스트라 연주할 곡일것입니다. 그 곡을 지휘자와 연주자가 서로 공유하기 위해서는 악보가 필요합니다. 이부분은 현악기 파트가 들어가서 처음에는 강하게 마지막 부분에는 약하게 연주해야 하고 현악기 파트 연주가 끝나면 목관악기 파트가 들어가야 한다는 것들을 악보를 보며 서로 공유하여 호흡을 맞추기 위해 연습해야 합니다. 악보는 지휘자와 연주자 사이 문자언어로 인터페이스 역할을 해줍니다. 이와 같이 소프트웨어개발에서도 프로젝트관리자와 개발자사이에 인터페이스 역할을 해주는 것이 있습니다. 바로 문서입니다. 문서를 바탕으로 서로 다른 이해관계자들(소프트웨어 개발에 관련된 모든 사람들)과 대화를 통해 계속 정제(RUP에서는 Iteration이라고 표현을 함)해야 악보를 가지고 피나는 연습을 한 오케스트라 연주처럼 훌륭한 소프트웨어 개발을 할 수 있습니다.
오케스트라 연주하는 것만으로도 대단한 예술이지만, 오케스트라 연주곡을 만드는 작곡은 예술중의 예술이라고 할 수 있습니다.(메타예술이라고나 할까요?^^) 백과사전에 보면 작곡을 아래와 같이 설명하고 있습니다.
음악활동은 작곡·연주·감상의 3부분으로 이루어지며 그 중에서도 작곡은 가장 근원적인 활동이다. 특수한 경우 작곡과 연주가 동시에 이루어지는 즉흥연주도 있다. 작곡의 주체는 일반적으로 특정한 개인이며, 작품에는 작곡자의 개성과 사상이 반영되고 표현의 독창성이 요구된다.
오케스트라 연주하기 앞서 지휘자와 연주자들이 이해할 수 있는 악보를 만드는 작곡은 소프트웨어 개발의 설계단계와 많이 닮았습니다. 소프트웨어 아키텍트는 요구사항에 대해 구현할 소프트웨어 시스템의 구성요소와 구성요소 사이의 상호작용에 대해 기술하는 문서(소프트웨어 아키텍처 기술서,건축세계에서 축소모형이나 청사진에 해당됨)를 작성하게 됩니다. 이 문서를 기반으로 개발자가 구현을 하게됩니다. 좋은 곡을 쓰기위해서는 화음을 기초로 선율을 조직하는 방법인 화성법을 배워야 한다고 합니다.(제 친구 말씀^^) 화성법처럼 좋은 설계를 하기 위해서는 패턴(아키텍처 패턴, 디자인 패턴 모두 해당된다고 할 수 있음)을 이해하고 있어야 합니다. 그런데 화성법 배우지 않아도 작곡할 수 있듯, 패턴을 모르더라도 문서를 작성할 수 있습니다. 또한 패턴에 너무 의존하는 것도 좋지 않습니다. 화성법보다 작곡가의 마음과 사상을 표현하는 것이 더 중요하듯, 너무 무리하게 패턴을 적용한 문서는 오히려 이해하는데 방해가 될 수 있을 뿐만 아니라 자칫하면 요구사항 영역을 벗어나는 문서가 될 수 있습니다.
전체 곡을 처음부터 끝까지 단번에 완성할 수 있는 그런 천재적인 작곡가도 있지만, 대부분 성부나 마디가 물이 흐르듯 자연스럽게 흘러가는지 생각(의심)하며 직접 연주해보기도 합니다. 이와 같은 모습은 특정 상황에서 특정 메소드가 제대로 돌아가는지 증명하는 단위테스트와 비슷하다고 할 수 있습니다. 그럼 최종 오케스트라 연주 전, 리허설을 하는 모습은 소프트웨어 개발과정에서 무엇과 비슷할까요? QA/QC팀에서 하는 통합 테스트나 전체 테스트와 비슷합니다.
완성도가 뛰어나고 많은 사랑을 받은 오케스트라 연주(곡)들은 후세에 또 다른 색으로 입혀지게 되듯(리메이크) 완성도가 뛰어나고 모듈화가 잘 된 소프트웨어는 다른 개발자들이 재사용하여 또 다른 소프트웨어를 만들기도 합니다.(개인적으로 개발툴로는 Emacs와 Eclipse가 완성도가 뛰어나고 모듈화도 잘 되어 있다고 생각합니다.)
else ...
지금까지 소프트웨어 개발과 오케스트라 연주의 비슷한 점에 대해서만 간략히 알아보았는데, 아래와 같은 차이점들이 존재합니다.
소프트웨어 개발의 설계는 많은 이해관계자들의 참여를 필요로 하지만, 작곡은 주로 작곡가 혼자만 작업을 하게 됩니다. 또한, 소프트웨어 개발의 유지보수단계가 많은 시간을 필요로 하는 반면, 오케스트라 연주는 시간예술이기 때문에 유지보수 단계가 필요 없습니다.
소프트웨어 개발과 오케스트라 연주를 조금 억지스럽게 비교하고 소프트웨어 개발과 오케스트라 연주가 조금 다르다는 것을 간과한 점이 있지만, 이 글을 통해 소프트웨어공학과 건축학을 비교하면서 생겼던 응어리를 나름대로 소프트웨어 개발을 예술로 승화시켜 없애보며(^^), 오늘도 한글과컴퓨터 개발본부의 오케스트라단원으로서 즐겁게 연주해봅니다.(가끔 실수도 합니다.^^)