소프트웨어를 개발해 고객에게 인도하는 절차를 효과적으로 구축하는 데 필요한 주요 기술과 사례를 설명한다. 지속적 통합 및 인도의 기본 개념과 구조를 설명한다. 또한 젠킨스와 도커, 쿠버네티스와 앤서블을 이용해 애플리케이션을 빌드하고, 지속적으로 통합하고, 테스트를 자동화하고, 구성을 관리해서 지속적으로 배포하는 프로세스를 체계적으로 구축하는 방법을 구체적인 사례를 가지고 설명한다. 이 책을 통해 자신의 조직에 적합한 지속적 통합/인도 프로세스를 계획하고, 실제로 적용하고, 발전시키는 데 필요한 지식을 갖출 수 있다.
Contents
1부. 환경 설정
1장. 지속적 인도 소개
__지속적 인도(CD)의 이해
____전통적 인도 프로세스
______전통적 인도 프로세스의 동작 방식
______전통적 인도 프로세스의 단점
____지속적 인도(CD) 방식의 장점
____성공 스토리
__자동 배포 파이프라인
____지속적 통합(CI)
____자동 인수 테스트
______애자일 테스팅 매트릭스
______테스트 피라미드
____구성 관리
__CD의 전제 조건
____조직 구조의 전제 조건
______데브옵스 문화
______프로세스 내의 고객
______사업적 의사결정
____기술 및 개발의 전제 조건
__CD 프로세스 구축
____도구 소개
______도커 생태계
______젠킨스
______앤서블
______깃허브
______자바/스프링 부트/그래들
______그 외의 도구들
__완벽한 CD 시스템 생성하기
____도커 소개
____젠킨스 구성
____지속적 통합 파이프라인
____자동 인수 테스트
____쿠버네티스 클러스터링
____앤서블로 하는 구성 관리
____지속적 인도 파이프라인/지속적 인도-고급편
__요약
__질문
__더 읽을거리
2장. 도커 소개
__기술 요구 사항
__도커 소개
____컨테이너화와 가상화 비교
____도커의 필요성
______실행 환경
______격리
______애플리케이션 구성
______이식성
____고양이와 가축
____다른 컨테이너화 기술들
__도커 설치
____도커에 필요한 환경
____로컬 머신에 설치하기
______도커 데스크톱
______우분투용 도커
______다른 리눅스 배포판용 도커
______도커 설치 테스트
______서버에 설치
______전용 서버
__도커에서 hello-world 실행하기
____도커 컴포넌트
______도커 클라이언트와 서버
______도커 이미지와 컨테이너
__도커 애플리케이션
__도커 이미지 빌드
____도커 커밋
____도커파일
____도커 애플리케이션 완성하기
______애플리케이션 작성
______환경 준비하기
______이미지 빌드하기
______애플리케이션 실행하기
______환경 변수
__도커 컨테이너 상태
__도커 네트워킹
____서비스 실행하기
____컨테이너 네트워크
____컨테이너 포트 공개
____자동 포트 할당
__도커 볼륨 사용하기
__도커에서 이름 사용하기
____컨테이너 이름 지정하기
____이미지에 태그 달기
__도커 클린업
____컨테이너 클린업
____이미지 클린업
__도커 명령어 살펴보기
__요약
__연습 문제
__질문
__더 읽을거리
3장. 젠킨스 구성
__기술 요구 사항
__젠킨스란 무엇인가?
__젠킨스 설치
____도커로 젠킨스 설치하기
____전용 패키지로 젠킨스 설치하기
______초기 구성
____쿠버네티스에 젠킨스 설치하기
____클라우드에서 젠킨스 사용하기
__젠킨스-Hello World
__젠킨스 아키텍처
____마스터와 에이전트
____확장성
______수직적 확장
______수평적 확장
____테스트 인스턴스/프로덕션 인스턴스
____샘플 아키텍처
__에이전트 구성하기
____통신 프로토콜
____에이전트 설정하기
______영구 에이전트
______영구 도커 호스트 에이전트
______젠킨스 스웜 에이전트
______동적 프로비저닝 도커 에이전트
______동적 프로비저닝 쿠버네티스 에이전트
____동적 프로비저닝 쿠버네티스 에이전트 이해하기
____에이전트 테스트하기
__커스텀 젠킨스 이미지
____젠킨스 에이전트 구축하기
____젠킨스 마스터 빌드하기
__구성 및 관리
____플러그인
____보안
____백업
____블루오션 UI
__요약
__연습 문제
__질문
__더 읽을거리
2부. 애플리케이션 설계 및 테스트
4장. 지속적 통합 파이프라인
__기술 요구 사항
__파이프라인 소개
____파이프라인의 구조
____멀티-스테이지 Hello World
____파이프라인 구문
______섹션
______지시어
______스텝
__커밋 파이프라인
____체크아웃
______깃허브 리포지토리 생성
______체크아웃 스테이지 생성하기
____컴파일
______자바 스프링 부트 프로젝트 생성하기
______코드를 깃허브로 푸시하기
______컴파일 스테이지 생성하기
____단위 테스트
______비즈니스 로직 생성하기
______단위 테스트 작성하기
______단위 테스트 스테이지 생성하기
____젠킨스파일
______젠킨스파일 생성하기
______젠킨스파일에서 파이프라인 실행하기
__코드-품질 스테이지
____코드 커버리지
______JaCoCo를 그래들에 추가하기
______코드 커버리지 스테이지 추가하기
______코드 커버리지 리포트 발행하기
____정적 코드 분석
______체크스타일 구성 추가하기
______정적 코드 분석 스테이지 추가하기
______정적 코드 분석 리포트 발행하기
____소나큐브
__트리거와 알림
____트리거
______외부 트리거
______폴링 SCM 트리거
______스케줄 빌드 트리거
____알림
______이메일
______그룹 채팅
______팀 사무실
__팀 개발 전략
____개발 워크플로우
______트렁크-기반 워크플로우
______브랜치 워크플로우
______포크 워크플로우
____지속적 통합 적용하기
______브랜치 전략
______기능 토글
____젠킨스 멀티-브랜치
____비기술 요구 사항
__요약
__연습 문제
__질문
__더 읽을거리
5장. 자동 인수 테스트
__기술 요구 사항
__인수 테스트 소개
__도커 레지스트리
____아티팩트 리포지토리
____도커 레지스트리 설치하기
______클라우드 방식 도커 레지스트리
______도커 허브
______자체 호스팅 방식 도커 레지스트리
____도커 레지스트리 사용하기
______이미지 빌드하기
______레지스트리로 이미지 푸시하기
______레지스트리에서 이미지 가져오기
__젠킨스 파이프라인에서의 인수 테스트
____도커 빌드 스테이지
______도커파일 추가하기
______도커 빌드를 파이프라인에 추가하기
____도커 푸시 스테이지
____인수 테스트 스테이지
______스테이징 배포를 파이프라인에 추가하기
______인수 테스트를 파이프라인에 추가하기
______클린업 스테이지 추가하기
__인수 테스트 작성하기
____사용자 - 대면 테스트 작성하기
____인수 테스트 프레임워크 사용하기
______인수 기준 생성하기
______스텝 정의 생성하기
______자동 인수 테스트 실행하기
____인수 테스트-주도 개발
__요약
__연습 문제
__질문
__더 읽을거리
6장. 쿠버네티스로 하는 클러스터링
__기술 요구 사항
__서버 클러스터링
____서버 클러스터링 소개
__쿠버네티스 소개
____쿠버네티스 기능 개요
__쿠버네티스 설치
____쿠버네티스 클라이언트
____쿠버네티스 서버
______로컬 환경
______클라우드 플랫폼
______사내 설치
____쿠버네티스 설정 검증
____쿠버네티스 사용하기
______애플리케이션 배포
______쿠버네티스 서비스 배포
______애플리케이션 노출
__쿠버네티스의 고급 기능
____애플리케이션 확장
____애플리케이션 업데이트하기
____롤링 업데이트
____쿠버네티스 객체와 워크로드
__애플리케이션 의존성
____쿠버네티스 DNS 확인
____멀티 애플리케이션 시스템 개요
____멀티 애플리케이션 시스템 구현
______그래들에 Hazelcast 클라이언트 라이브러리 추가하기
______Hazelcast 캐시 구성 추가하기
______스프링 부트 캐시 추가하기
______도커 이미지 빌드하기
____멀티 애플리케이션 시스템 테스트
__대체 다른 클러스터 관리 시스템
____도커 스웜
____아파치 Mesos
____기능 비교
__요약
__연습 문제
__질문
__더 읽을거리
3부. 애플리케이션 배포
7장. 앤서블로 하는 구성 관리
__기술 요구 사항
__구성 관리 소개
____좋은 구성 관리 도구의 특징
____구성 관리 도구 개요
__앤서블 설치
____앤서블 서버 요구 사항
____앤서블 설치
__앤서블 사용하기
____인벤토리 생성하기
____애드혹 명령
____플레이북
______플레이북 정의하기
______플레이북 실행하기
______플레이북의 멱등성
______핸들러
______변수
____롤
______롤 이해하기
______앤서블 갤럭시
__앤서블을 이용한 배포
____Hazelcast 설치하기
____웹 서비스 배포하기
______Hazelcast 호스트 주소 변경하기
______플레이북에 계산기 배포 추가하기
______배포 실행하기
__도커 및 쿠버네티스와 앤서블
____앤서블의 장점
____앤서블 도커 플레이북
______도커 설치하기
______도커 컨테이너 실행하기
______앤서블 쿠버네티스 플레이북
__요약
__연습 문제
__질문
__더 읽을거리
__기술 요구 사항
8장. 지속적 인도 파이프라인
__환경 및 인프라
____환경 유형
______프로덕션 환경
______스테이징 환경
______테스트 환경
______개발 환경
______지속적 인도 환경
______보안 환경
__비기능 테스트
____비기능 테스트의 유형
______성능 테스트
______내구성 테스트
______보안 테스트
______유지보수 테스트
______복구 테스트
____비기능 테스트의 어려운 점
__애플리케이션 버전 관리
____버전 관리 전략
____젠킨스 파이프라인에서의 버전 관리
__지속적 인도 파이프라인 완성하기
____인벤토리
____버전 관리
____원격 스테이징 환경
____인수 테스트 환경
____릴리스
____스모크 테스트
____젠킨스파일 완성하기
__요약
__연습 문제
__질문
__더 읽을거리
__기술 요구 사항
9장. 지속적 인도 - 고급편
__데이터베이스 변경 관리
____스키마 업데이트의 이해
______데이터베이스 마이그레이션 소개
______Flyway 사용
____지속적 인도에서 데이터베이스 변경
______하위 버전과 호환이 가능하게 변경한 경우
______하위 버전과 호환이 불가능하게 변경한 경우
______코드 변경 사항에서 데이터베이스 업데이트 분리
____공유 데이터베이스 분리
____테스트 데이터 준비
______단위 테스트
______통합/인수 테스트
______성능 테스트
__파이프라인 패턴
____파이프라인 병렬화
____파이프라인 컴포넌트 재사용
______파라미터 방식 빌드
______공유 라이브러리
____배포 롤백
____수작업 스텝 추가
__릴리스 패턴
____블루-그린 배포
____카나리아 릴리스
__레거시 시스템과의 연동
____빌드 및 배포 자동화
____테스트 자동화
____리팩토링과 새로운 기능 추가
____인간적 요소의 이해
__요약
__연습 문제
__질문
__더 읽을거리
Author
라파엘 레쉬코,이정표
소프트웨어 개발자이자 강사로, 폴란드 크라쿠프에 살고 있다. 구글, CERN, Hazelcast 등 여러 기업에서 개발자와 아키텍트로 경력을 쌓았다. 또한 Devoxx와 Voxxed Days를 포함한 많은 국제 회의에서 강연 및 워크숍을 진행했으며, 항상 새로운 도전에 열린 자세를 갖고 있다.
소프트웨어 개발자이자 강사로, 폴란드 크라쿠프에 살고 있다. 구글, CERN, Hazelcast 등 여러 기업에서 개발자와 아키텍트로 경력을 쌓았다. 또한 Devoxx와 Voxxed Days를 포함한 많은 국제 회의에서 강연 및 워크숍을 진행했으며, 항상 새로운 도전에 열린 자세를 갖고 있다.