
책 소개
예제 프로젝트 파일은 여기에서 내려 받으실 수 있습니다.
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 실습 문제 답안
관련 블로그 글
코드형 인프라(IaC), 기업 혁신의 핵심으로 떠오르다
최근 기업 IT 인프라의 운영 방식이 급격히 변화하고 있다. 클라우드 환경이 점점 확대됨에 따라 인프라의 자동화와 효율적인 관리가 필수 요소로 자리 잡았으며, 이를 가능하게 하는 핵심 기술 중 하나로 코드형 인프라(Infrastructure as Code, 이하 IaC)가 주목받고 있다. IaC는 인프라를 코드화하여 변경 사항을 자동 적용하고, 버전 관리와 지속적인 통합·배포(CI/CD)를 가능하게 하는 혁신적인 접근 방식이다.
<코드형 인프라 개념도>
∴ 코드형 인프라, 왜 중요한가?
기존의 수동 인프라 관리 방식은 설정 변경이 어려우며, 사람이 직접 개입해야 하기 때문에 오류 발생 가능성이 높다. 반면, IaC를 적용하면 인프라 환경을 코드로 정의하고 이를 자동화하여 일관성과 재현성을 확보할 수 있다. 특히, 멱등성(idempotency, 첫 번째 수행 후 여려 차례 적용해도 결과를 변경시키지 않는 작업 또는 기능의 속성)을 보장함으로써 동일한 코드를 여러 번 실행해도 동일한 결과를 얻을 수 있으며, 이를 통해 안정적인 시스템 운영이 가능해진다.
IaC는 다양한 프로그래밍 언어 및 도구를 활용해 구현할 수 있다. 대표적으로 테라폼(Terraform), AWS CloudFormation, Ansible 등이 있으며, 이러한 도구들은 클라우드 환경(AWS, GCP, Azure 등)뿐만 아니라 온프레미스 데이터센터에도 적용 가능하다.
<코드형 인프라 구성 요소>
∴ IaC 도입의 실무 사례와 패턴
IaC의 도입과 운영은 단순히 인프라를 코드화하는 것을 넘어, 개발 및 운영 프로세스 전반을 최적화하는 역할을 한다. 주요 패턴으로는 다음과 같은 방식이 활용된다.
모듈화(Modularization): 공통적으로 사용되는 인프라 구성 요소를 모듈화하여 재사용성과 유지보수성을 높인다.
버전 관리(Version Control): Git과 같은 소스 코드 관리 시스템을 통해 인프라 변경 이력을 추적하고 협업을 용이하게 한다.
테스트 자동화(Test Automation): 지속적인 배포 환경에서 IaC의 안정성을 검증하기 위해 통합 테스트와 계약 테스트를 수행한다.
보안 및 규정 준수(Security & Compliance): 최소 권한 원칙(Principle of Least Privilege, PoLP)을 준수하고, 코드형 정책(Policy as Code)을 통해 인프라 보안 정책을 자동화한다.
이러한 패턴을 활용하면 기업은 운영 비용 절감, 인프라 확장성 확보, 배포 속도 향상 등의 효과를 얻을 수 있다.
<코드형 인프라 장점>
∴ 클라우드 환경에서의 IaC 적용 확대
기업들이 클라우드 네이티브 환경을 도입하면서 IaC의 중요성은 더욱 커지고 있다. 2024년 Firefly 설문조사에 따르면, 응답자의 3분의 2 이상이 자사의 클라우드 인프라의 절반 이상을 IaC로 관리하고 있다고 답했다. 특히, IaC는 멀티 클라우드 및 하이브리드 클라우드 환경에서도 유용하게 활용될 수 있으며, 기업들은 이를 통해 IT 자원을 보다 효율적으로 운영할 수 있다.
IaC는 초기 도입 단계에서 일정한 학습 곡선이 필요하지만, 장기적으로는 인프라 운영의 복잡성을 줄이고 기업의 IT 혁신을 가속화하는 핵심 기술로 자리 잡을 것으로 전망된다. 이에 따라 기업들은 IaC 도입을 고려할 때, 조직 내 역량을 강화하고 관련 도구 및 프로세스를 정비하는 것이 중요하다.
<코드형 인프라 도구>
∴ 결론
코드형 인프라는 단순한 기술적 변화가 아니라, 기업의 IT 운영 방식 자체를 혁신하는 패러다임 전환이다. 빠르게 변화하는 IT 환경 속에서 IaC를 효과적으로 도입하고 활용하는 기업이 경쟁력을 확보할 수 있을 것으로 보인다. 기업들은 IaC를 단순한 자동화 도구가 아닌, 개발과 운영의 긴밀한 협업을 가능하게 하는 전략적 자산으로 인식하고 적극적인 도입을 고려해야 할 시점이다.
------------------------------------------------------------------------------------------------------------------
∴ 파이썬과 테라폼으로 알아보는
코드형 인프라의 패턴과 실무
이 책은
- 다양한 인프라 자원을 그룹화하거나 분리하는 방법
- 실무 사례를 통해 팀 간, 조직
간 협업하는 방법
- 인프라 배포 전 테스트를 도입하는 방법 및 지속적인 배포 방안
- 다양한 인프라 배포 방법, 배포
실패 시 영향 범위를 최소화하는 방법
- 리팩토링
방법 및 클라우드 환경에서의 비용 절감 방법
등을 다뤄 코드형 인프라에 대해서 잘 모르던 사람도
이 책을 읽고 나면 코드형 인프라를 왜, 어떻게 도입할 수 있는지
감을 잡을 수 있다.
◈ 추천의 글 ◈
“재사용성, 멱등성, 모듈화, 진화 가능성과 같은 핵심 기능을 깊게 다루면서도 특정 도구에 국한되지 않는 아주 훌륭한 책이다!”
— 루치안 말리(Lucian Maly) / 레드햇
“명확하면서도 포괄적이다. 신뢰 가능하고 재사용 가능한 방법으로 인프라를 자동화하는 방법을 알려준다.”
— 코시모 아타나시(Cosimo Attanasi) / ER Sistemi
“팀이 실무 프로젝트에 IaC의 모범 사례를 적용할 수 있도록 돕는다.”
— 데이비드 크리프(David Krief) / Altanasia
“비판적인 통찰력과 핵심 지식을 제공하는 이 책은 훌륭하다!”
— 제레미 브라이언(Jeremy Bryan) / Anchore
-----------------------------------------------------------------------------------
크리에이티브 커먼즈 라이센스 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.