메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

오래된 내 정보 속 옥의 티를 찾아라(2022.9.22~12.31) / 회원정보 UPDATE하고 선물도 받고!

코드로 인프라 관리하기(2판)

클라우드 시대의 코드형 인프라(IaC)와 데브옵스 완벽 가이드, 27가지 관리/구축 패턴 수록

한빛미디어

번역서

판매중

초급 초중급 중급 중고급 고급
4.6점 (25명)
좋아요 : 0

5가지 원칙, 3가지 실행 방법, 27가지 패턴으로

클라우드 인프라 구축부터 관리까지 완벽 가이드!

 

클라우드 시대를 맞이하면서 코드형 인프라(IaC) 관리 방법 또한 진화했습니다. 1판에서 서버 구성 자동화에 초점을 맞추었다면, 2판에서는 클라우드 인프라에 초점을 맞춰 인프라 리소스를 구성하기 위한 스택 구축 및 관리 방법을 소개합니다. 특히 코드형 인프라에 맞춰진 많은 패턴과 안티패턴을 설명하고, 이를 인프라에 적용하는 저자만의 방식을 안내합니다. 또한 코드형 인프라를 위한 3가지 핵심 실행 방법과 클라우드 인프라의 5가지 원칙은 실무자뿐만 아니라 코드형 인프라를 처음 접하는 사람에게도 실용적인 지침이 되어줍니다. 인프라 스택 도구를 사용하여 서비스의 신뢰성과 품질을 향상시키는 방법이 궁금하다면 이 책에서 그 답을 찾아보세요!

 

 

상세이미지_코드로 인프라 관리하기(2판)_700px.jpg

 

키프 모리스 저자

키프 모리스

ThoughtWorks의 클라우드 엔지니어링 글로벌 이사. 더 나은 클라우드 시스템 구축을 위한 엔지니어링 실행 방법, 아키텍처 설계 방법과 딜리버리 실행 방법을 탐구하고 이를 다른 사람들과 이야기하는 것을 즐긴다. 1990년대 초 플로리다에서 자신의 첫 번째 온라인 시스템인 게시판 시스템(BBS)을 운영했다. 이후에는 인터넷을 쉽게 사용하기 위해 테네시 대학교의 컴퓨터과학 석사 과정에 등록했다. 또한 CS 부서의 시스템 관리팀에서 일하며 유닉스 계열의 서버 수백 대를 운영한 경험이 있다. 닷컴 버블이 시작됐을 때 산업과 문화의 다양성에 이끌려 런던으로 이사했으며 여전히 그곳에서 아내, 아들, 고양이와 함께 살고 있다. ThoughtWorks 이전에 일했던 회사는 대부분 스타트업 단계에서 벗어난 안정적인 회사였고 그곳에서 소프트웨어 개발자, 시스템 관리자, 기술 부담당, R&D 관리자, 호스팅 관리자, 기술 리드, 기술 설계자, 컨설턴트, 클라우드 엔지니어링 이사로 일했다.

 

 

이동규 역자

이동규

미국 렌슬리어 대학교에서 컴퓨터과학 학사와 석사를 마치고 네이버에서 개발자로 직장 생활을 시작했다. 처음 담당한 개발 업무가 하이퍼바이저 Xen을 사용한 사내 개발자용 가상 서버 제공 솔루션이었는데 이를 계기로 인프라에 관심을 갖게 됐다. 네이버에서 훌륭한 서버, 네트워크 엔지니어와 협업하여 여러 자동화 프로세스를 만들었으며 이후 Hewlett Packard Enterprise에서 OpenStack 전문가로 일하면서 처음으로 Ansible을 접했다. Ansible로 OpenStack 자동화 설치와 변경을 수행하면서 자동화 도구의 강점을 실감했다. 현재는 SK 텔레콤에서 여러 도메인 전문가와 함께 기존의 온프레미스 영역을 넘어 클라우드와 MEC로 확장되는 IT 영역에 효과적으로 대응하기 위한 인프라 솔루션 개발 및 자동화 구축을 담당하고 있다.

PART 1 기초


CHAPTER 1 코드형 인프라란?

1.1 구시대에서 클라우드 시대로

1.2 코드형 인프라의 이점

1.3 코드형 인프라를 사용한 변경 최적화

     _반대 1: 자동화를 도입할 만큼 변경이 자주 발생하지 않는다

     _반대 2: 구축 이후에 자동화를 도입해야 한다

     _반대 3: 속도와 품질 중 하나를 선택해야 한다

1.4 네 가지 주요 지표

1.5 코드형 인프라를 위한 세 가지 핵심 실행 방법

     _핵심 실행 방법 1: 모든 것을 코드로 정의한다

     _핵심 실행 방법 2: 코드를 지속적으로 테스트하고 딜리버리한다

     _핵심 실행 방법 3: 시스템을 작고 간단하게 빌드한다

1.6 마치며

 

CHAPTER 2 클라우드 시대 인프라의 원칙

2.1 원칙 1: 시스템을 신뢰할 수 없다고 가정한다

2.2 원칙 2: 모든 것은 재생산 가능하다

2.3 위험: 스노우플레이크 시스템

2.4 원칙 3: 사라질 수 있는 것으로 만든다

2.5 원칙 4: 다양성을 최소화한다

2.6 원칙 5: 어떤 프로세스라도 반복 가능한지 확인한다

2.7 마치며

 

CHAPTER 3 인프라 플랫폼

3.1 인프라 시스템의 구성 요소

3.2 동적 인프라 플랫폼

3.3 인프라 리소스

3.4 마치며

 

CHAPTER 4 핵심 실행 방법 1: 모든 것을 코드로 정의한다

4.1 코드로 정의할 수 있는 것

4.2 인프라 언어

4.3 인프라를 코드로 정의하기 위한 구현 원칙

4.4 마치며

 

 

PART 2 인프라 스택으로 작업하기


CHAPTER 5 코드로 인프라 스택 구축하기

5.1 인프라 스택이란?

5.2 스택 구조화를 위한 패턴과 안티패턴

     _안티패턴: 모놀리식 스택

     _패턴: 애플리케이션 그룹 스택

     _패턴: 서비스 스택

     _패턴: 마이크로 스택

5.3 마치며

 

CHAPTER 6 스택으로 환경 구축하기

6.1 환경이란?

6.2 환경 구축을 위한 패턴

     _안티패턴: 멀티 환경 스택

     _안티패턴: 복사-붙여넣기 환경

     _패턴: 재사용 가능한 스택

6.3 멀티 스택으로 환경 구축하기

6.4 마치며

 

CHAPTER 7 스택 인스턴스 구성하기

7.1 스택 파라미터를 사용한 고유 식별자 생성

7.2 스택 파라미터 예제

7.3 스택 구성을 위한 패턴

     _안티패턴: 수동 스택 파라미터

     _패턴: 스택 환경 변수

     _패턴: 스크립트 파라미터

     _패턴: 스택 구성 파일

     _패턴: 래퍼 스택

     _패턴: 파이프라인 스택 파라미터

     _패턴: 스택 파라미터 레지스트리

7.4 파라미터를 사용한 비밀 정보 처리

7.5 마치며

 

CHAPTER 8 핵심 실행 방법 2: 코드를 지속적으로 테스트하고 딜리버리한다

8.1 코드를 지속적으로 테스트해야 하는 이유

8.2 인프라 코드 테스트 관련 문제

     _문제 1: 선언형 코드는 테스트 가치가 낮다

     _문제 2: 인프라 코드 테스트는 느리다

     _문제 3: 의존성을 테스트를 복잡하게 만든다

8.3 프로그레시브 테스트

8.4 인프라 딜리버리 파이프라인

8.5 프로덕션 테스트

8.6 마치며

 

CHAPTER 9 인프라 스택 테스트하기

9.1 예제 인프라

9.2 예제 스택

9.3 스택에 대한 오프라인 테스트

9.4 스택에 대한 온라인 테스트

9.5 테스트 픽스터를 사용한 의존성 처리

9.6 스택의 테스트 인스턴스에 대한 생명 주기 패턴

     _패턴: 영구 테스트 스택

     _패턴: 임시 테스트 스택

     _안티패턴: 이중 스택 단계

     _패턴: 주기적인 스택 리빌드

     _패턴: 지속적인 스택 재설정

9.7 테스트 오케스트레이션

9.8 마치며

 

 

PART 3 서버와 여러 애플리케이션 런타임 플랫폼으로 작업하기


CHAPTER 10 애플리케이션 런타임

10.1 클라우드 네이티브와 애플리케이션 기반 인프라

10.2 애플리케이션 런타임 타깃

10.3 서버에 애플리케이션 배포하기

10.4 애플리케이션 클러스터에 애플리케이션 배포하기

10.5 클러스터로 애플리케이션을 배포하기 위한 패키지

10.6 FaaS 서버리스 애플리케이션 배포

10.7 애플리케이션 데이터

10.8 애플리케이션 네트워크 연결

10.9 서비스 검색

10.10 마치며

 

CHAPTER 11 코드형 서버 구축

11.1 서버 내부에는 무엇이 있을까?

11.2 서버 내용의 출처

11.3 서버 구성 코드

11.4 서버 코드 테스트

11.5 신규 서버 인스턴스 생성

11.6 서버 사전 빌드

11.7 신규 서버 인스턴스 구성

11.8 마치며

 

CHAPTER 12 서버 변경 관리

12.1 변경 적용 시기에 따른 변경 관리 패턴

     _안티패턴: 변경 중 적용

     _패턴: 지속적인 구성 동기화

     _패턴: 불변 서버

12.2 서버 구성 코드를 적용하는 방법

     _패턴: Push 서버 구성

     _패턴: Pull 서버 구성

12.3 여러 서버 생명 주기 이벤트

12.4 마치며

 

CHAPTER 13 코드형 서버 이미지

13.1 서버 이미지 빌드

13.2 서버 이미지의 원본

13.3 서버 이미지 변경

13.4 파이프라인을 사용한 서버 이미지 테스트와 딜리버리

13.5 멀티 서버 이미지

13.6 마치며

 

CHAPTER 14 코드형 클러스터 구축

14.1 애플리케이션 클러스터 구축

14.2 애플리케이션 클러스터를 위한 스택 토폴로지

14.3 애플리케이션 클러스터를 위한 공유 전략

14.4 FaaS 서버리스용 인프라

14.5 마치며

 

 

PART 4 인프라 설계


CHAPTER 15 핵심 실행 방법 2: 시스템을 작고 간단하게 빌드한다

15.1 모듈화를 위한 설계

15.2 인프라 모듈화

15.3 컴포넌트 간 경계

15.4 마치며

 

CHAPTER 16 컴포넌트에서 스택 빌드하기

16.1 스택 컴포넌트를 위한 인프라 언어

16.2 스택 컴포넌트 패턴

     _패턴: 퍼사드 모듈

     _안티패턴: 난독화 모듈

     _안티패턴: 비공유 모듈

     _패턴: 번들 모듈

     _안티패턴: 스파게티 모듈

     _패턴: 인프라 도메인 엔티티

16.3 추상화 계층 빌드

16.4 마치며

 

CHAPTER 17 스택을 컴포넌트로 사용하기

17.1 스택 간 의존성 검색

     _패턴: 리소스 매칭

     _패턴: 스택 데이터 조회

     _패턴: 통합 레지스트리 조회

17.2 마치며

 

 

PART 5 인프라 딜리버리


CHAPTER 18 인프라 코드 구조화하기

18.1 프로젝트와 저장소 구성

18.2 다양한 유형의 코드 구성

18.3 인프라와 애플리케이션 코드 관리

18.4 마치며

 

CHAPTER 19 인프라 코드 딜리버리하기

