책 소개
예제 프로젝트 파일은 여기에서 내려 받으실 수 있습니다.
https://github.com/AcornPublishing/infra-code.git
요약
이 책은 코드형 인프라의 정의 및 패턴과 사용법을 소개한다. 기존 인프라를 코드형 인프라로 변경하는 방법뿐만 아니라 인프라를 모듈화하여 시스템 영향 범위를 최소화하는 배포 방법을 배울 수 있다. 또한 가상 실무 상황을 토대로 독자의 상황에 가장 적합한 코드형 인프라 구성 지침을 제공한다. 인프라를 모듈화하고, 테스트 및 지속적인 배포 방법을 도입함으로써 인프라를 코드로 관리하고 효율적으로 확장할 수 있는 방법이 궁금하다면 이 책을 읽어보라!
추천의 글
“재사용성, 멱등성, 모듈화, 진화 가능성과 같은 핵심 기능을 깊게 다루면서도 특정 도구에 국한되지 않는 아주 훌륭한 책이다!”
— 루치안 말리(Lucian Maly) / 레드햇
“명확하면서도 포괄적이다. 신뢰 가능하고 재사용 가능한 방법으로 인프라를 자동화하는 방법을 알려준다.”
— 코시모 아타나시(Cosimo Attanasi) / ER Sistemi
“팀이 실무 프로젝트에 IaC의 모범 사례를 적용할 수 있도록 돕는다.”
— 데이비드 크리프(David Krief) / Altanasia
“비판적인 통찰력과 핵심 지식을 제공하는 이 책은 훌륭하다!”
— 제레미 브라이언(Jeremy Bryan) / Anchore
이 책에서 다루는 내용
◆ 의존성을 격리하고 인프라를 최적으로 모듈화하는 방법
◆ 인프라 변경 실패 시 문제를 완화하거나, 해결하고, 격리하는 방법
◆ 블루-그린 배포를 활용하여 최소 한도의 장애 시간으로 인프라를 업데이트하는 방법
◆ 프로비저닝 도구나 설정 관리 또는 이미지 빌딩을 사용하는 패턴
이 책의 대상 독자
◆ 클라우드 인프라와 IaC를 사용하기 시작하고, 팀이나 회사 전체로 확장하려는 모든 사람(소프트웨어 개발자, 보안 엔지니어, 품질 보증 엔지니어, 인프라 엔지니어)
◆ 다양한 인프라 사용 사례, 도구 및 시스템에 적용할 수 있는 일반적인 패턴과 사례를 알고 싶은 개발자
이 책의 구성
이 책은 13개의 장, 3부로 구성되어 있다.
1부는 IaC를 소개하고 어떻게 독자가 작성할 수 있는지 소개한다.
1장은 IaC의 개념, IaC의 장점 및 원칙을 정의한다. 하시코프 테라폼을 실행하여 구글 클라우드 플랫폼(GCP)에 배포하는 파이썬 예제를 포함하고 있음을 설명한다. 또한 IaC 여정에서 접하게 될 도구와 사용 사례에 대해서도 논의한다.
2장은 불변성의 원칙을 깊이 있게 다루고 기존 인프라 자원을 IaC로 이전할 수 있는 방법을 설명한다. 또한 깨끗한 IaC 작성 방법도 다룬다.
3장은 인프라 자원을 모듈로 나누거나 그룹화하는 패턴을 제공한다. 각 패턴은 예제와 사용 사례를 포함한다.
4장은 인프라 자원 및 모듈 간 의존성을 관리하는 방법과 의존성 주입 및 일부 공용 패턴을 사용해 의존성을 분리하는 방법을 다룬다.
2부는 팀 단위로 IaC를 작성하고 협업하는 방법을 묘사한다.
5장은 IaC를 다중 저장소 구조로 조직하여 팀 간 공유하는 방법과 고려사항을 다룬다.
6장은 인프라 테스트 전략을 제공한다. 각 테스트 유형을 설명하고 IaC로 작성할 수 있는 방법을 묘사한다.
7장은 지속적인 제공을 IaC에 적용한다. 상위 수준의 브랜칭 모델을 다루고 팀이 이를 활용하여 인프라를 변경할 수 있는 방법을 설명한다.
8장은 테스트와 태깅 방법을 포함하는, 안전하고 규정을 준수하는 IaC를 구축할 수 있는 기술을 제공한다.
3부는 회사 차원에서 IaC를 관리할 수 있는 방법을 다룬다.
9장은 인프라 변경 시 불변성을 적용하고, 블루-그린 배포 예제를 다룬다.
10장은 거대한 IaC를 리팩토링하여 유지보수성을 개선하고 단일 코드베이스에 대한 실패한 변경사항이 미치는 영향 범위를 완화하는 방법을 다룬다.
11장은 IaC 원복과 시스템 롤 포워드 방법을 묘사한다.
12장은 IaC를 사용해 클라우드 비용을 관리하는 방법을 제시한다. IaC로 비용을 추정할 수 있는 예제를 포함한다.
13장은 IaC 도구를 변경하고 업데이트할 수 있는 방법을 소개하며 책을 마무리 짓는다.
목차
목차
- 1부 첫걸음
- 1장 코드형 인프라 소개
- 1.1 인프라란 무엇인가?
- 1.2 코드형 인프라란 무엇인가?
- 1.2.1 수동 인프라 설정
- 1.2.2 코드형 인프라
- 1.2.3 코드형 인프라가 아닌 것은 무엇인가?
- 1.3 코드형 인프라 원칙
- 1.3.1 재현성
- 1.3.2 멱등성
- 1.3.3 결합성
- 1.3.4 진화 가능성
- 1.3.5 네 가지 원칙 적용
- 1.4 왜 코드형 인프라를 사용하는가?
- 1.4.1 변경 관리
- 1.4.2 시간 투자 대비 수익
- 1.4.3 지식 공유
- 1.4.4 보안
- 1.5 도구
- 1.5.1 책에서 소개하는 사례
- 1.5.2 프로비저닝
- 1.5.3 설정 관리
- 1.5.4 이미지 빌딩
- 요약
- 2장 코드형 인프라 작성
- 2.1 인프라 변화 표현
- 2.2 불변성 이해하기
- 2.2.1 대역 외 변경사항 교정
- 2.2.2 코드형 인프라로 이전하기
- 2.3 깨끗한 코드형 인프라 작성하기
- 2.3.1 버전 관리는 맥락을 전달한다
- 2.3.2 린팅 및 포맷팅
- 2.3.3 자원 이름 지정
- 2.3.4 변수와 상수
- 2.3.5 의존성 매개변수화
- 2.3.6 비밀 유지하기
- 요약
- 3장 인프라 모듈 패턴
- 3.1 싱글톤
- 3.2 컴포지트
- 3.3 팩토리
- 3.4 프로토타입
- 3.5 빌더
- 3.6 패턴 선택하기
- 요약
- 4장 인프라 의존성 패턴
- 4.1 단방향 관계
- 4.2 의존성 주입
- 4.2.1 제어 역전
- 4.2.2 의존성 역전
- 4.2.3 의존성 주입 적용하기
- 4.3 퍼사드
- 4.4 어댑터
- 4.5 중재자
- 4.6 사용할 패턴 결정하기
- 요약
- 2부 팀으로 확장하기
- 5장 모듈 구조화 및 공유
- 5.1 코드 저장소 구조
- 5.1.1 단일 코드 저장소
- 5.1.2 다중 저장소
- 5.1.3 저장소 구조 선택하기
- 5.2 버전 관리
- 5.3 릴리스
- 5.4 모듈 공유하기
- 요약
- 6장 테스트
- 6.1 인프라 테스트 주기
- 6.1.1 정적 분석
- 6.1.2 동적 분석
- 6.1.3 인프라 테스트 환경
- 6.2 단위 테스트
- 6.2.1 인프라 설정 테스트하기
- 6.2.2 도메인 특화 언어 테스트하기
- 6.2.3 언제 단위 테스트를 작성해야 할까?
- 6.3 계약 테스트
- 6.4 통합 테스트
- 6.4.1 모듈 테스트하기
- 6.4.2 환경 설정 테스트하기
- 6.4.3 테스트의 어려움
- 6.5 종단 간 테스트
- 6.6 기타 테스트
- 6.7 테스트 선택하기
- 6.7.1 모듈 테스트 전략
- 6.7.2 설정 테스트 전략
- 6.7.3 유용한 테스트 식별하기
- 요약
- 7장 지속적인 배포와 브랜치 모델
- 7.1 변경사항 운영 환경에 배포하기
- 7.1.1 지속적인 통합
- 7.1.2 지속적인 제공
- 7.1.3 지속적인 배포
- 7.1.4 제공 방법 선택하기
- 7.1.5 모듈
- 7.2 브랜치 모델
- 7.2.1 피처 기반 개발
- 7.2.2 트렁크 기반 개발
- 7.2.3 브랜치 모델 선택하기
- 7.3 동료 검토
- 7.4 깃옵스
- 요약
- 8장 보안과 규정 준수
- 8.1 접근과 비밀정보 관리하기
- 8.1.1 최소 권한의 원칙
- 8.1.2 비밀 설정 정보 보호하기
- 8.2 인프라 태깅하기
- 8.3 코드형 정책
- 8.3.1 정책 엔진과 기준
- 8.3.2 보안 테스트
- 8.3.3 정책 테스트
- 8.3.4 사례와 패턴
- 요약
- 3부 운영 환경 복잡성 관리하기
- 9장 변경사항 적용하기
- 9.1 변경 전 사전 작업
- 9.1.1 체크리스트 점검하기
- 9.1.2 신뢰성 증진하기
- 9.2 블루-그린 배포
- 9.2.1 그린 인프라 배포하기
- 9.2.2 그린 인프라에 상위 의존성 자원 배포하기
- 9.2.3 그린 인프라에 카나리 배포하기
- 9.2.4 회귀 테스트 실행하기
- 9.2.5 블루 인프라 제거하기
- 9.2.6 추가 고려사항
- 9.3 스테이트풀 인프라
- 9.3.1 블루-그린 배포
- 9.3.2 제공 파이프라인 업데이트하기
- 9.3.3 카나리 배포
- 요약
- 10장 리팩토링
- 10.1 리팩토링 영향 최소화하기
- 10.1.1 무중단 배포로 영향 범위 줄이기
- 10.1.2 피처 플래그를 사용하는 리팩토링 단계
- 10.2 모노리스 해체하기
- 10.2.1 상위 자원 리팩토링하기
- 10.2.2 의존성을 갖는 자원 리팩토링하기
- 10.2.3 리팩토링 워크플로 반복하기
- 요약
- 11장 오류 고치기
- 11.1 기능 복구하기
- 11.1.1 롤 포워드를 통한 변경사항 원복하기
- 11.1.2 신규 변경사항 롤 포워드하기
- 11.2 문제 해결
- 11.2.1 드리프트 확인하기
- 11.2.2 의존성 확인하기
- 11.2.3 환경 간 차이점 확인하기
- 11.3 문제 고치기
- 11.3.1 드리프트 해결하기
- 11.3.2 환경 간 차이를 조정하기
- 11.3.3 원래 변경사항 구현하기
- 요약
- 12장 클라우드 비용
- 12.1 원가 동인 관리
- 12.1.1 비용 제어 테스트 구현
- 12.1.2 비용 추정 자동화
- 12.2 클라우드 낭비 줄이기
- 12.2.1 태깅되지 않거나 사용하지 않는 자원 중지하기
- 12.2.2 일정에 따라 자원 기동 및 중지하기
- 12.2.3 정확한 자원 유형과 크기 선택하기
- 12.2.4 오토스케일링 활성화하기
- 12.2.5 자원 만료 태그 설정하기
- 12.3 비용 최적화하기
- 12.3.1 수요에 따른 환경 구축하기
- 12.3.2 여러 클라우드 사용하기
- 12.3.3 리전과 클라우드 간 데이터 전송 평가하기
- 12.3.4 운영 환경에서 테스트하기
- 요약
- 13장 도구 관리
- 13.1 오픈소스 도구 및 모듈 사용하기
- 13.1.1 기능성
- 13.1.2 보안성
- 13.1.3 수명 주기
- 13.2 도구 업그레이드하기
- 13.2.1 업그레이드 사전 체크리스트
- 13.2.2 이전 버전과의 호환성
- 13.2.3 주요 변경사항 업그레이드하기
- 13.3 도구 교체하기
- 13.3.1 가져오기를 지원하는 신규 도구
- 13.3.2 가져오기 기능이 없는 경우
- 13.4 이벤트 기반 IaC
- 요약
- 부록 A 예제 실행
- 부록 B 실습 문제 답안