레이블이 빌드자동화인 게시물을 표시합니다. 모든 게시물 표시
레이블이 빌드자동화인 게시물을 표시합니다. 모든 게시물 표시

2009년 8월 28일 금요일

게으른 개발자가 되라!


"게으른 개발자가 되라!"라고 하면 무슨 봉창 두드리는 소리냐고 할 겁니다. 진짜 게을러지라는 의미가 아니고 쓸데없는 일에 부지런하지 말자는 의미입니다.

항상 괜히 바쁜 개발자들이 있습니다. 본연의 연구 개발작업 이외의 과외 업무로 바쁜 것을 말합니다.

이런 개발자들은 개발도 열심히 하지만 과외 업무로 인해서 상당히 많은 시간을 빼앗깁니다.

가만히 보고 있으면 항상 열심히 하는 것 같지만, 헛고생하고 있는 것이 많습니다. 이런 과외 업무들은 최대한 자동화를 해 놓고 개발 본연의 업무에 충실해야 합니다.

개발자가 하루 종일 하는 일을 분석해보면 자동화를 해야 할 부분이 상당히 많다는 것을 알게 될 것입니다. 그럼 상당 부분 자동화할 수 있는 것들의 간단한 예를 들어보죠.


  • Engineering Unit Test
  • System Test
  • Daily Build
  • 소스코드관리시스템 Audit
  • Build 전반의 프로세스
  • Release 전반의 프로세스
  • Packaging 프로세스
  • Patch 업데이트를 위한 프로세스
  • 소스코드 Merge
  • 소스코드 정적/동적 테스트

이중에서 빌드를 예를 들어 보면 Build를 하면서 자동으로 소스코드 관리시스템에 Baseline을 설정하고 Build number를 갱신하고, 자동으로 Compile을 진행합니다. 또 빌드를 하면서 발생하는 Warning과 Error를 체크하고 자동으로 소스코드관리시스템에서 해당 Warning과 Error를 유발한 개발자를 찾아내고 이를 보고서로 만들어서 관리자와 담당자들에게 Email을 보내며 빌드 기록을 보관하게 됩니다.

이 과정에서 사람이 개입하는 것은 Build Script를 실행하는 것 뿐입니다. 공식 빌드를 하기 위해서 개발자들이 평상 시에 하는 Engineering Build처럼 Visual Studio나 Eclipse를 열어서 빌드를 하고 FTP로 서버로 파일을 옮기고 필요한 파일을 모아서 Install Shield를 실행하여 설치 프로그램도 만들고 Diff 프로그램을 이용해서 바뀐 파일도 찾아내서 Path update 파일을 서버에 등록하고 하는 일련의 작업을 직접 수동으로 하고 있다면 자동화 할 부분이 굉장히 많으니 기뻐하십쇼. 앞으로 개선된 일이 무궁무진하니까요.

개발 프로세스는 회사마다 다르기 때문에 자동화할 부분을 획일적으로 정할 수는 없습니다. 따라서 아직 자동화가 많이 부족하다면 자동화를 했을 때 효과가 크고 자동화가 쉬운 부분부터 차근차근 자동화를 해 나가야 합니다. 그 중에서 대표적인 것이 빌드입니다.

자동화가 잘 된 조직과 그렇지 못한 조직은 개발 생산성에서 몇십% 차이가 나고 자동화가 잘된 조직은 그렇지 못한 조직이 밤새고 혼돈 속에서 고생하고 있을 때 제품에 아키텍처에 대해서 더 고민하고 신기술도 더 익힐 수 있고 그러면서도 퇴근은 더 빨리 할 수 있습니다.

게으른 개발자가 되십시오. ^^

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만원을 보험료로 내는 선택을 할 겁니다.

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

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