19.1 인프라 코드 딜리버리

19.2 프로젝트 통합

     _패턴: 빌드 타임 프로젝트 통합

     _패턴: 딜리버리 타임 프로젝트 통합

     _패턴: 어플라이 타임 프로젝트 통합

19.3 스크립트를 사용한 인프라 도구 래핑

19.4 마치며


CHAPTER 20 팀 워크플로

20.1 사람들

20.2 누가 인프라 코드를 작성할까?

20.3 인프라에 코드를 적용하는 방법

20.4 구성 드리프트를 방지하는 방법

20.5 파이프라인 기반 워크플로 거버넌스

20.6 거버넌스가 포함된 프로세스 예제

20.7 마치며

 

CHAPTER 21 안전한 인프라 변경

21.1 변경 범위 축소하기

21.2 불완전한 변경을 프로덕션에 푸시하기

21.3 실시간 인프라 변경

21.4 연속성

21.5 변화하는 시스템에서의 데이터 연속성

21.6 마치며

이제 코드형 인프라(IaC)는 선택이 아닌 필수!

클라우드 시대에 딱 맞는 IaC로 돌아왔다

 

데브옵스(DevOps) 방법론이 보편적으로 사용되고 클라우드 사용량이 증가함에 따라 코드형 인프라가 더욱 주목받고 있습니다. 마이크로서비스 설계, 쿠버네티스 등의 새로운 설계와 도구를 도입하는 변화가 이미 수년 전부터 일어나고 있으며, 코드형 인프라는 이러한 변화에 빠르게 대응하기 위한 필수적인 방법으로 자리잡고 있습니다.

 

이 책은 데브옵스와 클라우드가 보편적으로 사용되는 시대에 딱 맞는 인프라 구축/관리 방법을 제공합니다. 또한 특정 도구의 사용법이 아닌 인프라 관련 도구 및 기술을 사용하기 위한 접근 방식을 안내합니다. 사용할 도구 및 플랫폼과 관련이 있는 패턴, 실행 방법, 기술을 설명하므로 오래도록 책장에 꽂아두고 참고할 수 있는 책입니다.

 

저자가 말하는 코드형 인프라의 핵심

“애자일 소프트웨어 개발과 코드형 인프라의 핵심은 변경에 대한 태도를 뒤집는 것입니다. 변경을 두려워하거나 변경을 최소화하기보다는 자주 변경함으로써 오류를 예방할 수 있습니다. 변경을 더 잘하는 유일한 방법은 자주 변경하여 시스템과 프로세스를 지속적으로 개선하는 것입니다.”

 

 

누가 이 책을 읽어야 할까

  • 소프트웨어 배포 및 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람
  • 클라우드 플랫폼과 인프라에 관심이 있지만 코드형 인프라는 처음인 사람

 

주요 내용

  • IaC를 사용하여 클라우드 기반 인프라를 구축하기 위한 도구와 기술 소개
  • 인프라 리소스에 대한 변경사항을 정의, 프로비저닝, 테스트, 딜리버리하는 방법
  • 다양한 패턴을 사용하여 서버와 클러스터를 프로비저닝, 구성하는 방법
  • 워크플로, 거버넌스를 학습하여 대규모 시스템과 팀에서 인프라 요소를 생성, 관리하는 방법

 

추천사

 

코드형 인프라의 실행 방법은 서버 관리에서 전체 스택 관리로 발전했지만 새로운 기능에 따른 복잡성을 감수해야 한다. 이 책은 명령어를 넘어 모범 사례 뒤에 있는 디자인 패턴과 차세대 자동화 방법을 설명한다.

_패트릭 드부아(DevOpsDays 창업자)

 

코드형 인프라는 여러 소프트웨어 엔지니어링 영역의 교차점이다. 이 책은 각 영역에서 최상의 실행 방법을 재구성하여 독자에게 인프라 자동화에 대한 속성 코스를 제공한다.

_카를로스 콘데(Sweetgreen 엔지니어링 부회장)

 

원칙, 실행 방법, 패턴으로 클라우드 인프라 환경을 탐색하는 실용적인 가이드다.

_에피 엘든(ThoughtWorks 기술 전문가)

코드형 인프라를 시작하는 것은 어렵고 많은 시간이 소요된다. 특히 새로운 인프라 플랫폼을 채택하는 경우 인프라 딜리버리를 자동화하는 도구, 서비스, 실행 방법을 설정하기 위해 많은 작업이 필요하다. 자동화는 서비스 구축과 배포에 사용되기 전에는 그 가치를 입증하기 어렵다.
심지어 서비스에 사용되더라도 인프라와 직접 협력하지 않는 사람은 그 가치를 알기 어렵다.

관리자는 인프라팀에 새로운 클라우드 호스팅 시스템을 신속하게 수작업으로 구축하라고 자주 압박하며 자동화는 나중에 걱정하라고 한다.
- 코드로 인프라 관리하기, 40p

하지만 일단 코드로 인프라를 관리하는 것이 도입된다면, 일은 일사천리다. 필요한 것을 조금만 변경해서 실행하고 커밋하면 이력이 남고, 롤백하기도 쉽다. 에러를 쉽게 바로잡을 수 있다.

반대로 AWS 콘솔에서 자원을 한 땀 한땀 손으로 만들었다면... 이전에 작업한 것에 뭘 추가한 것 같은데, 제대로 기억이 나지 않는다면 어떻게 하겠는가? 뭐가 문제인지 모른 채로 에러의 원인을 찾아 헤멜 것이다.

 

저자는 코드형 인프라를 위한 세 가지 핵심 실행 방법을 다음과 같이 정의한다.

1. 모든 것을 코드로 정의한다.

  • 자원을 빠르게 수정하고 새롭게 빌드하며, 시스템을 예측할 수 있게 만들고 안정적으로 테스트할 수 있도록 한다.

2. 코드를 지속적으로 테스트하고 딜리버리한다.

  • 모든 작업이 완료될 때까지 기다리지 않고 작업을 진행하면서 동시에 테스트한다.

3. 시스템을 작고 간단하게 빌드한다. 

  • 큰 시스템은 변경하기 어렵고 망가지기도 쉽다.

앞으로는 위 내용을 머리에 새기면서 인프라 관리를 해야겠다 싶다.

 

앞으로 앞두고 있는 아키텍처 개선 작업도,

코드로 정의하여 자원을 나중에 쉽게 생성 가능하도록 하며,
지속적으로 테스트하고 배포해볼 것이다.
그리도 시스템을 심플하게 유지해야겠다.

 

한빛미디어 책은 종종 나의 랜선 사수가 되어준다.

<머신 러닝 파워드 애플리케이션>이 그랬고 지금은 이 책이 그렇다.

좋은 책을 발간하고, 제공해준 한빛미디어 감사합니다. 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

이제 클라우드가 기본인 세상이 되었다해도 과언이 아닌 시대가 되었다.

그에 따른 인프라 구축을 더 활용적으로 사용하기 위한 패턴, 설계, 도구 등이 많이 나오고 관련된 책들도 나오고 있다.

이 책은 이 대 클라우드 시대를 위한 코드로 인프라를 관리하는 가이드로 2번째 판이다.

 

아무래도 서버 인프라를 코드로 관리하는 것에 대한 책이다 보니 개발자에서도 인프라를 다루는 데브옵스 팀에게 유용할 것으로 보인다.

그 외에도 서버를 자주 다루는 백엔드 개발자들에게도 어느정도 업무가 맡다면 도움이 될 것으로 생각이 듭니다.

 

책의 처음에도 나오지만 1판과의 차이는 1판이 나올 당시의 인프라 자동화는 서버 구성에  초점이 맞춰져 있었던데에 반해

이후에는 컨테이너와 클러스터가 훨씬 더 많이 사용되면서 인프라 업무가 클라우드 플랫폼의 인프라 리소스 집합(스택)을 관리하는 일을 뜻하게 되었다고 나와있다.

그래서 2판에서는 CloudFormation과 Terraform 같은 도구의 역할인 스택 구축을 더 다루고 있다고 한다.

IMG_5558.jpg

 

책에서는 원칙, 실행방법, 패턴, 안티패턴 이라는 용어를 중점적으로 사용하는데 

문제의 해결 가능성이 있느 방법인 패턴과 그에 더불어

피해야 하는 잠재적 해결방법, 좋은 해결 방법처럼 보이거나! 모르는 사이에 하게되는 행동인 안티패턴을 설명해 줌으로

경계해야할 패턴들을 제시해준다.

IMG_5559.jpg

책의 내용은 마지막의 [작고 간단하게] 빌드한다로 귀결된다고 생각이 든다.

범위가 넓거나 또는 복잡하면 할 수록 테스트도 발전시키기도 어려워 지기에 가장 중요하게 관통된다고 본다.

많은 부분에 걸쳐 코드가 적혀있지만 해당 코드들은 CloudFormation이나 Terraform의 코드가 아닌 의사 코드로 구성되어 있으므로

실제로 구성할 때는 해당 코드들을 잘 이해하고 직접 작성하여야 한다.

인프라를 관리하는 분들이나 그것을 코드로 관리하고 싶은 사람에게는 개념잡고 활용하기에 좋은 책이 아닐까 싶다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 IaC(Infrastructure as Code) 코드로 인프라 관리하기는 예전 부터 들어왔던 용어이다. 하지만 클라우드와 연관된 업무를 하기 전 까지는 크게 관심이 없었던 것도 사실이다. 클라우드 시대가 와서 관련 업무를 하면서 VM을 받아서 내가 원하는 환경을 구성하는 것을 몇번이고 반복하고 있다. 기존에는 쉘 스크립트를 만들어서 실행하는 것으로 만족하고 있었지만 좀더 IaC에 대한 필요성이 크게 느끼고 있다.

 Terraform이나 Ansible에 대한 문법을 알려주는 것은 아니지만 클라우드 시대에 어떤 방식으로 인프라를 관리하면 되는 것인지에 대한 고민을 잘 보여 주고 있다. 몇 백대에 서버를 관리하는 것은 아니지만 몇개의 클러스터를 만들고 없애고 하는 과정에서 점점 코드로 인프라를 관리하는 것에 대한 필요성을 크게 느끼고 있는 중이다.

 그런 면에서 이 책은 나의 고민을 많이 충족시켜주는 책이라고 하겠다. 어떻게 하면 인프라를 코드로 잘 관리해 주는 것인지, 코드로 관리할 때 어떤 점을 중점적으로 봐야하는 것인지 등에 대한 저자의 고민이 많이 담겨져 있다. 이 책을 통해서 나의 업무 환경도 코드로 인프라를 관리하는 방향으로 가봐야겠다.

 클라우드를 관리하는 분들 중에서 IaC에 관심이 있는 분들이라면 이책을 한번 보시는 것의 추천 드린다.

 

  "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

클라우드 시대의 코드형 인프라(IaC)와 데브옵스 완벽 가이드

키프 모리스 지음

이동규 옮김

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

2022년 9월

2022 나는 리뷰어다 활동의 여덟 번째 리뷰

 

9월에 리뷰할 책은 "코드로 인프라 관리하기"이다.

 

우선 옮긴이가 꼭 전달하고 싶은 책의 일부를 보자

 

"애자일 소프트웨어 개발과 코드형 인프라의 핵심은 변경에 대한 태도를 뒤집는 것이다. 변경을 두려워하거나 변경을 최소화하기보다는 자주 변경함으로써 오류를 예방할 수 있다. 변경을 더 잘하는 유일한 방법은 자주 변경하여 시스템과 프로세스를 지속적으로 개선하는 것이다."

 

저자는 '속도를 빠르게 하여 품질을 향상시키고 품질을 향상시켜 속도를 빠르게 한다'를 강조한다.

