2009년 2월 28일 토요일

사라진 소스코드

바이너리는 있는데 소스코드는 없어서 낭패를 보신 적은 없으신가요?

소스코드 백업은 흔히 소홀히 하기 쉽습니다.
사고가 발생한 후에야 문제가 되고, 사고가 그렇게 자주 발생하는 것은 아니죠.
자주 발생하지는 않지만, 일단 발생하는 타격이 아주 큽니다.
일상 생활에서는 보험을 들지만, 소프트웨어를 개발하는 현장에서는 보험을 드는 격인 백업을 제대로 하는 경우는 흔히 보기 어렵습니다.

소스코드는 이러한 경우에 흔히 사라지거나 깨지게 됩니다.
이 때 백업이 없으면 낭패가 됩니다.

  • HDD는 그리 드물지 않게 깨집니다. 그냥 운영 중에 HDD가 깨져버리는 경험은 많이들 있을 겁니다.
  • 장비를 사무실 내에서 옮기거나, 회사가 이사를 갈 때는 HDD가 깨지는 경우가 더 흔합니다.
  • 컴퓨터바이러스 등의 악성 코드에 의해서 데이터가 파손되거나 시스템이 망가질 수 있습니다.
  • 번개나 전기 공사중의 시스템에 과도한 전류 등의 문제로 시스템이 망가지는 경우
  • 화재, 지진, 홍수 등의 재난으로 시스템이 완전히 망가질 수 있습니다.
  • 시스템이나 HDD를 도난 당할 수 있습니다.
  • 개발자가 개발을 하다가 실수로 소스코드 전체 혹은 일부 파일을 삭제할 수 있습니다.
  • 여러 개발자가 파일서버에서 동시에 개발을 하다가 실수로 다른 개발자가 개발해 놓은 내용을 무시하고 싹 Overwrite를 해버릴 수 있습니다.

그래서 소스코드를 백업을 받아야 하는데, 아래와 같이 불완전하게 백업을 받으면 완벽한 보험장치가 될 수 없습니다.
  • 소스코드를 보관하고 있는 시스템을 RAID로만 구성하고 별도로 백업 받지 않음
  • 소스코드가 보관되어 있는 시스템의 다른 디렉터리에 파일을 복사해서 백업
  • 사내의 다른 시스템에 미러링 또는 정기적으로 복사
  • 소스코드는 소스코드관리시스템에 있지만, 또한 각 개발자들의 PC에도 일부 또는 전체가 있어서 소스코드관리시스템이 망가져도 어딘가에는 소스코드가 있다. 
  • 주기적으로 DVD로 백업을 받아서 사내에 보관
  • 사내에 소스코드는 팀 별로 여러 시스템에 보관이 되어 있는데, 팀 별로 알아서 스스로 백업을 받는다.

위의 경우 대부분의 사고에도 소스코드를 복구할 수 있겠지만, 화재가 발생 한다면 백업 받아 놓은 DVD도 같이 싹 타버릴 것입니다. 실제로 911테러나 고베 대지진 때 수많은 회사들이 백업 데이터가 없어서 문을 닫은 경험들이 있습니다. 이런 큰 사건이 아니라고 하더라도 화재 등의 사건은 발생할 수 있고, 회사는 화재에 대한 보험을 거의 다들 들고 있습니다. 하지만, 그런 화재보험이 소스코드를 복구 시켜 주지는 않습니다. 대부분의 회사가 화재를 경험하는 일은 평생 없겠지만, 누군가는 겪게 되고, 화재 뿐만 아니라도, 서두에서 언급했던, 백업이 필요한 수많은 경험들은 한번씩은 해봤을 겁니다. 
그래서 백업은 아래와 같이 3단계로 이루어져야 합니다. 

기본적으로 소스코드관리시스템을 사용한다는 전제하에 설명을 하겠습니다. 그래야, 최종 소스뿐만 아니라 소스코드 History도 모두 보관을 할 수 있습니다. 아래 활동은 개발팀마다 각각 수행하면 안되고, 회사가 아무리 커도 전체소스코드를 한군데서 관리를 하며 백업도 한번에 받아야 합니다. 


  • 소스코드관리시스템은 RAID를 구성하거나 실시간 미러링 시스템을 만들어서 시스템 장애 시 항상 복구가 가능해야 합니다. 이는 시스템이 항상 작동하도록 해줍니다.
  • 소스코드관리시스템은 하루에 한번 DVD등의 미디어에 Incremental 백업을 받아야 합니다. 그리고 백업 받은 DVD는 사내에 보관합니다. Incremental 백업은 크기가 크지 않으므로 그리 오래 걸래지 않습니다. 이는 시스템이 망가져도 적어도 24시간 이전의 소스코드로 돌아갈 수 있도록 해줍니다.
  • 소스코드관리시스템은 일주일에 한번 DVD로 Full 백업을 받아서 회사 외부의 안전 장소에 보관을 해야 합니다. 안전한 장소는 은행의 안전금고 등이 될 수 있습니다. 이는 회사가 완전히 불타서 없어져도, 적어도 일주일 전의 소스코드로 완전히 복구를 해줍니다.
