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

자동화된 배포

지속적 통합을 위해서 여러 환경이 필요한데, 커밋 테스트를 실행하기 위한 환경과, 2차 테스트를 실행하기 위한 여러 환경을 말한다. 이 환경에 하루에 여러번 실행본을 옮겨야 한다면, 이를 자동화 하길 원할것이다. 그래서 어떤 환경이든지 쉽게 애플리케이션을 배포할 수 있는 스크립트를 갖는건 중요하다.

이는 자연스러운 결과로 이와 유사하게 제품을 배포할수 있는 스크립트도 가지고 있어야만 한다. 제품을 매일 배포하지는 않지만 (그렇지만 나는 프로젝트가 그렇게 하도록 한다.) 자동화된 배포는 프로세스 진행 속도를 높여주며 에러를 줄이는데 도움이 된다. 이는 테스트 환경에 이용하는 배포와 같은 정도의 능력이면 되기 때문에 값싼 선택이다.

만일 제품이 별도의 자동화된 기능에 의해 배포된다면, 자동화된 롤백도 고려해야 한다. 때때로 잘못된일이 발생하는데 가능한 빨리 좋은 상태로 되돌려야 한다. 자동으로 복구를 하는기능은 배포에 대한 많은 부담을 줄여주며 사람들이 더 자주 배포를 할수있게 해주고 사용자가 더 빨리 새로운 기능을 사용할 수 있게 해준다.(루비 온 레일즈 커뮤니티는 Capistrano 라는 툴을 개발했는데 이런 작업을 해주는 툴의 좋은 예라고 할 수 있다.)

클러스터된 환경에서 한번에 한개 노드에 새로운 소프트웨어를 배포하도록 하면 점차적으로 몇 시간 내로 애플리케이션을 변경할수가 있다.

관련 기사를 참고하라 : Evolutionary Database Design

많은 사람들이 자주 릴리즈 할때 공통으로 사용하는것은 데이터베이스 마이그레이션이다. 데이터베이스의 변경은 다루기 어려운데 데이터베이스 스키마는 변경할수 없으면서 데이터를 제대로 마이그레이션 해야하기 때문이다. 이 기사는 내 동료 프라모드 사달라즈(Pramod Sadalage)가 리팩토링과 데이터베이스 마이그레이션을 자동화 하기 위해 사용한 기법에 대해 설명하고 있다. [앰블러-사달라즈]

내가 일반적인 웹 애플리케이션을 배포하다가 알게된 부분적으로 재밌는 시도는 사용자 일부에 대해 시험적인 빌드를 배포해 보는 것이다. 그러면 팀은 시험 빌드가 어떤지 살펴볼수 있으며 이를 전체 사용자에게 배포할지 여부를 결정할때 사용할수 있다. 이 방법은 최종 선택을 확정하기전에 새로운 기능과 UI를 테스트 할수 있다. 자동화된 배포는 좋은 CI 규칙과 밀접하게 관련이 있으며 이를 가능하게 하는것은 중요하다.


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