가장 높은 수준의 데브옵스란 인프라 코드가 애플리케이션 코드와 결합하여 빠르고 안전하게 변경을 실행하고 언제든지 전체 시스템을 복구할 수 있는 상태라고 생각한다.

 

저자와 옮긴이의 기조를 생각하며 책을 읽어나가야 한다.

 

코드형 인프라라는 용어는 무엇인가?

오래전부터 시스템 관리자는 시스템을 관리하기 위해 스크립트를 사용했고, 코드형 인프라는 데브옵스 움직임과 함께 성장했다. 2009년 애자일 인프라라는 강연에서 코드형 인프라 용어가 사용되었고 이 책에까지 이르고 있다.

 

그럼 이 책의 세 가지 핵심 실행 방법을 보자.

 

1. 모든 것을 코드로 정의한다

2. 코드를 지속적으로 테스트하고 딜리버리 한다

3. 시스템을 작고 간단하게 빌드한다.

 

이 세 가지 실행 방법은 서로를 보강하며, 코드는 변경 관리의 여러 단계에서 추적, 버저닝, 배포를 용이하게 한다. 이를 통해 팀은 더 쉽게 더 작은 부분을 지속적으로 테스트할 수 있는 것이다.

 

이 책의 대상 독자는 소프트웨어 배포와 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람으로 팀에서 엔지니어링, 테스트, 설계, 관리자 역할을 맡은 경우다. 시스템, 인프라 또는 소프트웨어 배포와 실행 관련 배경지식이 필요하며, 인프라 자동화를 위해 코드를 사용하는 클라우드나 가상 인프라에 대한 경험이 있다고 가정한다.

 

결국 이 책은 숙련된 실무자와 팀이 효율적인 방법으로 공통 언어를 만들고 인프라 자동화에 도전하는 과정에서 찾은 해결 방법을 명확하게 설명한다. 이 책을 통해 많은 엔지니어들은 시스템과 프로세스 구현의 밑거름을 얻어갈 수 있을 것이다.

 

Love Yourself.