소스코드를 안전하게 백업을 받았다가 불의의 사고 시 복구를 한다고 해도, 소스코드를 가지고 제품을 만들어 내는데 일주일 또는 수주가 걸린다고 하면 안됩니다. 백업의 목표는 소스코드 복구 후 24시간 안에 원래 제품을 그대로 만들어 낼 수 있어야 합니다. 그러기 위해서는 정확한 개발환경, 빌드환경, 테스트환경 정보가 문서에 기록이 되어서 소스코드관리시스템에 같이 보관이 되어 있어야 하고, 빌드는 완전히 자동화 되어서 빌드환경 구성 후 빌드 스크립트만 실행하면 제품이 만들어지도록 준비가 되어야 합니다. 

이 정도가 되어야 제대로 된 백업을 받고 있다고 할 수 있습니다. 

뭐, 백업을 이정도까지 완벽하게 받는냐?라고 반문하시는 분이 계실지 모릅니다. 

그런 분이 질병 보험을 들면서, 한달에 보험료를 3만원만 내면, 감기, 골절 등 대부분의 질병은 다 보장이 되는데, 암 등의 죽을 수 있는 병은 보장이 안된다고 하면 어떻게 생각하시겠습니까? 
또, 죽을 병이 보장이 되려면 보험료를 4만원을 내야 한다고 하면 어떻게 하시겠습니까? 나는 절대 암에 걸리지 않을 거야 하고 3만원만 내시겠습니까?  아니면 암에 꼭 걸릴 것을 예상하고 4만원을 내십니까? 
대부분은 암에 절대로 걸리지 않을 것이라고 생각하면서도 일단 암에 걸리면 타격이 크니, 4만원을 보험료로 내는 선택을 할 겁니다.

백업도 마찬가지입니다. 절대로 화재나 지진등의 사고는 발생하지 않을 것이지만, 대비를하는 것입니다. 그 대비 비용이 사고 발생 후의 피해 보다는 훨씬 작기 때문입니다.

보험료를 지불한 만큼 보장을 받는 것입니다.

댓글 4개:

  1. 예전에 만든 프로그램에서 버그가 발견되었지만, 소스파일을 날려버려서 새로 만든 적이 있습니다. 그 이후로 항상 웹과 USB, HDD에 삼중보관을 하고 있죠. 그런데 솔직히 위의 방법은 지나친 감이 있네요. 회사 차원에서 별도의 백업팀이 있으면 할만할지 모르겠지만 개인에게는 어려울 것 같습니다.

    답글삭제
  2. 아리새의 펜촉님 안녕하세요.
    누구나 자신에게는 큰 사고가 일어난다고 생각하지 않습니다. 경험하신 일은 소스코드를 날려버리신 일인데, 보통 자신이 경험한 일 정도만 대응을 합니다.
    위와같이 3단계로 백업을 하려면 백업팀은 아니고 백업담당자는 필요합니다. 대부분의 백업은 자동화를 하고, 주간백업정도는 수동으로 해야할 일이 있습니다. 백업담당자는 자신의 일중에서 10~20%정도는 백업을 해야합니다.
    위와 같이 3중보관을 하고 계신다면 99.9%의 사고에는 완전할 수 있습니다. 0.1%의 사고까지 방지를 할지는 비용대비 효과를 생각해서 스스로 판단해야 할 일입니다. 작은회사들이 그렇게 투자하는 일은 흔하지 않습니다.
    하지만 회사의 규모가 커질수록 큰 사고에 대해서 생각하지 않을 수 없습니다.

    답글삭제
  3. svn과 같은 형상관리를 적용해 보시는 것은 어떨까요?

    답글삭제
  4. 하루님 안녕하세요.
    형상관리를 적용하는 것은 기본이죠. 위의 모든 얘기도 형상관리를 적용한 다음의 얘기입니다. 단, 저는 형상관리라는 말은 잘 사용안합니다. 가능하면 소스코드관리라고 얘기합니다. SVN을 백업받는 얘기라고 생각하시면 됩니다. ^^

    답글삭제