조엘(’조엘 온 소프트웨어’) 아저씨는 소프트웨어 팀의 역량을 간단히 테스트할 수 있는 ’조엘 테스트’라는 것을 소개합니다. CMM 같은 역량측정기준이 있기는 합니다만, 솔직히 대부분의 팀에겐 과분합니다. 이웃집 5살짜리 꼬마의 지능을 테스트한다고 수능시험 문제지를 들이민다고 생각해보십시오. 하긴 가끔 교육열이 과한 나머지 이해할 수 없는 짓을 하는 학부모도 있긴 합니다. 한동안 SI업계에서 CMM 열풍이 불었던 것을 생각하면 우리네 현실도 그다지 다르지는 않은 것 같기도 합니다. 조엘 테스트는 12개의 단순한 항목으로 구성되어 있습니다. 오늘은 이 중에서 소스버전 관리시스템에 대해 생각해보려 합니다.
사례
제가 현재 회사에 입사한 후 버전관리 시스템을 사용하는 사람이 아무도 없다는 사실에 무척 놀랐습니다. (지금도 저 혼자만 SubVersion을 사용하고 있긴 합니다. 그 당시의 상황을 한마디로 요약하자면 ‘재앙’이었습니다. 개인이 하나의 프로젝트를 맡는 방식이 많았기에 코드 충돌 등의 문제는 거의 없었습니다. 그러나 상황은 최악이었습니다. 몇가지 사례를 들어볼까요?
웹프로그래머인 모모군은 경리팀의 요청을 받아 정산 관련 페이지를 수정합니다. 1시간을 꼬박 투자해서 간신히 완성이 됐고, 흐뭇한 마음에 경리팀으로 달려가는 그의 마음은 가볍습니다. 그러나 전직 프로그래머 출신인 깐깐해 부장은 오늘도 트집을 잡습니다. 자신이 원하는 바가 아니었다며 다시 원래대로 고쳐달라고 합니다. 불쌍한 모모군은 화가 나지만 말단 사원인 자신을 탓할 뿐입니다. 수정 전의 페이지를 돌리려 웹서버에 접속한 그는 또한번 속이 탑니다. 작업 전에 웹페이지를 복사해두는 것을 잊었습니다. 누구를 탓하겠습니까. 다시 한번 1시간을 소모해서 간신히 복원하는데 성공했습니다. 백업만 받아놨다면 1분이면 되었을 것입니다. 여러분은 모모군의 신중하지 못한 성격을 탓할 수도 있을 것입니다. 그러나 이러한 문제를 개인의 잘못으로만 돌린다면, 문제는 반복해서 발생할 것입니다. 당신은 문제의 근원을 제거하고 싶지 않습니까?
이번에 당신은 회사의 주력 제품인 MSM 메신저의 유지 보수 및 업그레이드를 맡게 되었습니다. VS 로 소스 코드를 열어본 순간 숨이 탁 막힙니다. 에베레스트 산을 등산하면 이렇게 된다고도 합니다만, 당신의 사무실이 위치한 역삼역 주변은 그다지 높은 곳이 아닙니다. 소켓 통신을 위한 구조체가 정의된 파일을 봅니다. 도대체 패킷의 종류가 수백 가지는 되는 것 같습니다. 행의 수만 1만이 넘습니다. 도대체 어디에 써먹는 것인지 궁금합니다. 어느 파일을 봐도 상황은 마찬가지입니다. 이쯤되면 뭐가 뭔지 모르겠고, 앞이 캄캄합니다. 1시간쯤 소스 코드를 들여다본 당신은 무엇이 문제인지 깨닫습니다. 아하, 예전에 사용한 코드를 지우지 않고 남겨두었군요. Publish라는 함수의 예전 버전은 Publish_라고 바꾸어놨습니다. Commit 함수의 예전 버전은 주석처리를 해놨습니다. 언젠가 다시 사용할지 모른다고 남겨둔 것 같습니다만, 당신에겐 미스테리 하나가 더 남겨졌을 뿐입니다. 완전히 쓰레기가 널린 고속도로에서 차를 모는 꼴입니다. 곰곰히 생각한 결과, 모든 사용하지 않는 코드를 지우기로 합니다. 꼬박 이틀이 걸렸습니다. 하지만 이젠 좀 쓸만합니다. 이전 소스 코드에 비해 절반으로 줄어들었고, 발에 채이던 큼지막한 쓰레기통도 치웠습니다.
위의 두 예제가 극단적이라고 생각하십니까? 그렇다면 여러분은 축복받은 환경에서 일하시는 것입니다. 당신의 행운을 축하드립니다. 저는 실제로 위의 두 사례를 보고, 겪었습니다. 소스버전 관리시스템을 사용했다면 겪지 않아도 될 일이었습니다. 여전히 완고한 저의 동료와 상사들은 소스버전 관리시스템을 사용하지 않습니다만, 저는 이 시스템에 대한 확신이 있습니다. 적어도 제가 작업하는 일에 있어서는 위의 문제는 발생하지 않습니다. 이 시스템을 사용한다면, 여러분이 야근해야 하는 날이 줄어들 것입니다. 야근이 많다고 불평만 하지 마시고, 소스버전 관리시스템을 사용하십시오.
버전관리프로그램 소개
요즘 잘 나가는 버전관리프로그램를 소개해 드리자면 Subversion이 있습니다. 가장 널리 인정받는 cvs와 사용법은 거의 유사합니다. 사실 subversion외의 프로그램은 거의 사용해보지 못했기 때문에 자세히 말씀드릴 수는 없습니다. subversion에 대해 더 알고 싶다면 다음을 잠조하십시오.
http://svnbook.red-bean.com/
http://www.pyrasis.com/main/
추신?
Garrett Rooney의 저서 Subversion이 6월에 번역 출간될 예정입니다. 저도 이 책을 통해 svn에 대해 본격적으로 공부해볼 생각입니다.