코드형 인프라스트럭처(Infrastructure as code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다.

 

여기서 프로비저닝이란? 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말합니다.

 

IaC를 사용하면 인프라 사양을 담은 구성 파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬어 집니다. 또한 IaC는 매번 동일한 환경을 프로비저닝 하도록 보장합니다.

 

코드형 인프라 도구는 시스템 품질 향상을 위해 변경을 자주, 빠르게, 안정적으로 실행할 수 있게 합니다.

 

클라우드 환경에 진화에 따라 코드형 인프라 IaC 관리 방법 또한 많이 변화 하였습니다. 이 책의 1판에서는 서버 구성 자동화에 초점을 맞췄다면, 2판에서는 클라우드 인프라에 초점을 맞춰 인프라 리소스를 구성하기 위한 스택 구축및 관리 방법을 소개합니다.

코드형 인프라에 맞춰진 많은 패턴과 안티패턴에 대해서 설명하고 코드형 인프라를 위한 3가지 핵심 실행 방법과 클라우드 인프라의 5가지 원칙에 대해서 설명합니다.

 

코드형 인프라를 구현하기 위한 세가지 핵심 방법은 다음과 같습니다.

  •  모든 것을 코드로 정의한다.

     

  •  코드를 지속적으로 테스트하고 딜리버리 한다.

     

  •  시스템을 작고 간단하게 빌드한다.

     

 더 자세한 내용은 책을 통해서 알아보도록 합니다!

 

 이 책은 코드형 인프라를 처음 접하는 사람에게 좋은 시작점이 될 것 입니다. 클라우드 플랫폼 작동 방식에 익숙하고 하나 이상의 인프라 코딩 도구에 대한 기본 지식만 있으면 책 내용의 대부분을 활용할 수 있습니다.

 

인프라 코딩 도구를 사용해본 경험이 있는 사람이라면 이미 알고 있는 내용과 혼합된 새로운 콘셉트와 접근법을 발견하고 적용할 수 있을 것입니다.

 

이 책을 통하여 효율적인 방법으로 인프라 자동화에 대한 여러가지 해결책을 제시 받을 수 있을 것입니다.

서버 프로비저닝과 업데이트를 코드로 완전 자동화 하는 방법에 대해 고민하고 있는 분들에게 추천합니다.!

 

 


 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

(책에 대한 이야기는 맨 마지막 문단에 쓰여져있다. 앞쪽 내용은 개인적인 배경이므로 넘겨도 무방하다.)

 

나는 작은 연구실 규모의 간단한 계산 서버, 스토리지 및 네트워크를 구성하고 관리하고 있다. 내 생각에 작은 규모의 계산 서버는 것은 일반적인 의미에 서버라고 부르기에는 관리가 거의 별로 필요 없으며, 불특정 다수에게 실시간으로 서비스를 하는 것이 아니기 때문에 24시간 모니터링 할 필요도 없다. 서버를 사용하는 사람들은 같은 팀 사람들이며, 그 작업의 종류도 대부분의 경우 중간에 중단이 되어도 큰 지장이 없는 것들이라서 관리 및 버전 업데이트 등도 크게 어렵지 않다. 사용할 수 있는 예산의 금액 및 사용처도 매우 한정되어 있기 때문에 사실상 서버 관리를 제대로 하기에는 거의 불가능한 상황이다. 무엇보다 나를 포함한 다른 친구들은 서버를 전담하는 인력이 아니라서 대부분의 구성 및 장애 처리는 주먹구구식으로 이뤄져 왔다. 물론 그래도 되는 용도이기 때문에 (연구용 과학 계산) 지금까지 큰 문제는 없었다.

 

아주 작은 규모지만 하드웨어-네트워크-소프트웨어 및 사용자 활용 방식까지 모두 설계를 해오면서 자연스럽게 자동화를 통한 효율적인 운영 방식을 고민하기 시작했다. 현재는 외부로 제공하는 웹이나 앱 기반 서비스가 없기 때문에 계산 서버 및 스토리지만을 예시로 들자면 다음과 같다. 

- 어떻게 해야 새로운 cpu 혹은 gpu 계산 서버를 추가했을 때 별다른 설정 없이 현재 체계를 유지하면서 사용이 가능할지? 

- 여러 서버를 하나의 cluster로 묶은 뒤에 master 및 slave node로 구성하여 message passing을 통한 병렬화를 하는 것이 좋을지, 아니면 개별 node를 동일한 계층에 두고 각각을 독립적으로 하는 것이 좋을지? 

- GPU 연산의 경우 단일 작업의 병렬화를 하는 것이 좋을지 개별 task의 병렬화를 하는 것이 좋을지? 

- 스토리지의 경우 작게 보면 개별 프로젝트 규모로 최대한 분할해야 할지, 아니면 큰 규모의 단일 볼륨을 구성하는 것이 좋을지? 큰 단일 규모를 설정한다면 lustre 방식이 필요할텐데, 내가 떠나면 이를 관리할 수 있는 사람이 있을지? 작은 스토리지를 여럿 만들면 리스크 분산은 되겠지만 관리해야 하는 하드웨어 수 자체가 너무 증가하는 것은 아닌지?

- 현재 수준만 고려하지 말고 추후에 n배 이상 scale-up을 하기 위해서 처음부터 어떤 구성을 하는 것이 좋을지?

위의 질문들에 대한 정답은 역시 진리의 case-by-case이다. 개인적으로 내린 결론은 손이 많이 가더라도 하나의 거대 서버 및 스토리지에 의존하는 것보다 여러 개의 작은 서버 및 스토리지를 활용하는 것이 리스크 관리 차원에서 훨씬 안정적이라고 판단해서 목적에 따라 용도를 나누는 방식으로 운영해왔다. 

 

최근 몇년동안 인프라 관리 차원에서 크게 주목을 받은 키워드 중 하나는 바로 Docker가 아닐까 생각한다. 기존 가상화에 비해 훨씬 적은 리소스를 사용하며 효율적으로 환경을 배포할 수 있기 때문에, 시스템 관리와 연관이 있는 사람이라면 Docker는 기본적으로 익혀야 할 스킬이 되었다. 대학원 연구실 규모에서는 굳이 Docker를 사용할 일이 거의 없었지만, 나의 경우 개인적으로 2017년부터 Docker에 관심을 가져오긴 했었다. Docker를 통해서 효율적으로 서버 종류에 관계 없이 원하는 환경을 쉽게 구축할 수 있다는 사실이 매력적으로 느껴졌다. 대학원을 졸업하고 본격적으로 나만의 시스템을 구축해야 할 때는 단일 연구실 규모보다 훨씬 큰 스토리지, 계산 서버, 웹서버, API 구축 등을 고려해야 한다. 처음에는 매우 작은 단일 서버로 시작하더라도 추후의 scale-up이나 클라우드 사용을 고려해야 하며, 이를 위해서는 최대한 효율적인 서버 관리 방법을 필요로 한다. 그런 고민을 하던 중 접하게 된 책이 바로 Infrastructure as Code이다. 자동화 할 수 있다는 것의 다른 의미는 바로 코드를 활용할 수 있냐는 의미기 때문이다.

 

이 책은 따라하며 익힐 수 있는 실습 예제를 제공하지 않는다. 그렇다고 완전히 예제가 없는 것은 아니다. 개념을 나타내는 간단한 pseudo code정도는 제공하지만, 특정 플랫폼이나 서비스를 기반으로 실제 예제를 제공하지는 않는다. 그 이유는 인프라 구축 및 관리라는 것이 워낙 포괄적인 개념이고 각자 환경에 따라 사용하는 도구가 너무나 다양하기 때문이다. 하지만 인프라 및 관리를 하는 독자들에게는 실습보다는 거시적인 방향성을 제시하는 편이 더욱 도움이 될 것이라고 생각한다. 이 책의 큰 구성은 아래와 같다. 

- PART 1 기초

- CHAPTER 1 코드형 인프라란? 

- CHAPTER 2 클라우드 시대 인프라의 원칙 

- CHAPTER 3 인프라 플랫폼 

- CHAPTER 4 핵심 실행 방법 1: 모든 것을 코드로 정의한다

 

- PART 2 인프라 스택으로 작업하기

- CHAPTER 5 코드로 인프라 스택 구축하기 

- CHAPTER 6 스택으로 환경 구축하기

- CHAPTER 7 스택 인스턴스 구성하기

- CHAPTER 8 핵심 실행 방법 2: 코드를 지속적으로 테스트하고 딜리버리한다

- CHAPTER 9 인프라 스택 테스트하기

 

- PART 3 서버와 여러 애플리케이션 런타임 플랫폼으로 작업하기

- CHAPTER 10 애플리케이션 런타임 

- CHAPTER 11 코드형 서버 구축

- CHAPTER 12 서버 변경 관리

- CHAPTER 13 코드형 서버 이미지

- CHAPTER 14 코드형 클러스터 구축

 

- PART 4 인프라 설계

- CHAPTER 15 핵심 실행 방법 2: 시스템을 작고 간단하게 빌드한다

- CHAPTER 16 컴포넌트에서 스택 빌드하기

- CHAPTER 17 스택을 컴포넌트로 사용하기

 

- PART 5 인프라 딜리버리

- CHAPTER 18 인프라 코드 구조화하기

- CHAPTER 19 인프라 코드 딜리버리하기

- CHAPTER 20 팀 워크플로

- CHAPTER 21 안전한 인프라 변경

 

나는 데이터 엔지니어링이나 웹서비스에 대해서 접할 기회가 없었기 때문에 이 책의 내용들이 매우 피상적으로 다가왔다. 하지만 그동안 관심은 많이 있었기 때문에 전문적인 지식이 없더라고 책을 읽는데 큰 어려움은 없었다. 비전문가의 입장에서 특히 인상깊었던 장을 3개 꼽아보자면 아래와 같다.

- Chapter 2, 클라우드 시대 인프라의 원칙: 이 장에서는 5가지 원칙을 제시했는데, 내가 미래에 구축해야 하는 인프라에 대한 고려 사항을 잘 정리해 주었다. (1) 시스템을 신뢰할 수 없다고 가정한다. (2) 모든 것은 재생산 가능하다. (3) 사라질 수 있는 것으로 만든다. (4) 다양성을 최소화한다. (5) 어떤 프로세스라도 반복 가능한지 확인한다.

- Chapter 15, 시스템을 작고 간단하게 만든다: 이 장에서는 인프라 차원에서도 모듈화를 하는 것이 중요하다는 개념을 익혔다. 모듈화의 경우 프로젝트 레벨에서의 코드에만 해당하는 것이 아니라 서버, 나아가 인프라에 대해서도 적용할 수 있는 개념이라는 것이 신선했다. 이러한 발상은 backend 개발자라면 아마 기본 중에 기본으로 생각했을지 모르지만, 개발자가 아닌 나의 경우에는 매우 신선하면서도 곧바로 수긍이 되는 것이었다. 아마 대부분은 가상화 서버를 통해서 모듈화가 잘 되어있을 것으로 생각한다. 아직은 사용할 일이 없는 가상화에 대해서도 졸업 후에는 본격적으로 익혀야겠다는 생각이 들었다.

- Chapter 20, 팀 워크플로: 인프라를 만드는 것도 사람이고, 사용하는 것도 사람이다. 누가 만들고 누가 쓸지에 대해서 고민하는 것은 근본적인 요소이며, 조금 과장을 하자면 팀의 정체성 및 철학과도 괸련이 있다고 생각한다. 사용자, 설계자, 개발자, 테스터, 서포터 등등 여러 역할을 맡은 사람들이 유기적으로 활동하게끔 잘 조율하는 것도 중요하다. 중앙 서버 및 개인 인스턴스 등 구조적인 설계도 함께 해야할 것이며, 소스 코드의 branch 관리도 매우 중요하다. 이 장에서는 이에 대한 내용을 간단하게 정리하였다.

 

정리하자면 이 책을 통해서 실질적으로 특정 인프라를 구축할 수는 없다. 아무런 예제가 없기 때문에 실질적인 구축 방법은 각자 환경에 맞게 찾아야 할 것이다. 사실 인프라라고 하는 개념은 매우 광범위하기 때문에, 이를 예제로 보여주는 것도 여간 쉬운 일은 아닐 것이다. 대신 이 책에서는 인프라 구축 및 관리를 위해서 기본적으로 익혀야 하는 개념 및 고민에 대해서 제시한다. 책을 읽으며 ‘우리 서비스에는 어떤 방식이 적합할까?’ 하는 자문을 하다보면 스스로 얻는 것이 있을 것이다. 분량은 400페이지가 약간 넘으나, 쓱쓱 넘기며 읽다보면 약 2시간정도면 충분히 읽을 수 있다. 구체적인 내용을 담지 않기 때문에 한편으로는 너무 포괄적이고 당연한 이야기를 한다고 생각이 들 때도 있었다. 이것은 내가 비전문가이기 때문이라고 생각하고, 전문가가 읽는다면 내가 놓친 부분들까지 잘 파악할 수 있을 것이다. 인프라 구축 및 관리에 있는 사람들이라면 누구든지 읽어보길 추천한다.

 

고객의 요구 사항은 수시로 변화하면서 비즈니스 세계는 그런 고객의 요구에 부응하기 위해 동분서주하고 있다. 이런 와중에 비즈니스의 복잡성은 나날이 심화되며 이는 수시로 애플리케이션 코드의 복잡성을 가속화 하는 상황을 초래하고 있다. 하지만 여기서 그치는 것이 아니라 애플리케이션의 문제와 별개로 인프라 환경 역시 복잡다단한 변화의 중심에서 벗어날 수 없는 구조와 마주하게 되었다. 개발 환경과 스테이징 환경 그리고 프러덕션 환경으로 이어지는 일련의 환경은 끊임 없이 변경을 요구 받으며 인프라의 생명과 소멸이 반복해서 동작하는 복잡계 속에 포박되어 있는 실정이다. 

 

어떻게 하면 더 빠르게 표준화 된 절차를 통해 완벽하게 인프라를 관리할 수 있을까? 인프라의 생애주기(생성, 변경, 소멸)를 관통하는 하나의 커다란 흐름 속에서 막대한 시간과 비용의 투입 없이 효율적으로 인프라를 관리할 수 있는 방법은 없는 것일까? 이러한 고민 끝에 등장한 개념이 바로 Infrastructure as Code, 일명 IaC이다. IaC를 통해 인프라를 보다 더 효율적으로 관리하고 운영할 수 있는 토대가 마련되었고, 바야흐로 IaC가 인프라 관리의 새로운 패러다임이 되어 버렸다. 오늘은 바로 IaC에 대해 이야기하고 있는 책을 소개하고자 한다. 

 

본 서적은 2판으로서 1판이 서버 구성 자동화에 대해 다루고 있었던 것에 반해, 2판의 등장과 함께 클라우드 환경의 인프라에 대한 논의를 새롭게 이어 가는 책이라 할 수 있겠다. 

 

KakaoTalk_20221002_224915405.jpg

 

먼저 저자는 첫 번째 챕터에서 코드형 인프라의 의의에 대해 갈파하고 있다. IaC가 대두된 배경과 함께 이를 사용할 때 얻을 수 있는 이점 그리고 변경 최적화, IaC를 위한 세 가지 핵심 실행 방법에 대해 언설한다. 이윽고 두 번째 챕터에서 클라우드 시대 인프라의 원칙으로서 다섯 가지를 설파하고 있는데, 어찌 보면 이 원칙이야 말로 IaC를 지탱하는 근본이라고도 할 수 있겠다. IaC는 해당 원칙 위에서 토대를 갖추고 더욱 발전해 나가리라 생각한다. 이어서 세 번째 챕터와 네 번째 챕터에서 동적 인프라 플랫폼과 리소스 그리고 코드로서 인프라를 정의하는 것에 대해 저자의 식견을 엿볼 수 있었고 인프라를 코드로 정의하며 구현하기 위한 원칙을 통해 IaC의 사상과 체계를 더욱 깊게 이해할 수 있게 되었다. 

 

두 번째 파트에서 인프라 스택이라는 개념이 등장하는데, 이를 기반으로 스택 구조화에 대한 패턴과 안티 패턴의 여럿 사례를 배울 수 있고, 스택 환경 구축, 스택 인스턴스를 구성하는 실천적 케이스를 학습하게 된다. 첫 번째 파트에 연이어 IaC의 핵 심 실행 방법이 논의되고 있는데, '지속적으로 코드를 테스트하고 딜리버리 한다'는 기치 아래 이를 둘러싼 문제와 테스트 방법에 대해 심도 있는 설명이 이어진다. 또한 인프라 스택을 테스트하기 위한 보다 더 실증적인 사례를 통해 효율적인 가치를 배울 수 있는 기회가 제공된다. 

 

애플리케이션이 동작하는 환경인 런타임, 코드형 서버를 구축하기 위한 논의 그리고 서버 변경 관리에 대한 설명과 코드형 서버 이미지, 복수의 애플리케이션을 클러스터링하는 구축 방법에 대한 이야기가 무르익어 가면서 어느덧 책은 후반부를 향해 힘차게 달려가고 있다. 여기까지 도달하면서 책의 내용에 대해 온전히 이해할 수 있으면 좋으련만 IaC가 익숙치 않은 초심자들은 집중을 잃고 헤맬 수 있는 상황과 맞닥뜨릴 수도 있다고 생각한다. 하지만 이 책은 결코 한 번 읽어서 체득할 수 없으며, 곁에 두고 여러번 통독할 때만이 소기의 목적을 달성할 수 있으리라. 

 

'시스템을 작고 간단하게 빌드한다'는 핵심 실행 방법의 가치가 오롯이 전달되면서 이를 위한 설계 사상을 눈여겨보게된다. 이어서 스택 컴포넌라는 개념의 등장과 함께 이에 대한 패턴과 안티 패턴에 대한 논의가 이어지고, 스택을 컴포넌트로 사용할 때의 패턴에 대한 사례를 학습하게 된다. 

 

마지막 파트에서 인프라를 특정 환경으로 딜리버리 하기 위해 깊게 생각해 볼 거리가 주어진다. 인프라 코드를 구조화 하기 위한 방법과 코드를 딜리버리 할 때 유용한 패턴 사례, 팀 워크플로를 위한 실천적 방법 그리고 안전하게 인프라를 변경하기 위해 반드시 지켜야 하는 유용한 팁을 배우게 되며 이를 끝으로 저자는 하고 싶은 이야기를 마무리 한다. 

 

이 책은 결코 쉬운 서적이 아니다. 어떻게 보면 IaC 입문서로서 적당하지 않을 수도 있겠다. 인프라에 대한 지식이 전무한 상태에서 본 서적을 임한다면 더욱 더 난관에 빠질 수 있으리라. 그럼에도 불구하고 IaC의 원칙과 핵심 사상, 실천적 가치를 맛보고 싶은 초심자에게는 도전적인 일독을 권한다. 세간에 IaC 도구로 활용되고 있는 플랫폼은 굉장히 다양하게 포진돼 있다. 그럼에도 불구하고 저자는 특정 도구를 활용하지 않고, 가상 도구의 코드를 사용하며 범용적인 환경을 철저히 고려했고 그런 가치 아래 이 책의 유용성은 더욱 더 빛난다고 생각한다. 특정 도구를 잘 다룰 수 있는 방법을 제시한다면 그 도구에 갇히게 되겠지만 IaC의 본질을 담고 있는 핵심을, 가상 도구를 통해 여실히 드러낸 저자의 노력에 대해 박수갈채를 보낸다. 

 

P.S 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

인프라를 생성하고 제어할 수 있는 방법들은 이미 과거와는 비교할 수 없을 정도로 발전했다. 

관리 방법을 가리지 않고 여러 형태, 툴로 늘어나고 있으며 그 복잡도도 계속 깊어지고 있다. 

이전에 읽어보지도 못 했는데 어느덧 2판이 나왔구나..

 

초반에는 코드형 인프라에 대한 개념과 어떻게 설계되어야 하는가에 대한 방향에 대한 이야기를 한다.

‘코드형 인프라’의 ‘인프라’에 대한 설명은 3장에 자세히 설명되어 있는데, 

최신 클라우드 인프라를 3가지 계층으로 나누어 설명하며 이는 애플리케이션, 애플리케이션 런타임, 인프라 플랫폼으로 나눈다. 

코드형 인프라의 구조에 대해 전반적인 이해를 돕기 위한 중요한 챕터이다.

 

이후 인프라 스크립트, 선언형 인프라 언어에 대한 설명과 인프라를 코드로 정의할 때의 가이드 라인에 대한 설명이 이어진다. 

몇몇 대표적인 기술 스택에 대해 그들의 역할에 대해 간략히 소개하기는 하지만 이 도서는 특정 툴이나 언어, 상세 실행 방법에 대해 설명하지 않는다. 

기술과 시스템은 계속해서 바뀌는 것이라 하며... 옳은 말씀이십니다.

 

후반으로 갈수록 다양한 인프라 구축 상황과 관리 패턴, 설계 가이드를 상세하게 제시하는데... 

DevOps 엔지니어분들께는 필구 도서가 아니려나 싶다. 'ㅅ')b

 

개인적으로는 소프트웨어 테스트에 대한 대략적인 설명과 함께, 

