이 책은 소프트웨어의 고객 인도과정에서 발생하는 여러 어려움을 효과적으로 다루기 위한 기술과 사례를 설명한다. 빌드, 기능/성능 테스트, 배포, 출시의 전체 단계를 자동화하는 기술과 소프트웨어 개발에 참여하는 개발자, 기획자, QA, 운영자가 효과적으로 협업할 수 있는 방법을 구체적으로 다룬다. 또한 최적화된 개발 및 배포 프로세스도 소개하므로 독자는 이를 활용해 조직 상황에 적합한 프로세스를 디자인하고 적용한 뒤 발전시켜 나갈 수 있다. 개발자, QA, 운영자, 관리자 모두 반드시 읽고, 익히고, 실천해야 할 필독서다.
이 책에서 다루는 내용
■ 소프트웨어 빌드, 통합, 테스트, 배포의 전면 자동화
■ 팀과 조직 단계에서의 배포 파이프라인 구현
■ 개발자, 테스터, 운영자 간의 협업 개선
■ 효과적인 설정 관리 전략 구현
■ 인수 테스트를 분석부터 구현까지 자동화
■ 용량과 기타 비기능 요구사항 테스트
■ 지속적 배포와 무정지 출시 구현
■ 인프라, 데이터, 컴포넌트, 의존성 관리
■ 위험 관리, 순응, 감사 다루기
이 책의 대상 독자
이 책의 주요 목적 중 하나는 소프트웨어 배포의 책임을 갖는 관련자들의 협업을 개선하는 데 있다. 특히 개발자, 테스터, 시스템과 데이터베이스 관리자, 관리자를 염두에 두었다.
전통적인 설정 관리 문제, 소스 코드 관리, 출시 계획, 검수, 규정 준수에서 빌드 자동화, 테스트, 배포 프로세스의 통합까지를 주제로 다룬다. 자동화 인수 테스트, 의존성 관리, 데이터베이스 마이그레이션, 테스트와 실환경 생성과 관리 기술 또한 다룬다.
소프트웨어 개발에 참여하는 많은 사람이 이런 활동을 코드 작성보다 덜 중요하다고 생각한다. 하지만 경험에 따르면 이 작업에 많은 시간과 노력을 들이는 것이 성공적인 소프트웨어 인도의 핵심이다. 이를 둘러싼 위험을 제대로 관리하지 않으면 수많은 비용이 들고, 첫 번째 소프트웨어 구축 때보다 비용이 더 많이 드는 경우도 많다. 이 책은 이런 위험을 이해하는 데 필요한 정보를 제공하며, 나아가 이를 완화하는 전략을 설명한다.
야심 찬 목표이긴 하나, 한 권의 책에서 모든 주제를 상세히 다룰 수는 없다. 실제로 다음과 같은 독자들이 섭섭해할 수도 있다는 위험을 감수했다. 개발자는 아키텍처와 속성 주도 개발 방법, 상세한 리팩토링 같은 주제를 다루지 않아 서운할 수 있고, 테스터는 탐색적 테스트와 테스트 관리 전략에 충분한 시간을 할애하지 않아서, 운영자는 용량 계획, 데이터베이스 마이그레이션, 실환경 모니터링을 상세히 다루지 않아 그런 감정이 들 수 있다.
이런 내용을 각각 상세하게 다루는 책은 시중에 나와 있다. 하지만 설정 관리, 자동화 테스트, 지속적 통합과 인도, 데이터 관리, 환경 관리, 출시 관리 같은 모든 활동을 함께 다루는 책이 없었다. 린(lean) 소프트웨어 개발 방법론에서 가르치는 중요한 주제 중 하나는 전체를 최적화하는 것이다. 이렇게 하려면 배포 프로세스와 그에 포함되는 모든 것을 하나로 묶어내는 전체론적인 접근법이 필요하다. 출시에 포함될 모든 변경 내용의 진행을 관리할 수 있어야만 소프트웨어 배포의 품질과 속도를 최적화하고 개선할 수 있다.
이 책의 구성
모든 사람이 이 책을 시작부터 끝까지 읽기를 원하진 않을 것이다. 도입부를 읽고 난 뒤 여러 가지 방법으로 공략할 수 있다. 반복적으로 읽는 것도 방법이겠지만, 처음부터 끝까지 읽기로 결심한 경우라도 지루함을 느끼지 않을 수준이길 바란다.
이 책은 세 부분으로 구성된다. 1부는 1장에서 4장까지로, 출시에 대한 일반적, 반복적, 위험 감소 이론을 다루며 이를 지원하는 실천법을 소개한다. 2부는 5장에서 10장까지로, 배포 파이프라인을 설명한다. 3부가 시작되는 11장부터는 지속적 인도를 지원하는 생태계를 다룬다.
누구든 1장은 읽기를 바란다. 경험 있는 개발자라도 소프트웨어 출시 프로세스가 생소한 경우라면 전문 소프트웨어 개발이 의미하는 바에 대한 다양한 도전과제를 발견할 수 있다. 책의 나머지 부분은 여유가 있거나 혼란스러운 상황일 때 자세히 살펴보면 된다.
1부: 기초
1부는 배포 파이프라인을 이해하는 데 필요한 선행지식을 설명한다. 각 장은 마지막 내용에 기반을 두고 있다.
1장 ‘소프트웨어 인도의 문제점’: 여러 개발 팀에서 공통적으로 관찰되는 안티패턴을 설명하는 것으로 시작해, 목표를 달성하는 방법을 설명하는 부분으로 나아간다. 그리고 이 책의 나머지 부분에서 다루는 소프트웨어 인도의 이론을 정립하면서 마무리한다.
2장 ‘설정 관리’: 소스 코드부터 환경과 애플리케이션 설정 빌드 스크립트에 이르기까지 빌드, 배포, 테스트, 애플리케이션 출시를 관리하는 모든 설정법을 다룬다.
3장 ‘지속적 통합’: 애플리케이션의 모든 변경에 대해 자동화 테스트를 구축하고 수행해 소프트웨어가 언제나 동작하는 상태로 유지되게 하는 실천법을 다룬다.
4장 ‘테스트 전략의 적용’: 모든 프로젝트의 중요 부분인 다양한 종류의 수동 테스트와 자동화 테스트 방법을 소개하고, 각자의 프로젝트에 적합한 전략을 선택하는 방법을 설명한다.
2부: 배포 파이프라인
2부에서는 파이프라인의 각 단계를 구현하는 방법을 포함해 배포 파이프라인을 자세히 다룬다.
5장 ‘배포 파이프라인의 구조’: 이 책의 핵심이라 할 수 있는, 출시에 체크인되는 모든 변경을 관리하는 자동화 프로세스 패턴을 다룬다. 그리고 팀과 조직 수준에서 파이프라인을 적용하는 방법도 설명한다.
6장 ‘빌드와 배포 스크립트 작성’: 자동 빌드와 배포 프로세스에 사용하는 스크립트 기술을 다루며, 이에 최적화된 실천법을 설명한다.
7장 ‘커밋 단계’: 모든 변경사항에 의해 유발되어 애플리케이션에 적용되는 일련의 자동화 프로세스인 파이프라인의 첫 번째 단계를 다룬다.
8장 ‘자동화 인수 테스트’: 자동화 인수 테스트의 적용에 대한 분석부터 설명한다. 지속적 인도에서 인수 테스트가 중요한 이유를 설명하고, 애플리케이션의 중요 기능을 보호하는 비용 효과적인 인수 테스트 스위트를 만드는 법을 다룬다.
9장 ‘비기능 요구사항 테스트’: 용량 테스트 중심으로 비기능 요구사항을 다룬다. 용량 테스트를 생성하는 방법과 용량 테스트 환경을 구축하는 방법을 설명한다.
10장 ‘애플리케이션 배포와 출시’: 자동화 테스트 이후에 어떤 일이 발생하는지를 다룬다. 출시 후보를 버튼을 눌러 수동 테스트 환경, UAT, 스테이징, 최종 출시 단계로 진출시키는 데 필요한 핵심 주제인 지속적 배포, 롤백, 멈춤 없는 출시를 다룬다.
3부: 제품 인도 생태계
3부에서는 배포 파이프라인을 지원하는 여러 분야를 교차하는 실천법과 기법을 설명한다.
11장 ‘인프라와 환경 관리’: 환경의 생성, 관리, 모니터링을 다루며 가상화와 클라우드 컴퓨팅을 포함한다.
12장 ‘데이터 관리’: 테스트와 실제 데이터를 애플리케이션의 생명주기에 따라 생성하고 변경하는 방법을 보여준다.
13장 ‘컴포넌트와 의존성 관리’: 브랜치를 만들지 않고도 애플리케이션을 항상 출시 가능한 상태로 유지하는 방법을 설명하면서 시작한다. 그 다음, 컴포넌트 집합으로 애플리케이션을 구성하는 법과, 이들의 구축과 테스트를 관리하는 방법을 설명한다.
14장 ‘고급 버전 관리’: 유명한 도구들을 소개하고, 버전 관리를 사용하는 다양한 패턴을 상세하게 설명한다.
15장 ‘지속적 제품 인도 관리’: 위험 관리와 준수를 설정하고 설정과 출시 관리의 성숙도 모델을 제공한다. 이와 함께 비즈니스에서 지속적인 인도의 중요성과 점진적으로 인도하는 반복적인 프로젝트의 생명주기를 설명한다.
이 책에 쏟아진 각계의 찬사
좀 더 자주 소프트웨어를 배포하고 싶다면 이 책은 당신을 위한 것입니다. 지속적 제품 인도를 적용함으로써 위험을 감소하고 지겨운 작업을 제거하고 신뢰감을 향상시킬 수 있습니다. 저는 현재 진행 중인 모든 프로젝트에 이 이론과 실천법을 적용하고 있습니다.
- 켄트 벡(Kent Beck) / 쓰리 리버스 인스티튜트(Three Rivers Institute)
소프트웨어 개발 팀에 소스 코드 관리가 필수적인 것처럼 지속적 통합의 이해 여부와 상관없이 이 책은 필독서입니다. 전체 개발과 배포 프로세스를 한 번에 다루는 유일한 책이며, 기술과 도구뿐만 아니라 철학과 이론을 제공합니다. 저자는 테스트 자동화에서 자동화 배포에 이르기까지 폭넓은 독자를 위한 주제를 다룹니다. 개발 팀에 속한 프로그래머, 테스터, 시스템 관리자, DBA, 관리자 모두가 이 책을 읽어야 합니다.
- 리사 크리스핀(Lisa Crispin) / 『Agile Testing』 공저자
많은 조직에서 지속적 인도는 단순한 배포 방법론이 아니며, 비즈니스를 수행하는 데 필수적인 요소입니다. 여러분의 환경에서 실제로 효과적인 지속적 인도를 구축하는 방법을 책에 소개했습니다.
- 제임스 턴불(James Turnbull) / 『Pulling Strings with Puppet』 저자
명확하고, 정확하게 잘 작성된 책으로 출시 프로세스에 무엇이 필요한지에 대한 아이디어를 독자에게 제공해줍니다. 저자는 소프트웨어 배포의 단계별 기대치와 장애물을 설명합니다. 모든 소프트웨어 엔지니어의 서재에 꼭 꽂혀 있어야 할 책입니다.
- 레이나 코트란(Leyna Cotran) / 캘리포니아 대학교 어바인 캠퍼스 소프트웨어 연구소
무엇이 빠르게 성장하는 웹 애플리케이션을 성공적으로 만드는지를 설명하는 책입니다. 지속적 배포와 제품 인도는 논란거리를 벗어나 필수 요소가 됐으며, 이 책은 그 내용을 훌륭하게 다룹니다. 지속적 배포는 여러 수준에서 개발과 운영의 접점에 있으며, 저자들은 이를 성공적으로 다뤘습니다.
- 존 올스포(John Allspaw) / 잇시닷컴(Etsy.com)의 기술 운영 부사장이자, 『The Art of Capacity Planning』과 『Web Operations』 저자
소프트웨어 기반의 서비스를 구축하고 인도하는 비즈니스를 운영 중이라면 지속적 인도에서 명료하게 설명하는 핵심을 경험할 수 있습니다. 험블과 팔리는 이론을 넘어 제품 인도를 빠르고 신뢰할 수 있도록 변화시킬 멋진 각본을 제공합니다.
- 데이먼 에드워즈(Damon Edwards) / DTO 솔루션 대표이자, dev2ops.org 공동 편집자
소프트웨어 배포와 관련된 업무를 하는 사람이라면 누구나 이 책을 집어들어 아무 장이나 펼쳐 빠르게 가치 있는 정보를 얻을 수 있고, 책을 차근차근 읽어가며 조직에 적합한 배포 프로세스를 구축할 수 있으리라 믿습니다. 이 책은 소프트웨어의 구축, 배포, 테스트, 출시에 꼭 필요한 참고서라고 생각합니다.
- 사라 에드리(Sarah Edrie) / 하버드 비즈니스 스쿨의 품질 공학 관리자
지속적 인도는 최신의 모든 소프트웨어 팀에게 지속적 통합의 논리적 다음 단계입니다. 이 책의 야심 찬 목표는 고객에게 지속적으로 가치 있는 소프트웨어를 제공하는 것으로, 명확하고 효과적인 이론과 실천을 통해 이를 성취할 수 있게 만듭니다.
- 롭 산하임(Rob Sanheim) / 렐러번스(Relevance) 주식회사 의장