노무현 대통령 배너
이 기사는 마틴파울러의 Continuous Integration을 번역한 기사임을 미리 밝혀둡니다.

빌드 자동화 하기

소스를 가지고 실행중인 시스템을 만드는 작업은 컴파일하고 파일을 옮기고 스키마를 데이터베이스에 로딩하는것과 같은 복잡한 프로세스로 이루어진다. 그러나 소프트웨어를 개발하는 이 부분의 대부분은 자동화 되어야 한다. 그리고 그 결과 자동화가 되는것이다. 사람들에게 낮선 명령어를 입력하고 대화상자 누르는 일을 시키는것은 시간 낭비이고 실수를 만들게 된다.

빌드를 위한 자동화된 환경은 시스템의 공통된 특징이다. 유닉스는 수십년에 걸쳐 만들어 졌다, 자바 커뮤니티는 앤트(Ant)를 개발했고, .NET 커뮤니티는 Nant를 개발했고 지금은 MSBuild를 쓰고 있다. 명령어를 이용하는 이 스크립트를 이용해서 시스템을 빌드하고 실행할수 있다.

자동화된 빌드에 모든것을 포함시키지 않는것은 흔히 저지르는 실수이다. 빌드는 레파지터리에서 데이터베이스 스키마를 가져올수 있어야하며 실행환경을 찾을수 있어야 한다. 이전에 언급했던 규칙을 기억해 보면 누구든간에 새로운 PC를 받아서 레파지터리에서 소스를 체크아웃해서 명령어를 실행하면 자기 PC에서 시스템을 실행할 수 있어야 한다.

빌드 스크립트는 종종 특정 플랫폼이나 커뮤니티에 따라 다양한 특징을 갖는데 그럴 필요가 없다. 대부분의 자바 프로젝트는 앤트를 사용하지만 일부는 루비(Ruby)를 사용한다.(Ruby Rake 시스템은 아주 뛰어난 빌드 스크립트 툴이다.) 초기 마이크로소프트 COM 프로젝트를 앤트로 자동화 하는건 아주 중요했다.

커다란 빌드는 시간이 걸리곤 하는데 작은 변화에 이 모든 과정을 반복할 필요는 없다. 그래서 좋은 빌드 툴은 프로세스의 일부를 변경해야 하는지 분석한다. 이렇게 하는 일반적인 방법은 소스와 오브젝트 파일의 날짜를 검사해서 소스 날짜가 더 나중인것만 컴파일하면 된다. 그러나 종속성은 다루기 어렵다. 만일 객체 파일 하나가 변경되면 종속된 파일들은 다시 빌드되어야 한다. 컴파일러는 이를 처리할수도 있고 그러지 못할수 도 있다.

필요에 따라 빌드를 하기 위애 다른 것들이 필요할때도 있다. 시스템을 빌드할때 테스트코드가 있을수도 있고 없을수도 있으며 다른 테스트 집합이 있을수도 있다. 어떤 컴포넌트는 단독으로 빌드할수 있다. 빌드 스크립트는 다른 경우에 또 다른 타겟으로 빌드 할수 있게 해준다.

많은 사람들이 IDE를 사용하며 대부분의 IDE는 내부에 일종의 빌드 관리 프로세스를 갖고 있다. 그러나 이 파일은 항상 IDE를 기반으로 하며 쉽게 망가진다. 더우기 일을 하기 위해 IDE를 필요로 한다. IDE에 맞게 프로젝트 파일을 설정하고 개별적인 개발을 위해 이를 이용하는것도 좋다. 그러나 서버에서 사용수 있고 다른 스크립트를 실행할수 있도록 마스터 빌드를 갖는것은 중요하다. 그래서 자바 프로젝트에서 개발자가 IDE로 빌드하는것은 좋지만 개발 서버에서 실행할수 있다는걸 확신하기 위해 마스터 빌드는 앤트를 이용해야 한다.

크리에이티브 커먼즈 라이선스
Creative Commons License
TAG