기존에 프론트엔드 개발자로서는 직접적으로 접하기는 어려운 선언형 인프라 코드베이스의 테스트에 대한 내용, 

프로덕션 테스트에 대한 내용이 가치가 있다고 생각되었다.

 

과거에 경험하였거나 현재 경험하고 있지만, 잘 몰랐던 용어들과 구축시의 패턴에 대해 정리가 잘 되어 있기에 가이드북으로 두고, 

조직 내에서 관련 이슈들에 대한 논의나 이해가 필요할 때 참고한다면 큰 도움이 될 것 같다. 'ㅅ')/

 

.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

# 코드로 인프라 관리하기(2판)

 

서버 단위에서 가장 큰 변화는 사내에서 구축하는 물리적인 서버에서 클라우드로의 변화가 아닐까 합니다. 이전까지는 서버 랙을 통해 하드웨어를 직접 구축하고 운영체제를 설치하는 과정을 통해 인하우스(InHouse) 서버나(또는 백 오피스, BackOffice) 서버를 구축하는 것이 일반적이었습니다.

하지만 지금은 클라우드를 활용한 인프라 구성에 매우 많은 관심이 있는 시기입니다. AWS와 GCP를 모르는 개발자가 점점 줄어들기도 하고, 서버 구성 비용과 관리 비용을 이유로 들어 점점 클라우드 환경으로 옮겨가는 추세입니다.

- 이 책은 지난 1판에서 주로 다뤘던 '서버 구성 자동화'에서 발전한 클라우드 인프라에 대해 집중적으로 다루고 있습니다. 데브옵스가 더 이상 운영 담당자의 단일 책임을 가지는 상황이 아닌 만큼, 개발자도 반드시 알아두면 좋은 내용으로 가득합니다.

 

## 핵심 방법과 원칙

 

이론적인 내용을 자세히 나열하는 것은 의외로 쉬울지도 모릅니다. 하지만 아무런 배경지식이 없는 사람을 대상으로 기초를 다져나가는 것은 매우 고단한 일입니다. 이 책은 그런 입문자를 위해 쓰인 책입니다.

다양한 주제의 '핵심 실행 방법'을 통해 실제로 인프라를 구성하는 방법과 과정을 따라가도록 지침을 세워줍니다.

또한 다양한 원칙을 통해 기존의 '정적 인프라'와 최신의 '동적 인프라'를 비교하며 서버를 구성하고 관리, 활용하는데 다양한 지침을 안내합니다.

 

## 패턴과 안티 패턴으로 배우는 클라우드 인프라

 

패턴은 수많은 사람들이 비슷한 경험으로 축적된 하나의 길잡이입니다. 반대로 안티 패턴은 좋지 못한 관습과 방법에 대한 타산지석(他山之石)과도 같은 의미입니다. 즉 안 좋은 습관이나 방법을 통해 회피하는 방법을 배우는 것을 의미합니다.

이 책은 인프라 관련 문제를 해결하는 유용한 27가지 패턴과 9가지 안티 패턴을 통해 보다 전문적인 성장을 꽤 합니다.

 

> 한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

이 책은 인프라 환경 구축에 관심이 있거나 관련 업종에서 일하는 혹은 일하길 바라는 개발자를 위한 책이다.

 

이번에 리뷰를 하게 된 도서는 인프라를 관리하는 방법과 관련된 책이다. 그것도 "코드" 만을 통해서 말이다.

옛날에는 머신을 발부받고 여기에 OS를 필요한 버전에 맞춰서 일일이 깔고, 모놀리틱한 시스템 환경을 구축하여 하나의 서버 등만을 구축하여 서비스해 왔다면.

지금은 여러 개의 서버를 cluster 화하여 하나의 가상화된 리소스 덩이로 만든 후, 여기서 필요한 만큼의 리소스를 획득하여 원하는 형태의 가상 물리 머신의 형태를 갖추는 형태까지 기술력이 발전된 상태이다.

그렇기에 앞서 언급한 것과 동일하게 과거처럼 직접 머신에 OS를 깔고, 드라이버를 깔고 서비스 스펙이 한번 결정되면 쉽게 못 바꾸는 (물리적 장비의 한계로..) 현상을 극적으로 해결할 수 있게 되었다.

 

【책의 구성】 '코드로 인프라 관리하기'라는 어떤 책일까?

 

요 책은 코드로 인프라를 관리하기 위해서는 기본적인 개론을 시작으로 하여 여러 안티 패턴과 좋은 패턴 등에 대해서 설명해 주고 있다. 또한 "구성 드래프트", "디자인 스멜", "중복 배제의 원칙" 등 인프라 구성을 하며 알게 될 많은 전문 용어에 대해서도 잘 요약해 주고 있다.

책의 구성은 딱히 어떤 인프라 언어를 타깃으로 구성된 것 같진 않다. 다만 패턴이라는 추상적 개념을 심도 있게 학습함으로써 어떤 인프라 구성 플랫폼, 툴에서도 능동적으로 개발자의 판단에 따라서 적절하게 구성할 수 있게 함에 그 목적이 있는 것으로 보인다.

 


3 장 : 인프라 플랫폼

 

 이 장에서는 인프라에서 사용하는 기본적인 개념에 대해서 학습한다. 애플리케이션 계층과 애플리케이션 런타임 플랫폼 그리고 인프라 플랫폼 등으로 그 stack을 나눠서 각각 layer가 어떤 용도로 사용되는지 그리고 각 레이어에서 담당하는 기능, 용어 등에서 정리하고 있다.

 


5~ 8장: 코드로 인프라 스택 구축 -> 스택으로 환경 구축 -> 스택 인스턴스 구성하기

 

 이 장에서는 스택 구축, 스택으로 환경 구축, 스택으로 인스턴스 구축하기 위한 다양한 패턴과 팁들을 설명한다.

솔직히 여기에 필자가 팁을 더하자면 절대로 인프라 환경과 서비스 환경을 구축할 때 디펜던시(의존성)이 물리는 관계를 갖게 해선 안된다는 점이다.

또한 하나의 stage, real 환경 등이 구축되었다면, 해당 인프라는 모두 동일한 구성을 가진 채로 오직 하나의 코드 버전만을 배포하여 관리하는 것을 권장한다.

만약 구성 드리프트와 같이, 특정 인프라 구성에 대해서만 변경이 이뤄지고 해당 머신에서만 특별한 기능을 수행하게 된다면, 추후 해당 시스템(서비스)에 문제가 발생하였을 때, 어떤 부분에서 문제가 발생하였고 그 영향은 어디까지인지를 파악하는데 리소스를 상당히 낭비할 가능성이 농후하다.

따라서 1 그룹, 1버전, 1배포를 지향함으로써 위와 같은 치명적인 버그 혹은 인적 실수가 발생하지 않게 해야 한다.

위의 3개의 장에 걸쳐 설명한 패턴들은 모두 위의 1:1 구성과 관련된 팁들이 대부분이다.

 


15 장 : 시스템을 작고 간단하게 빌드 한다.

 

 이 장의 가장 핵심은 응집도와 결합도이다. 결합도는 타 모듈(서비스)와의 기능 간 의존성 정도를 나타낸 것이며, 응집도는 특정 기능 내부의 모듈들 간의 의존성(결합 정도)을 의미한다.

일반적으로 모든 서비스, 모듈들은 서로 간에 결합도는 낮고 응집도는 높은 그런 구성이 좋다고 한다.

그 이유는 하기와 같다.

타 서비스, 모듈 간 결합도가 낮다는 것은 하나의 변경으로 인하여 다른 서비스의 변경을 강제하지 않아도 됨을 의미한다. 즉, 하나의 서비스 모듈을 고쳤다고 하여 모든 서비스를 변경해야만 하는 그런 불상사를 피할 수 있다.

또한 기능의 결합도가 높다 함은, 관련 기능이 특정한 위치 혹은 단위로 잘 묶여있음을 의미한다. 이 경우, 해당 기능에 특정한 기능이 추가되거나 반드시 수정되어야 하는 경우가 발생하였을 때, 해당 기능에 대해서만 수정해 주면 되므로, 다른 API, 기능 등에 영향을 끼치지 않게 된다.


즉, 마음 편히 기능 추가와 개선 작업만 하면 된다.

 


【 코드로 인프라 관리하기…….】

 

 요즘은 모든 회사가 Cloud 상에 서비스를 구축하고 있다. 아니면 자체 클러스터를 구축하여 가상화 한 후, 여기에 kubernetes 등을 설치하여 본인들의 물리 자원들을 가상화하여 사용하고 있다.

그만큼 이제는 모놀리틱한 시스템 구성 및 인프라 구성은 시대의 저편 넘어로 건너간지 오래 되었음을 의미한다.

예전 같으면 인프라 리소스를 증가시키기 위해서는 머신 스펙을 잘 찾아본 후, 해당 회사와 콘택트 하여 원하는 서버의 물리적 스펙을 건네준 후, 이에 대한 물리 머신을 건네 받게 되면 여기에 OS와 기타 필요한 기능들을 설치했었다.

하지만 이제는 코드로 원하는 리소스의 가용량을 수치로 입력하고, 네트워크 환경은 어떻게 되고 서비스는 어떤 식으로 배치할지 등등을 코드로만 작성하여 관련 플랫폼에 건네주기만 하면 순식간에 원하는 스펙의 가상화된 머신을 할당 받을 수 있다. 상당한 리소스를 절약할 수 있게된 것이다.

다만 모든 기능들에는 장단점이 있는 법이다. 따라서 가상화 머신과 물리 머신 각각의 장단점을 잘 따저본 후, 자신의 프로젝트에 적합한 인프라를 구성하여 해당 인프라에 본인의 서비스를 업로드 하는 것이 좋다.

 

#본 도서는 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

늘 리뷰할 도서는 [코드로 인프라 관리하기(2판)] 이다.
 
 
 

표지 IMG_20221002_171749.jpg

 

 
 
요즘 한창 클라우드 관련 공부를 하고 있는지라 꽤나 흥미를 가지고 보게 되었다.
 
제목에서 보듯이 개정판이 나온거고 링크를 따라가보니 1판은 5년전쯤에 나온거다.
 
IT에서는 2년만 지나도 엄청나게 변화가 많으니까 5년이면 당연히 개정판이 나올법도 하다.
 
본인은 개발을 주로 업으로 했던지라 인프라 관련해서는 거의 관심이 없었지만,
 
그동안 공부한 클라우드 관련 지식과 이 책을 통해서 배운 지식이 합쳐져서 새로운 무언가가 쌓이는 느낌이 좋았다.
 
이 책은 인프라 관련 내용이 대부분이라 초보자들이나 개발자들을 위한 책은 아니라고 본다.
 
책 소개에도 중급자용으로 되어 있으니 명심해야 한다. 책에서 가급적 설명을 잘 하고는 있지만...
 
나름 이 바닥 짠밥이 있는 나도 보면서 처음 보는 내용이나 용어들이 많았다.
 

용어 IMG_20221002_171904.jpg

 

 
위의 용어에서도 멀티 클라우드, 하이브리드 클라우드 는 많이 들어봤지만 폴리 클라우드는 처음 들어본다.
 
내용을 보면 멀티 클라우드를 폴리 클라우드라고 하는거 같다.
 
이 책은 인프라 관리를 여러 패턴으로 정리하고 설명하고 있다. 패턴 관련 책들을 보신 분들은 알겠지만,
 
패턴으로 정리되면 여러 사람들과 협업이나 대화 하기에 아주 편하고 좋다. 이 책도 그런 장점을 많이 살린듯.
 
 

그림 IMG_20221002_172217.jpg

 

 
위에서는 서비스 메쉬를 그림과 함께 설명하고 사이드카를 언급하고 있다. 위 내용을 보고 서비스 메쉬 이해가 갈까?
 
그리고 책 어디를 봐도 사이드카에 대한 설명은 따로 없어보인다. 내가 놓친걸까?
 
분량의 상당 부분이 코르로 되어 있는데 난 이 코드의 정체가 뭔지 감을 잡을수 없었다. 
 
그래서 책의 서문부터 다시 뒤져봤더니 클라우드포메이션이나 테라폼 코드가 아닌 책 설명을 위한 의사 코드일 뿐이란다.
 
결국 이 책의 내용은 개념 설명은 잘 되어 있으나, 실제로 구성이나 실행해볼 수 있는 코드는 없다는 결론이다.
 
이 책을 선택하려는 독자들은 호불호가 있을 수 있으니 이런 점들을 명심하고 봤으면 좋겠다. 
 
 
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

Author: 키프 모리스 지음 / 이동규 옮김

출판사: 한빛미디어

Score /5: ⭐️⭐️⭐️⭐️⭐️

 

현재 주변을 둘러보면 클라우드를 안들어본 분들이 거의 없을만큼 클라우드를 대다수의 기업들이 활용하고 있습니다.
저도 AWS 클라우드를 활용하고 있으며, 이처럼 클라우드가 우리 생활에 깊숙하게 들어온 것 또한 사실입니다.
현 상황에서 과연 '나는 클라우드를 제대로 활용하고 있는가?' 라고 한다면 그렇지는 않은 것 같습니다.
특히, 클라우드를 코드 형태로 관리하는 것 보다는 화면(GUI)을 통한 구축에만 정성(?)을 쏟고 있었던 것 같습니다.

그런 의미에서 이 책은 스스로에게 코드로 인프라를 관리하고자 할 때 고려해야할만한 부분을 알려주는 가이드의 역할을 한다고 느꼈습니다. 개인적으로 코드를 모놀리식으로 구축해서 인프라를 관리할지, 아니면 마이크로 서비스와 같이 나눠서 관리할 지 알려줄 때가 기억에 남습니다. 다만, 이 책은 현업에 계신 분들이나 어느정도 클라우드 또는 프로그래밍, 서버 기술 전반에 얕은 지식을 가지고 계신 분이 보시기를 권장합니다.

초보자로서는 내가 어떤 기준을 가지고 설계를 해야할 지 알려주는 책이며, 중급자/실무자로서는 현업에서 내가 놓치고 있는 부분이 무엇인지를 확인할 수 있습니다. 특히 저와 같이 클라우드를 활용하시는 분들은 이 책을 가벼이 넘기지 마시고 그동안 내가 놓친 부분등을 꼼꼼히 체크해서 여러분들의 시스템에 적용시키셨으면 좋겠습니다. 실무자에게 특히 도움이 되는 책입니다.

또 다른 좋은 점은 해당 책이 적절한 그림과 표등을 통해 이해를 한결 쉽게하고 있다는 점입니다.
해외에서 집필된 서적의 경우 그림과 표 보다 글만 있는 경우가 있는데 개인적으로는 해당 유형의 책은 눈에 잘 들어오지도 않고 이해도 어려웠습니다. 반면 이 책은 그림과 표를 적절하게 활용해 쉽게 이해할 수 있도록 돕습니다.

이 책을 통해서 코드형 인프라의 세계에 입문해 보시길 바랍니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

1221002.jpg

 

클라우드 사용량이 증가하는 추세입니다.

 

설계와 도구가 도입되고 있는데요.

코드형 인프라에 대한 관련된 책을 살펴보려고 합니다.

 

살펴볼 책은 ‘코드로 인프라 관리하기 2판’입니다.

 

1판의 인기를 이어서 인프라 관련 도구 및 기술을 사용할 수 있는 접근 방식이 담겨있습니다.

 

이 책을 통해 인프라에 대해 이해하고 업무에 한 걸음 더 나아가는 시간이 되길 바랍니다.

 

코드로 어떻게 인프라를 관리하는지 같이 살펴보겠습니다.

 

 

2221002.jpg

 

 

◆ 클라우드 인프라

클라우드 인프라에는 5가지 원칙이 있습니다.

 

여기서는 3가지만 살펴볼 건데요.

첫 번째는 시스템을 신뢰할 수 없다고 가정해야 합니다.

 

하드웨어는 눈으로 직접 보면서 실행했습니다.

하지만 클라우드의 경우 가상의 클라우드에서 실행하기 때문에 하드웨어에 비해 안정적이지 않은 환경일 수 있습니다.

 

두 번째 원칙은 모든 것은 재생산이 가능해야 합니다.

 

프로그램은 입력과 출력이 있을 때 같은 입력엔 같은 결과가 나와야 하는데요.

시스템 구성을 만들면 안정적인 환경을 똑같이 복구가 가능해야 합니다.

 

마지막으로 재생산이 가능하단 것은 반복적인 루틴이 생기게 됩니다.

 

어떤 프로세스라도 반복이 많이 발생하는 경우 자동화에 많은 시간을 투자하면 일의 생산성을 올릴 수 있습니다.

 

 

3221002.jpg

 

 

◆ 코드형 인프라

코드형 인프라를 실행하기 위한 방법은 3가지가 있습니다.

 

첫 번째는 모든 것을 코드로 정의해야 합니다.

 

공부를 할 때 단어장을 만들고 정의하면서 공부하듯이 기능별로 코드를 정의하시길 추천합니다.

 

그와 마찬가지로 코드로 표현할 수 있는 모든 것을 코드로 정의하면 필요한 기능을 쉽게 참고해 만들 수 있습니다.

 

두 번째는 코드는 지속해서 테스트하며 발전시켜야 합니다.

 

처음 설계할 때부터 테스트하면서 개발할 경우 단위별로 테스트를 할 수 있는데요.

코드가 사용되는 단계의 범위가 넓어지고 복잡할수록 테스트를 만들기 어려워지게 됩니다.

 

마지막 세 번째는 시스템을 작고 간단하게 빌드로 만들면 코드형 인프라를 만들 수 있습니다.

 

기능은 작고 간단하게 만들고 빌드해야 배포하고 운영할 때 문제가 줄어들게 됩니다.

 

 

4221002.jpg

 

 

끝으로 1판은 서버 구성 중심의 인프라 자동화를 다뤘는데요.

클라우드 플랫폼의 모든 인프라 리소스 관리 중심으로 바뀌었습니다.

 

클라우드 인프라 관련 27가지 패턴과 9가지 안티 패턴도 제시해줍니다.

 

기존의 정적 인프라에서 현재 동적 인프라에 관해 설명해주므로 이해하는 데 도움 될 것입니다.

 

코드형 인프라를 처음 접하는 분들과 인프라팀과 협업하는 분들에게도 이 책을 추천합니다.

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

라우드에 대한 중요성을 다시 한번 각인시켜주고 어떻게 하면 효율적으로 인프라를 구축할 수 있는지에 대해서 알려주고 있습니다.

이 책의 주제는 서비스 품질 향상을 목적으로 인프라 구성 도구의 다양한 사용 방법을 탐구하는 것입니다.

즉 특정 도구의 설명보다는 사용 방법에 초점을 두고 있으며, 인프라 환경을 구성하기 위한 인프라 리소스 프로비저닝 방법과 배포를 위한 코드 사용 방법, 코드로 클러스터를 정의하고 관리하기 위한 다양한 클러스터 토폴로지 패턴과 접근 방식을 공유하고 있습니다.

코드형 인프라는 데브옵스의 움짐임과 함께 성장하였으며 Devops를 꿈꾸는 사람들에게 가이드가 되어줄 책이라고 생각합니다. 소프트웨어 배포와 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람으로 팀에서 엔지니어링, 테스트 등 하는 사람이 될 수 있고, 또한 코드형 인프라를 처음 접한는 사람에게도 좋은 시작점이 될 것입니다.

이 책은 총 5가지의 파트로 나누어져있습니다.

  1. 기초

  2. 인프라 스택으로 작업하기

  3. 서버와 여러 애플리케이션 런타임 플랫폼으로 작업하기

  4. 인프라 설계

  5. 인프라 딜리버리

클라우드와 자동화 기술이 쉽고 안전하며 빠르고 책임감 있는 인프라 변경을 가능하게 만들기 위해 다음과 같은 흐름으로 책을 구성하고 있습니다.

또한 이를 위해서 3가지의 핵심 실행 방법을 설명하고 있습니다.

  1. 모든 것을 코드로 정의한다

  2. 코드를 지속적으로 테스트하고 딜리버리한다

  3. 시스템을 작고 간단하게 빌드한다

이 3가지를 중심 축으로 책이 진행되고 있습니다.

초반부에서는 용어에 대한 설명과 정의가 잘 되어 있어 따라가기에 무리가 없었지만 후반부로 갈수록 Devops에 관심이 없던 사람이 읽기엔 다소 어려울 수 있다고 생각이 듭니다.

infra_as_code

9월 한빛 리뷰어로 리뷰하게 된 책은 코드로 인프라 관리하기입니다. 리뷰어를 하면서 책을 읽다보면 도서 시장에 작은 트렌드들과 큰 흐름이 있는 것 같습니다. DevOpsCloud Native등 온 프레미스에서 클라우드로 넘어가는 과정의 기술 적 과도기에 봉착 한 사람들이 많을 것입니다.

이 책은 제목 그대로 IaC(Infrastructure as Code)와 그에 수반되는 DevOps 등 다양한 기술과 필요한 이유, 해당 개념에 따라오는 부가적인 요소까지 설명하고 있습니다. 점점 규모가 커지면서 전통적인 방법들로는 빠른 대응과 확장이 힘들 수 밖에 없는 구조가 되어 가고 있습니다. 이런 구조를 개선하기 위해서는 인프라의 도움이 없어서는 안됩니다. 이를 위해서는 인프라도 빠른 구조 변경에 대응할 수 있어야 합니다. 이를 위해 인프라도 적절한 관리가 필요합니다.

인프라 관리를 위해 코드를 이용하는 방법을 이야기하고 있습니다. 단점이자 장점은 특정 벤더에 종속 되지 않아서 중립적인 의사코드를 볼 수 있지만 동시에 구현체를 볼 수 없는 것은 아쉬운 점이었습니다.

정석적인 교과서 느낌의 책이어서 단 권으로 끝내기는 다소 힘든 책입니다. 개념은 다루고 있지만 구현체가 약해서 실습이나 실전을 위해서는 다른 책 한 두권이 더 필요 할 것 같습니다.

이 책을 제대로 읽기 위해서는 선행지식이 좀 많이 필요합니다. 이론서여서 배경지식들이 필요합니다. 인프라클라우드DevOps에자일 등이 바탕이 되어야 이 지식들이 하나의 합주를 할 수 있는 책입니다.

번역은 깔끔하게 되어서 위의 배경 지식만 갖춰진다면 인프라 떄문에 고민하신 분들에게는 정말 추천하는 책입니다.


한빛미디어 2022 도서 서평단 "나는 리뷰어다"의 일원으로 도서를 제공받아 작성한 리뷰입니다.

 

코드로 인프라 관리하기

키프 모리스 지음 / 이동규 옮김

 

책은 잘 쓰여졌다. 초심자를 위해 개괄부터 접근했고, 각 스텝마다 그 길수이 필요한 이유들, 도식과 tip 들도 꼼꼼하게 잘 넣었다. 한마디로 공들여 쓴 티가 난다. 패턴들을 잘 정리해 놓은 것도 유용할것 같다. 마치 대학 교재처럼 체계화하려는 노력이 보인다.

 

이쯤에서 이 책이 필요한 사람이 누굴까 생각해 본다. 일반적으로는 SM 인프라팀, SE 라 불리는 직업, 또 어느 대기업에서는 아직도 그냥 IT 라고도 하는 소위 IT 지원부서 사람들 일거다. 말하려는 요점은 시스템과 관련이 있는 사람이라면 인프라를 알아야 한다는 의미이다. 나와 같은 소프트웨어 개발이 전문인 사람도 인프라에 대한 지식은 마치 남의 영역인 것 같다가도 운영장비에서 갑자기 서비스가 돌지 않거나 하는 현상을 맞닥뜨리면 당황할 수밖에 없다. 그럴 때 해당 인프라가 어떻게 되어 있는지 알면 해결의 길을 빨리 찾을 수 있다.

디지털 전환(DT)과 더불어 클라우드 전환이 대세다. 그런데 클라우드 전환 언제 부턴가 코딩이 들어가기 시작했다. 처음에는 그냥 이런 것도 있었네... 콘솔에 타이핑하던 CLI에 익숙한 엔지니어들을 위해 남겨둔 것이겠거니 했더니 요게 또 여러 사람 괴롭히고 있다. 마치 maven 이나 gradle 처럼 자리를 잡아서 모르면 뒤처지는 듯한 느낌이다.

 

다른 리뷰어들이 말한 대로 실전에서 적용해 볼 실전 코드는 없다. 아마 이 책이 무덤까지 끌어안고 가야할 비판점일 것이다. 시대가 바뀌었다. 요즘은 이론만 아는 법학자 과학자가 인기 없듯이 실무와 최소한의 연결고리는 제시해 주었어야 한다.

결론적으로 한번 보고 참고는 되는데 옆에 끼고 볼 일은 별로 없을 것 같기도 하고, 마치 책장에 꽂아논 아키텍쳐 교과서 느낌이 나지만 2022년 여름 시점에 이런 책 하나는 봐둘 가치는 충분히 있다고 본다. 적어도 독자들을 배려해서 쓰여진 점과 IaC 가 부상하는 특이점을 놓치진 않게는 해줄 것이다.

 

한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

 

 

 

 

 

코드로인프라.jpg

 

 

◎ 추천 포인트

  1. 인프라를 코드로 관리하는 방법에 대한 지침서
  2. IaC 를 위한 관리 패턴 소개
  3. IoC 기반 DevOps 인프라 구성을 위한 심도있는 고찰

 

기본적으로 인프라 담당자를 위한 책이다.
특히 DevOps 엔지니어로서 인프라를 설계하거나 프로비저닝을 하는 사람을 위한 책이다.
하지만, 실제 구현에 대한 내용은 없다.
추상화 된 이론과 개념, 원칙과 패턴을 소개하고, 의사코드를 제시한다.
좋게 말하면 두고두고 볼수있는 교과서 같은 책이고, 나쁘게 말하자면 실체 실천을 위해서는 다른 책이 더 필요하다.
포지션이 다소 애매하다는 이야기가 될수도 있겠다.
실제 구현이 없는 이론서이기때문에 에자일과 데브옵스 환경에 대해 지식이 있다면 충분히 읽을만 하다.
(당연하겠지만 인프라와 클라우드에 대한 기본적인 이해가 필요하다.)



풍부한 도식과 깊이있는 내용, 깔끔한 번역. 무엇하나 빠질게 없는 좋은 책이다.
다만 데브옵스 엔지니어링에 대한 깊이가 부족한 내가 보기에는 다소 뜬구름 잡는 이야기처럼 읽히는 부분도 많았다.
무척 많은 주제를 다루고 있고, 특정 기술(혹은 벤더)에 종속되지 않는 장점이 있지만…
구현체를 볼수 없다는게 초심자에게는 다소 아쉬운 부분이다.
책은 중립적으로 의사코드를 쓰더라도 예시로 든 ShopSpinner의 샘플코드는 제공할수 있지 않았을까…

이번년도에도 한빛 미디어의 나는 리뷰어다에 선정되어 매달 책 한 권씩을 읽을 수 있게 됐다. 9월에는 Infrastructure as Code 책을 받아서 보게 되었다. 이 글은 해당 책에 대한 간단한 리뷰이다.

 

이 책은 IaC의 아주 폭넓은 관점으로의 학습을 도와주는 책이다. 특정 프레임워크를 가르쳐 주는 느낌은 아니다. 마치 데이터베이스 인터널이라는 책처럼 특정 데이터베이스에 대해 한정된 얘기가 아니라 IaC 라는 것 자체에 대해 가르쳐준다. 장점은 개념 적립과 코어한 컨셉에 대해 학습하기 좋다는 건데, 단점은 이것만으로 IaC를 경험하기는 어려울 것 같다. 이전에 Terraform 이라든지 CloudFormation 등을 사용한 경험이 있는 사람들이 읽어보면 기존 지식과 맞물려 시너지가 있을 것 같다. 책 내용 중에 제일 좋았던 건 인프라 스택을 설계하는 방법에 대해서도 학습할 수 있었다는 점이다. 보통 IaC 관련된 책을 봤을 때는 어떻게 기술을 써야 하는지를 학습하는데 이 책에서는 어떻게 구조를 나눠야 할지 어떤 패턴으로 작성할 수 있는지를 설명해준다. IaC에 대해 어느 정도 지식이 있고 IaC를 더 나은 방식으로 사용하길 원하는 개발자들에게 추천해주고 싶은 책이다.

요즘 데브옵스(DevOps)는 IaC(Infrastructure as Code)와 떼려야 뗄 수 없는 관계가 됐습니다. 한빛미디어에 IaC와 데브옵스를 총망라하는 번역서가 있으니 바로 Infrastructure as Code 코드로 인프라 관리하기 입니다. 초판이 2017년 나왔는데 이번에 2판이 발간됐네요.

 

Infrastructure as Code 코드로 인프라 관리하기

 

 

책에서 다루지 않는 내용으로는 운영체제 라던지 Kubernetes 클러스터 설정, 네트워크 등이 있습니다. 또한 Terraform, CloudFormattion, Pulumi 같은 특정 도구로 설명은 하지 않습니다. 대신, 코드로 개념 설명이 필요할 때 stackmaker, servermaker라는 가상의 도구로 설명을 하니 참고하시면 좋습니다.

책에서는 코드로 인프라를 관리하는 여러 가지 방법론을 제시합니다. 코드로 인프라 스택을 구축하고, 스택으로 환경(개발/스테이징/운영)을 구축하는 방법을 이야기합니다. 여기서 스택은 저자가 사용하는 용어로 다음과 같은 의미로 사용됩니다.

"대부분의 스택 관리 도구는 스택 관리 도구라고 불리지 않는다. 각 도구에는 스택이 아닌 인프라 단위를 설명하는 고유한 용어가 있다. 이 책에서는 이러한 도구의 패턴과 관행을 설명한다. 필자는 스택이라는 용어를 사용하기로 했다. 많은 사람이 이 개념을 나타내는 훨씬 더 나은 용어가 있다고 말하면서 서로 다은 용어를 떠올렸다. 이 글을 쓰는 시점에도 이 용어에 대한 업계의 합의가 없다. 그래서 합의가 있을 때까지 스택이라는 단어를 계속 사용할 것이다."

 

IaC 자체를 어떤 식으로 관리할지에 대한 부분도 다룹니다. 여기서 등장하는 개념이 모놀리스 스택, 마이크로 스택입니다. 또한 서버 이미지를 코드로 관리, 코드형 클러스터 구축 그리고 인프라 코드 딜리버리까지 아주 폭넓게 다루고 있습니다. 

책의 후반부로 가면 실제 데브옵스 경험이 없이는 이해하기 어려운 부분들이 등장합니다. 머릿속으로 서버 이미지 생성 과정을 그리거나 배포 단계를 따라서 팀 간 커뮤니케이션까지 떠올리면 좋은데 이런 것들은 경험 없이는 쉽게 받아들이기 어려운 부분이겠습니다. 책의 모든 내용을 한 번에 소화하려는 생각보다는 옆에 두고 틈틈이 들여다보시길 추천드립니다.

이 책에서 가장 인사이트가 깊었던 문장은 다음과 같습니다. 인프라 스트럭처를 구성할 때 외에도 생각이 갇히지 않도록 항상 유념해야 할 부분이 아닌가 싶습니다 :) 

“IT 업계는 모범 사례(best practice)에 대해 이야기하는 것을 좋아한다. 하지만 이 용어는 내용과 관계없이 문제에 대해 하나의 해결 방법만 있다고 생각하게 만든다”

 

 


한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다.

코드로 인프라를 관리하기 위해서는 어떤 것들이 필요할까. 어쩌면 우리는 이미 어느 순간 자기도 모르게 코드를 인프라로 관리하고 있을지도 모른다. 가장 간단한 예로 설정파일을 Git에 push 하고 운영, 검증, 개발로 나누어서 관리하는 것도 코드로 인프라를 관리하는 것이다. 단지 그 범위가 좁을 뿐이다. 

코드리 인프라를 관리하기 위해서는 다음과 같은 것들이 필요하다.

1. 모든 것을 코드로 정의한다.

우리가 생각하는 것 보다 코드로 관리를 할수 있는 것들이 정말 많다. 간단한 설정파일 부터 시작해서 인프라를 구성하는 요소들 까지 말하기 시작하면 한도 끝도 없다. 그리고 최근에는 클라우드를 많이 사용하기 때문에 정의해야 할 요소들이 더 많아졌다. 퍼블릭 클라우드에서 화면에서 직접 마우스를 클릭하면서 리소스를 생성할 수도 있지만 그러한 모든 작업을 코드로 정의해서 한번에 실행해 버리면 우리가 마우스를 여러번 클릭하는 수고를 덜어줄수 있다. 그리고 정의한 내용이 파일로 남아있기 때문에 언제든지 반복작업이 가능하다. 

2. 코드를 지속적으로 테스트 하고 딜리버리 한다.

코드를 작성하기 전에 테스트 코드를 만들고 수십개의 테스트 코드들을 자동으로 실행시켜서 변경에 대한 영향이 없는지 확인하는 작업은 우리가 코드를 작성할 때 자주 하는 일들이다.  인프라를 정의한 파일들도 하나의 코드들과 유사하다. 실제 정상적으로 작업이 되는지 오류는 없는지 검증이 필요하고 테스트가 필요하다. 결국 그걸 확인하기 위해서는 테스트를 해봐야 하고 실제 생성해보기도 해야 한다. 우리가 모르는 순간 리소스의 명칭이 바뀔수도 있고 정의하는 문법들이 변경되어있을 수도 있다. 자주 확인하고 테스트 해보는 노력이 필요하고 자동화가 필요하다.

3. 시스템을 작고 간단하게 빌드한다. 

인프라의 리소스를 코드로 작성해 놓은것을 찾아보면 상당히 길다. 몇줄만 가지고 끝나지는 않는다. 최소 수십줄에서 수백줄에 이를수 있다. 어느 순간 무엇이 어디 정의되어있는지 한참 찾아야 될 수도 있다. 그런 것들을 피하려면 어떻게 해야 할까. 최대한 모듈로 나눠서 작성하는 것이다. 덩치가 커지만 연관관계가 늘어나고 시간도 오래 걸린다. 그리고 실패할 경우 다시 생성해야 되는 리소스들이 많아진다. 

클라우드 사용이 늘어나면서 수많은 리소스들을 컨트롤 해야 하는 일들이 많아졌다. 그런 리소스들을 관리하기 위한 방법이 필요하고 그게 바로 코드로 인프라를 관리하는 것이다. 특정 툴을 이용한 방법을 알아본건 아니지만 이 책을 통해서  어떤 방법이 있는지, 어떤 패턴들이 있는지 공부할 수 있다. 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

코드로 인프라 관리하기 (2판) 도서 표지

소프트웨어 개발을 하다 보면, 제품이나 개발 프로세스에서 빠지지 않는 부분이 바로 인프라에 대한 내용입니다. 특히 빠르게 변하는 소프트웨어의 특성으로 인해 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deploy)가 강조되는 만큼 이를 구현하기 위해서는 인프라의 도움이 절실한 상황입니다. 하지만 소프트웨어에 요구되는 빠른 변화는 인프라에게도 동일하게 적용됩니다. 빠르게 변하는 인프라에 대한 요구사항을 주먹구구식으로 대응 할 수 없습니다. 이에 따라 인프라 자체도 코드 활용할 수 있다면 자체적인 버전관리를 통해 안정적으로 쌓아 올릴 수 있고, 적절한 모듈화를 통해 확장성과 재사용성마저 증가시킬 수 있습니다. <코드로 인프라 관리하기>는 어떻게 하면 인프라를 코드로 관리할 수 있는가에 대해 설명합니다.

이 책에서는 코드로 인프라를 관리해야 하는 이유가 바로 클라우드 시대로의 변화에 있다고 합니다. 과거의 인프라는 엄격한 변경 관리 프로세스를 통해 가능한 안정적인 상태를 벗어나지 않으려고 했습니다. 하지만 클라우드 시대로 변하게 되면서 인프라는 클라우드 속에 가상화되어 원하면 언제든 몇개의 명령어로 손쉽게 불러올 수 있게 되었습니다. 더 이상 엄격한 관리로는 통제되지 않는 상태가 되었습니다. 빠르게 변할 수 있는 동적 인프라를 관리하기 위해 코드형 인프라를 적용하면 다음과 같은 이점이 있습니다.

  • IT 인프라로 신속한 배포 간능
  • 인프라 변경에 따른 노력과 위험 감소
  • 인프라 사용자에게 필요한 리소스 지원
  • 개발,운영, 관리 간에 공통 도구 제공
  • 거버넌스, 보안, 규정 준수 제어를 시각화
  • 장애 해결과 문제 분석 속도 향상

코드형 인프라는 소프트웨어와 동일한 성격을 갖고 있습니다. 따라서 소프트웨어를 개발하는 것 처럼 코드형 인프라는 모든 것을 코드로 정의해야 합니다. 또한 CI/CD에서 이야기 하는 것과 같이 지속적인 테스트와 전달 과정이 필요합니다. 마지막으로 시스템을 가능한 작고 간단하게 빌드해야 합니다.

이 책에서 특히 인상깊었던 부분은 코드형 인프라 반대론자들에 대한 반격(?) 입니다. 개발 프로세스에 대한 제언들은 "자동화가 필요할 정도로 변경이 잦지 않다", "그런 것은 우리에겐 시기상조다", "그것을 적용하기엔 우리는 너무 바쁘다" 와 같은 핑계로 도입을 미루고 있습니다. 신기하게도 이러한 것들은 코드형 인프라를 적용하지 않으려는 반대론자들도 동일한 맥락으로 도입을 미루고 있습니다. 저자는 이런 반대론자들의 주장을 자동화를 사용할 수 있는 방법과 사용해야 하는 방법에 대한 오해에서 비롯된다고 말합니다.

먼저 "자동화가 필요할 정도로 변경이 잦지 않다"에 대해서는 결국 대부분의 시스템은 폐기되기 직전까지 지속적인 변경이 필요합니다. "변경이 잦지 않다"라고 말한 것은 몇 번의 시스템 변경이 있었지만, 이는 일시적이고 임시적인 내용이라 불편을 감수하면서 며칠 밤낮을 고생해 수정했어도 감수해야 한다는 이야기입니다. 앞서 이야기 한 것 처럼 인프라가 지속적으로 클라우드로 넘어가고 있는 시점에서 안정적인 시스템을 구축하기 위해서는 지속적인 변경에서 비롯됩니다. 따라서 변경이 별로 없다는 시스템의 인프라 역시 코드형 인프라 구축은 필요합니다.

다음으로 코드형 인프라 구축은 시간이 오래 걸리기 때문에 시스템을 구축한 다음 자동화를 도입해야 한다는 주장에 대해서 이 책은 다음과 같이 말합니다. 시스템의 구축 단계에서부터 자동화를 도입하지 않으면, 이미 구축된 시스템에 대해 자동화를 적용하는 것이 훨씬 어렵습니다. 또한 자동화 자체는 거추장 스러운 것이 아니라 오히려 더 빠른 개발을 도와주는 편리한 도구에 가깝습니다. 자동화를 통해 지속적인 테스트와 배포를 통해 훨씬 안정적인 프로세스를 만들 수도 있습니다.

마지막으로 빠르게 개발해야 하는 시스템의 경우 자동화 도입은 품질은 높일 수 있지만, 개발 속도가 늦춰진다는 오해에 대해서 이 책은 이렇게 말합니다. 속도와 품질은 서로 트레이드 오프 관계에 있는 것이 아닙니다. 빠르게 개발하기 위해서는 높은 품질을 유지할 수 있어야 하고, 반대로 높은 품질을 유지하기 위해선 빠른 변경이 필요 합니다. 속도를 높이기 위해 품질을 포기하게 된다면, 포기한 품질에서 비롯된 기술 부채가 점차 누적되어 결국 개발 속도가 느려지게 되는 문제를 겪게 될 것입니다. 반대로 품질을 위해 속도를 포기하게 된다면 마감일에 대한 압박으로 인해 결국 어느 순간에는 속도가 필요하게 되어 품질을 포기하려 하게 됩니다.

지속적이고 안정적인 개발을 위해서는 적절한 인프라를 활용해야 합니다. 웹, 앱, 딥러닝, 자율주행 등 수 많은 도메인의 시스템들 역시 다양한 형태의 인프라를 정의하고 있습니다. <코드로 인프라 관리하기>는 특정 도메인에만 적용되는 특수 도구가 아닌 범용적으로 수 많은 도메인에서 필요로 하는 안정적인 인프라 관리 방법에 대한 책 입니다. 빠르게 변화하는 클라우드 시대에 기반이 되는 안정적인 인프라 도입을 위해 개발자라면 한번 쯤 읽어 볼만한 책이라 생각됩니다.



IaC 툴, 플랫폼들은 여럿 존재하지만, 특정 플랫폼에 종속되지 않은 슈도 코드로 작성되어

데브옵스로서 더 넓은 시야를 확보하고, 책의 생명주기를 늘렸습니다.

 

저자: 키프 모리스

 

 

#책소개

 

 

클라우드 시대를 맞이하면서 코드형 인프라(IaC) 관리 방법 또한 진화했습니다.

1판에서 서버 구성 자동화에 초점을 맞추었다면, 2판에서는 클라우드 인프라에 초점을 맞춰 인프라 리소스를 구성하기 위한 스택 구축 및 관리 방법을 소개합니다.

특히 코드형 인프라에 맞춰진 많은 패턴과 안티패턴을 설명하고, 이를 인프라에 적용하는 저자만의 방식을 안내합니다.

또한 코드형 인프라를 위한 3가지 핵심 실행 방법과 클라우드 인프라의 5가지 원칙은 실무자뿐만 아니라 코드형 인프라를 처음 접하는 사람에게도 실용적인 지침이 되어줍니다.

인프라 스택 도구를 사용하여 서비스의 신뢰성과 품질을 향상시키는 방법이 궁금하다면 이 책에서 그 답을 찾아보세요!

라고 교보문고가 말하더라.

 

 


 

# 이 책의 특징

 

1. DevOps라는 것에 관심이 있다면 볼 책

내가 더욱이 DevOps에 관심이 많아서 읽고 있다.다만 이해하기 위해서는 셸 스크립트나 클라우드에 대한 이해가 조금은 있어야 한다.

 

2. 구성

구성은 평범하다. 다만 처음보는 사람에게도 읽힐만큼 쉽게 쓰여있다. 다만 두껍다.

 

3. 용어설명

용어설명이 되어있긴 하지만 앞에 언급되었던 용어들이 뒤에서 설명이 다시 나오지 않기 때문에 잘 읽어야 책을 무리 없이 읽을 수 있다.

 

4. 내용은 자체는 어렵다.

쓰여진 내용 자체는 쉽게 쓰이되 내용의 무게만큼은 어렵다. 클라우드 관리를 어떻게 하며, 패턴은 어떻게 하고 등등실무에 더 가까운 내용이기 때문에 책만으로는 이해가 어렵다.

 


 

#후기

 

책은 좋다. 다 읽어보도록 하겠다. 내가 IaC를 잘해낼 수 있을거라 생각하고 읽어본다.더욱이 실무에서 적용해보고 싶다. 과연 내 생각대로 잘 될까..?

 

 


 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 


"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

 

 

큰 프로젝트를 진행해 본 적이 없고, 유지 보수를 해본 경험도 없어서 자동화에 대해 관심이 없었다. 하지만 자동화, CI/CD, git action 등 여러 가지 단어들이 들려올수록 공부해야겠다는 생각을 하기 시작했다. 이 책은 나에겐 굉장히 어려운 책이었다. 사실 제대로 이해한 파트가 많지 않다.

책의 초반에는 개념 설명이 많이 나온다. 클라우드 시대가 나온 배경부터 시작해서 코드형 인프라가 왜 필요한지, 코드형 인프라의 반대 의견에 대한 반론까지 해준다. 왜 우리가 코드형 인프라를 공부해야 되는지, 장점이 뭔지에 대한 자세한 설명 덕분에 공부에 대한 흥미가 생겼다. 코드형 인프라의 핵심 실행 방법 3가지에 대해서도 설명한다.

1. 모든 것을 코드로 정의한다.

2. 코드를 지속적으로 테스트하고 딜리버리 한다.

3. 시스템을 작고 간단하게 빌드한다.

이후는 실제 코드형 인프라를 구축하는 것부터 배포까지의 내용을 담고 있다. 인프라 언어에는 뭐가 있는지, 패턴은 뭐가 있는지 등 정말 세세하게 나와있다. 하지만 내가 인프라를 구축해본 적이 없어서 그런지 대체로 이해하지 못했다. 특히 스택 파라미터 같은 것들은 정말 자세하게 패턴이 나와있었는데 뭐가 뭔지 어느 상황에 적용하는 건지 감을 잡지 못했다.

이 책은 실무자에게 맞는 책인 거 같다. 자동화나 인프라에 대해서는 도커, 깃 액션 정도만 아는 나에게 인프라 구축, 관리, 더 나아가 배포까지 내용을 이해하는 것은 무리였다. 하지만 실제로 지금 프로젝트를 진행하고 있고, 인프라 구축부터 배포까지 해야 되는 사람이라면 큰 도움을 받을 수 있는 책이다.

어쩐지 인프라는 이름만 들어도 어려울것 같고, 잘 못 해서 시스템 망가질것 같고 무서움. 책은 인프라 구성하는 방법에 어떤것들이 있고, 어떤점이 좋고 안 좋은지 차근차근 설명해주고 있음. 특정 환경에서 구축하는 방법은 아님에 주의. 

결제하기
• 문화비 소득공제 가능
• 배송료 : 2,000원배송료란?

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

도서판매처

리뷰쓰기

닫기
* 도서명 :
코드로 인프라 관리하기(2판)
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
코드로 인프라 관리하기(2판)
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
코드로 인프라 관리하기(2판)
구입처*
구입일*
부가기호*
부가기호 안내

* 인터넷 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한되며 절판도서, eBook 등 일부 도서는 인증이 제한됩니다.

* 구입하지 않고, 허위로 도서 인증을 한 것으로 판단되면 웹사이트 이용이 제한될 수 있습니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실