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

한빛출판네트워크

한빛랩스 - 지식에 가능성을 머지하다 / 강의 콘텐츠 무료로 수강하시고 피드백을 남겨주세요. ▶︎

코드로 인프라 관리하기

효율적인 인프라 관리를 위한 자동화 방법

한빛미디어

번역서

절판

  • 저자 : 키프 모리스
  • 번역 : 강재준
  • 출간 : 2017-03-01
  • 페이지 : 400 쪽
  • ISBN : 9788968483431
  • eISBN : 9788968487538
  • 물류코드 :2343
  • 개정판정보 :개정판이 새로 출간되었습니다. 개정판 보기
  • 초급 초중급 중급 중고급 고급
4.2점 (14명)
좋아요 : 39

새로운 시대의 IT 인프라 관리를 위한 현실적인 시각 

 

이 책은 시스템 관리자가 자동으로 플랫폼을 통제하는 ‘코드로서의 인프라’를 세 부분으로 나눠 소개하는 안내서다. 1부에서는 인프라 요소를 만들고 구성하는 데 필요한 플랫폼과 도구를 살펴보고, 2부에서는 플랫폼과 도구를 사용하는 4가지 패턴을 설명한다. 3부에서는 실제로 코드로 인프라를 관리할 수 있도록 인프라를 구성하는 방법을 다룬다. 시스템 관리자, 인프라 엔지니어, 프로젝트 리더, 아키텍트 등 IT 인프라를 관리, 개발, 운영하는 사람에게 효율적으로 협업하는 방법을 제시한다.

  • 새로운 인프라 기술을 선택할 때 조직이 놓치기 쉬운 문제점 설명
  • 동적 인프라 플랫폼의 기능과 서비스 모델 이해
  • 핵심 인프라 자원 제공 방법, 프로비저닝 및 구성 도구 사용법 소개
  • 동적 인프라를 관리하는 서비스와 도구 소개
  • 프로비저닝, 서버 템플릿 빌드, 실행 중인 서버 업데이트 등의 구체적인 패턴과 사례 설명

 

 

이 책의 주요 내용

 

많은 인프라 관리자에게 클라우드 서비스의 가장 큰 장점을 꼽으라면 원하는 때 필요한 만큼 인프라를 사용할 수 있는 유연성을 이야기한다. 이런 마법과 같은 일이 가능해진 것은 클라우드 서비스에서 제공해주는 제어 환경으로 인프라를 구축해서 사용할 수 있기 때문이다. 그런데 클라우드 서비스가 점점 발전하면서 다음과 같은 논의가 시작되었다.

 

“애플리케이션을 배포하는 것처럼 인프라를 배포할 수 있지 않을까?”

 

클라우드 서비스는 애플리케이션 개발 환경에서 정해진 절차를 거쳐 애플리케이션을 자동으로 배포하는 것처럼 인프라를 구축하고 관리할 수 있게 발전하고 있다. 즉, 인프라 운영 팀은 물론이고, 필요하다면 애플리케이션 개발 팀도 손쉽게 직접 인프라를 구축하거나 관리할 수 있는 시대가 열린 것이다.

 

이 책은 코드 중심으로 인프라 환경을 구축, 배포, 관리하는 새로운 개념의 인프라 운영 방법을 소개한다. 저자는 기존 클라우드 서비스, 혹은 기존 OS에서 제공하는 GUI 환경으로 인프라를 운영하는 것이 비효율적이라고 강조한다. 코드를 작성해서 다룰 수 있는 다양한 도구를 인프라와 연계하여 인프라를 운영하는 것이 자동화는 물론이고, 조직 전체의 생산성을 늘리는 것이라고 주장한다. 그리고 이러한 주장을 뒷받침하는 다양한 기술적 개념과 사례를 이 책에 담았다.

 

새로운 인프라 운영 방법에 관심은 있지만 어떤 방법으로 접근해야 하는지 잘 몰라서 망설였던 인프라 관리자라면 이 책을 통해서 효율성과 생산성 높은 인프라 전문가로 거듭날 것이다.

 

 

대상 독자

  • 시스템 배포 및 테스팅, 유지 보수에 관심 있는 IT 인프라 운영자
  • 기업 시스템 아키텍트 및 프로그래머, 프로젝트 관리 담당자
  • 대용량 시스템의 효율적 운영에 관심 있는 기업 CTO 및 경영진 

 

detail.png

 

키프 모리스 저자

키프 모리스

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

 

 

강재준 역자

강재준

SK텔레콤에서 10년 이상 네트워크 시스템과 IT 인프라를 구축, 관리, 운영하는 업무를 담당하고 있다. 2G/3G/LTE 통신 인프라 및 다양한 연동 시스템을 운영해왔으며, 가상화 기반의 LTE 코어 시스템(NFV) 구축에 참여하여 국내 최초로 상용화했다.

현재는 VMware, 오픈스택 등 다양한 상용 및 오픈소스 솔루션을 기반으로 T아이디, T map 등 SK텔레콤 주요 서비스의 인프라를 구축 및 운영하고 있으며, 데이터센터 인프라 관리 및 자동화에 관심을 두고 계속 추진하고 있다.

『VMware vSphere 6 서버 가상화 구축과 운용』(에이콘출판사, 2015), 『오픈스택 인 액션』( 한빛미디어, 2016), 『코드로 인프라 관리하기』(한빛미디어, 2017)를 번역했다.

 

 

PART 1 기초

 

CHAPTER 1 문제와 원칙

__1.1 왜 코드로서의 인프라인가?

__1.2 코드로서의 인프라란 무엇인가?

__1.3 동적 인프라의 문제점

__1.4 코드로서의 인프라 원칙

__1.5 관례

__1.6 반취약성: 견고함을 넘어서

__1.7 마치며

__1.8 다음은 무엇인가?

 

CHAPTER 2 동적 인프라 플랫폼

__2.1 동적 인프라 플랫폼이란 무엇인가?

__2.2 동적 인프라 플랫폼을 위한 요구 사항

__2.3 플랫폼이 제공하는 인프라 자원

__2.4 동적 인프라 플랫폼의 유형

__2.5 동적 인프라 플랫폼 선택하기

__2.6 클라우드와 가상화의 기계적 교감

__2.7 마치며

 

CHAPTER 3 인프라 정의 도구

__3.1 코드로서의 인프라를 위한 도구 선정하기

__3.2 구성 정의 파일

__3.3 인프라 정의 도구로 작업하기

__3.4 구성 레지스트리

__3.5 마치며

 

CHAPTER 4 서버 구성 도구

__4.1 자동 서버 관리의 목표

__4.2 서버 관리 기능을 위한 도구

__4.3 서버 변경 관리 모형

__4.4 컨테이너

__4.5 마치며

 

CHAPTER 5 일반적인 인프라 서비스

__5.1 인프라 서비스와 도구를 위한 고려 사항

__5.2 팀 간에 서비스 공유하기

__5.3 감시: 경보, 측정값, 로깅

__5.4 서비스 탐색

__5.5 분산 프로세스 관리

__5.6 소프트웨어 배포

__5.7 마치며

 

PART 2 패턴

 

CHAPTER 6 서버를 프로비저닝하는 패턴

__6.1 서버 프로비저닝

__6.2 서버를 생성하는 패턴

__6.3 새 서버를 부트스트랩하는 패턴

__6.4 마치며

 

CHAPTER 7 서버 템플릿을 관리하는 패턴

__7.1 스톡 템플릿: 다른 누군가 할 수는 없는가?

__7.2 템플릿을 사용해 서버 프로비저닝하기

__7.3 서버 템플릿을 만드는 절차

__7.4 원본 이미지

__7.5 서버 템플릿 업데이트하기

__7.6 역할별 템플릿 생성하기

__7.7 서버 템플릿 관리 자동화하기

__7.8 마치며

 

CHAPTER 8 서버를 업데이트하고 변경하는 패턴

__8.1 서버 변경 관리 모형

__8.2 일반적인 패턴과 관례

__8.3 지속적 배포를 위한 패턴과 관례

__8.4 불변 서버를 위한 패턴과 관례

__8.5 구성 정의를 관리하는 관례

__8.6 마치며

 

CHAPTER 9 인프라를 정의하는 패턴

__9.1 환경

__9.2 인프라 구조화하기

__9.3 정의 도구 실행하기

__9.4 마치며

 

PART 3 관례

 

CHAPTER 10 인프라를 위한 소프트웨어 엔지니어링 관례

__10.1 시스템 품질

__10.2 인프라 관리를 위한 VCS

__10.3 지속적 통합

__10.4 지속적 전달

__10.5 코드 품질

__10.6 중요한 인프라 변경 관리하기

__10.7 마치며

 

CHAPTER 11 인프라 변경 시험하기

__11.1 애자일 시험 방법

__11.2 시험 구조화하기: 시험 피라미드

__11.3 균형 잡힌 시험 체계 구현하기

__11.4 시험 코드 관리하기

__11.5 시험을 위한 역할과 작업 흐름

__11.6 마치며

 

CHAPTER 12 인프라의 변경 관리 파이프라인

__12.1 변경 관리 파이프라인의 혜택

__12.2 파이프라인 설계 지침

__12.3 파이프라인 설계의 기본

__12.4 파이프라인을 사용하는 관례

__12.5 더 복잡한 시스템으로 파이프라인 확장하기

__12.6 구성 요소 간의 의존성을 다루는 기법

__12.7 구성 요소 간 인터페이스를 관리하는 관례

__12.8 마치며

 

CHAPTER 13 인프라 팀의 작업 흐름

__13.1 동작하는 것은 무엇이든 자동화하라

__13.2 로컬 샌드박스 사용하기

__13.3 코드 구조화 패턴

__13.4 작업 흐름의 효과성

__13.5 마치며

 

CHAPTER 14 동적 인프라의 지속성

__14.1 서비스 지속성

__14.2 무중단 변경

__14.3 데이터 지속성

__14.4 재해 복구

__14.5 보안

__14.6 마치며

 

CHAPTER 15 코드로서의 인프라 준비하기

__15.1 진화적 아키텍처

__15.3 효과성 측정하기

__15.3 사용자에게 권한을 부여하라

__15.4 지속적 변경 관리를 통한 관리 체계

__15.5 마치며: 결코 끝난 게 아니다

 

PART 1 기초  

PART 2 패턴  

PART 3 관례

 

 

평소에 인프라에 대한 생각이 별로 없었지만, IT개발자로서 다양한 책을 읽어보자는 목표와 더불어 좋은 기회가 되어서 읽게 된 책.

일단 서론 부분이 마음에 들었다.

독자 대상, 현재 관리의 문제점, 정의, 목표, 구성.

앞쪽에서 분류가 잘 되어 있으니, 당연히 읽기 쉬울거라 생각했는데 이게 왠걸.

갈 수록 어렵다.

어려운데, 쉬운것 같기도 하고,

개발자에게 필요없을 것 같은데, 필요하는 느낌이 들었다.

기본적으로 구성이 잘 되어 있어서 한번 쓱~ 읽고 아~ 이게 인프라구나, 이렇게 관리를 했었고, 코드로서는 이렇게 관리할 수 있구나를 알 수 있었다.

나름 입문하려는 사람에게는 도움이 될 것 같은데, 현재 협업에서 일하는 사람들에게는 적용하기 조금 어렵지 않을까라는 생각이 든다.

아무래도 클라우드와 관련이 되다보니, 회사 전반적으로 지원해주지 않으면 적용하기 어렵다는 점과 혼자서는 절대로 할 수 없을 것 같다.

그래도 읽어보기에는 좋은 책인 것 같다.

 

 

#독자대상 IT 인프라 운영현장에서 일하는 사람, 시스템 관리자, 인프라 엔지니어, 프로젝트 리더, 아키텍트 등 IT 인프라를 관리, 개발, 운영하는 사람들을 대상으로 효율적으로 협업하는 방법을 제시하는 책이다. 

저자는 여러팀이 사용하고 있는 기법 및 패턴을 소개하고, 

IT인프라를 관리하는 방법을 현실적인 시각에서 제공했으면 해서 책을 출판하게 되었다고 한다. 

 

책은 시스템 관리자가 자동으로 플랫폼을 통제하는 ‘코드로서의 인프라’를 세 부분으로 나눠어 구성되었다.  

1부에서는 인프라 요소를 만들고 구성하는 데 필요한 플랫폼과 도구 설명,  

2부에서는 플랫폼과 도구를 사용하는 4가지 패턴을 소개 및 설명.  

3부에서는 실제로 코드로 인프라를 관리할 수 있도록 인프라를 구성하는 방법 에 대해서 작성되어 있다.

 

현재 관리의 문제점

#클라우드와 #자동화도구를 채택하기만 해도 장벽을 낮출 수 있지만, 

도구들을 시스템, 관습, 절차에 적용할 수 있을까를 고민하게 된다. 

낡은 관리 절차를 준수하기를 강요하는 조직은 경쟁자들에게 뒤쳐지는 모습을 보게 된다. 

그래서 클라우드와 자동화 도구등 변화하는 시스템에 맞춰 대처해야 한다. 

그것이 코드로서 인프라를 관리하는 것이다.

 

정의 

코드로서의 인프라는 소프트웨어 개발 관례에 기반을 둔 인프라 자동화 방법으로 시스템 구성을 하고 변경하기 위한 일관되고 반복 가능한 절차에 중점을 두고, 변경은 철저한 검증을 포함한 무인 절차를 통해서 시스템에 적용된다.

 

목표 

- IT 인프라가 변경의 장애물이 되는 것이 아니라, 변경을 지원하고 가능하게 하는것. 

- 사용자나 IT담당자에게 고통과 스트레스를 주지 않는 일상적인 작업 

- 담당자는 지루하고 반복적인 작업보다는 능력을 필요로 하는 일에 사용 

- 사용자는 IT담당자의 지원없이도 원하는 자원을 정의하고 프로비저닝하고 관리할 수 있다. 

- 문제의 해결책은 회의나 문서가 아니라 구현,시험,측정을 통해 검증

 

#IT 인프라의 문제점 

- 서버의 수가 폭증하면, 전체 서버에 패치나 업데이트를 적용하기 쉽지 않다. 

- 서버의 구성이나 버전에 따라 소프트웨어나 스크립트가 동작하지 않을 수 있는 구성 편차의 문제 

-네트워크상과 다르게 구성된 눈송이서버 

- 취약한 인프라 

- 자동화의 공포(서버의 비일관성 -> 자동화 도구 실행시 불안감 -> 자동화 도구를 사용하지 않는 구성 변경) 

- 인프라의 노후화

 

1장 동적 인프라 플랫폼 

인프라 자원을 프로비저닝하고 관리하기 위한 동적 플랫폼의 다양한 유형과 플랫폼이 제공하는 기능과 서비스 모형, 요구사항에 대한 설명을 한다. 

 

동적 인프라 플랫폼은 기본적인 인프라 자원, 컴퓨트(서버), 스토리지, 네트워크를 제공하고 관리하는 시스템으로 공용 및 사설 클라우드 인프라 서비스, 가상화, 물리 장치의 자동 구성된다. 

 

요구사항 

- 프로그래밍의 용이성 

- 온디맨드(on-demand): 자원을 즉각적으로 생성하고 삭제할 수 있는 기능 

- 셀프서비스(self-service): 온디맨드의 요구사항을 좀 더 발전시킨 것으로 필요에 따라 변경 할 수 있는 것. 

 

제공하는 인프라 자원 

- 컴퓨트 자원: 서버 인스턴스로 가상 서버를 생성하고 삭제하는 방법뿐만 아니라 서버관리를 더 쉽고 강력하게 해주는 여러 서비스와 기능이 있다. 

- 스토리지 자원: 컴퓨트 자원에 스토리지 제공하는 것외에도 서비스나 애플리케이션에도 스토리지를 제공(블록 스토리지, 오브젝트 스토리지, 네트워크 파일 시스템) 

- 네트워크 자원: 내부 요소간의 연결뿐 아니라 외부 네트워크와의 연결도 관리(서버가 추가나 삭제 시 네트워크 라우팅, 부하 분산 풀, 방화벽 규칙을 업데이트 해야한다.) 

 

인프라 정의 도구 

인프라의 원칙에 따라 자원을 관리하는데 사용 할 수 있는 도구를 소개.

 

도구선정

- 스크립트로 작업 가능한 인터페이스

- 무인 방식의 명령줄 도구

- 무인 실행의 지원

- 외부화된 구성

 

서버 구성 도구 

서버 자체의 세부 내용으로, 소프트웨어 패키지, 사용자 계정, 다양한 유형의 구성이 포함.(CF엔진, 퍼핏, 세프, 앤서블)  

 

인프라 서비스 

인프라와 애플리케이션 서비스를 관리하는데 도움을 주는 도구와 서비스에 대한 설명

 

코드로서 인프라의 기본 원칙 

- 시스템은 쉽게 다시 만들 수 있다. 

- 시스템은 일회용이다. 

- 시스템은 일관성이 있다. 

- 절차는 반복 가능하다 

- 설계는 항상 변한다.

 

코드로서 인프라의 일반적인 관례 

- 정의 파일을 사용(인프라 요소의 인스턴스를 프로비저닝 하고 구성하는 도구에 건넬 입력으로 사용하기 위해 텍스트 파일로 관리) 

- 시스템 절차의 자체 문서화(실행하는 단계들은 실제 구현한 스크립트, 정의 파일에 설명된 것들이 포함되므로 사용자에게 일일히 알려주지 않아도 된다.) 

- 모든 것의 버전을 관리(VCS) 

- 지속성을 위한 시스템과 절차를 계속 시험 

- 반취약성을 갖는 IT 시스템은 시스템으르 설계하는 사람 중심으로 설계하는 것

 

2장 패턴

도구들을 사용하는 패턴과 여러 인프라 요소와 환경을 관리하는 방법에 대해서 설명한다.

효과적인 프로비저닝 절차의 특성

- 기존의 어떤 인프라의 요소든 필요에 따라 쉽게 다시 만들 수 있다.

- 새로운 요소는 한 번만 정의하면 배포하고 복제할 수 있다.

- 모든 요소의 정의와 프로비저닝 절차는 투명한 방식으로 수정할 수 있다.

 

서버를 프로비저닝하는 패턴

서버 템플릿을 패키징 -> 새 서버를 생성 -> 서버 업데이트하기 

                                                             -> 서버 교체하기 

                                                             -> 서버 삭제하기

서버에 있는 유형

- 소프트웨어: 애플리케이션, 라이브러리, 실행 가능한 파일 등 모든 시스템에 있는 동일한 정적 파일. ex)리눅스 시스템의 표준 시간대 데이터 파일

- 구성: 시스템과 애플리케이션이 동작하는 방식을 제어하는데 사용하는 파일. 

- 데이터: 시스템이나 애플리케이션이 생성하고 업데이트한 파일. ex) 데이터베이스의 데이터 파일과 로

그 파일

 

서버를 생성하는 패턴

새 서버를 만드는 가장 간단한 방법은 대화식 UI나 명령줄 도구를 사용해 지정하는 것으로

새로운 클라우드나 가상화 플랫폼을 사용하는 방법.

- 서버생성 옵션을 스크립트에 넣기

- 안티 패턴: 무중단 복제한 서버

- 패턴: 서버 템플릿 사용

- 안티 패턴: 눈송이 공장(사용자마다 요구사항을 다르게 표현하는 것도 좋지만, 업데이트하는 절차를 자동화 하기 더 어려워질 수 있다.

새 서버를 부트스트랩하는 패턴

새 서버를 시작 후 서버에 변경을 적용해야 한다.

이때 구성 도구를 실행하려면 해당 도구를 실행할 수 있도록 부트스트랩해야 한다.

- 밀어넣기 방식의 부트스트랩

- 끌어오기 방식의 부트스트랩

 

서버 템플릿을 관리하는 패턴

템플릿을 관리하는 방법을 논의하는 장으로,

템플릿 자체는 반복적이고, 투명하고 스스로 문서화하고 스스로 시험하는 절차를 통해 만들어야 한다.

 

스톡 템플릿

누군가 대신할 수 있도록 만들기.

 

템플릿을 사용해 서버 프로비저닝하기

- 생성시점에 프로비저닝하기

- 템플릿에 프로비저닝하기

 

서버 템플릿을 만드는 절차

- 원본 이미지 선택

- 이미지를 맞춤형으로 수정하기

- 이미지를 서버 템플릿 이미지로 패키징하기

 

역할별 템플릿 생성하기

- 패턴: 계층적 템플릿

- 템플릿을 만드는 기반 스크립트 공유하기

 

서버를 업데이트하고 변경하는 패턴

인프라를 잘 관리하려면 서버 변경을 관리하는 절차 수립이 필수.

서버 변경은 자동 절차를 통해서만 허용

 

3장 관례

인프라를 위한 소프트웨어 엔지니어링 관례

목적: 시스템의 품질을 높이는 것.

품질은 개발과 분리된 것이 아니라, 개발자가 시스템을 계획하고 설계하고 구현하고, 전달하는 과정에서 필수 부분이여야 한다.

 

품질을 보장하는 몇가지 원칙

- 잘 동작하는 코드 일찍 전달

- 작고 유용한 증분을 계속 전달

- 그 순간 필요한 것만을 만들기

- 단순하게

- 모든 변경을 잘 설계하여 구현

- 수정 후 빠른 피드백

 

인프라 변경 시험하기

- 애자일 시험 방법

- 시험 구조화(시험 피라미드)

- 균형잡힌 시험 체계의 구현

- 시험 코드 관리하기

 

인프라의 변경 관리 파이프라인 기본설계

빌드& 단위 시험-> 자동 서비스 인프라 시험 -> 자동 종단 간 시험 -> 수동 시험단계 -> 수동 시험단계 -> 사용자 인수 시험단계 -> 상용화 단계

 

인프라 팀의 작업 흐름의 목표

- 동작하는 모든 것은 자동화

- 로컬 샌드박스 사용하기

- 코드 구조화 패턴

 

코드로서의 인프라 준비하기 원칙

- 서비스의 설계, 구현, 개선을 지속해서 추구한다

- 팀에게 서비스를 지속해서 제공하고 개선할 권한을 부여한다.

- 서비스를 신속하고 지속적으로 제공하면서도 높은 수준의 품질을 유지하고 관련 규정을 준수한다.

코드로 인프라 관리하기 도서 리뷰

  • 출판사 : 한빛미디어
  • 저자 : 키프 모리스 (강재준 역)
  • 발행일 : 2017-03-01

현재 50인 이하 소규모의 중소기업에 다니는 저는 웹 개발자입니다. 큰규모의 회사에 다니지 않는 개발자는 여러가지 다른 일도 함께 하게 됩니다. 저도 마찬가지였죠. 웹개발을 하면서 서버를 구축하기도 하고, 서버를 구성할 때 인프라를 설계해보기도 하며 하는 일이 많습니다. 하지만, 서버가 갑자기 훅 죽어버리거나 서버가 꼬이면서 발생할 수 있는 여러가지 일들 때문에 애를 먹곤 합니다.

“이번에 코드로 인프라 관리하기” 책이 나와서 앗, 이거다… 하는 생각에 읽어보게 되었습니다.

이 책은 인프라를 구성하는데 있어 필자의 경험을 토대로 여러가지 구성 패턴을 제공합니다.
서버를 구성하는 패턴이라던지, 사용되는 도구라던지에 대한 많은 내용이 포함됩니다. 책의 페이지수가 많지는 않지만 다양하고 명료한 설명으로 인해, 인프라 아키텍쳐에 대해 무지했던 저에게는 책으로써 간접 경험을 해보기에는 충분합니다.

이 책은 기존 인프라팀에 속해있거나, 인프라 아키텍쳐를 공부하고 싶으신 분에게는 레퍼런스 도서로서 충분한 효과를 가지실 수 있을 것 같습니다.
저는 물론 이 내용을 전체적으로 다룰 일이 없을 듯 하나, 개인적으로 공부를 하면서 구동하고 있는 개인서버에 한번 적용을 해보려고 하고 있습니다.

서버관리는 정말 많은 지식을 요구합니다. 네트워크 지식, 하드웨어 지식이 전체적으로 융합되어야 할 만큼 중요합니다. “코드로 인프라 관리하기”를 통해 인프라 구성에 많은 도움이 되실 것 같습니다.

책에서 소개하는 여러가지 안티패턴을 피하기만 해도 서버를 구성하거나, 구성 스크립트를 짜는데 많은 큰 도움이 될 것입니다.
일반적인 이론만 소개하는 책보다 여러가지 케이스에 대해 대비를 할수 있도록 도움을 주는 요소가 많아서 실무에서 사용하시는 여러 개발자분들에게도 도움이 될 것입니다.

IT 개발자이면서 응용아키텍쳐(AA)로 15년 이상을 근무해오면서 최근 신기술에 많은 관심을 가지고 

많은 책들을 접하고 있으며, 최근 관심사로 빅데이터나, 클라우드와 가상화 시스템에 많은 관심을

가지고 있다. 재직중인 회사도 AWS 플랫폼을 활용한 클라우드 시스템 활용에 많은 노력을 기울이고 있다.

 

우연치 않게 "코드로 인프라 관리하기(Infrastructure as Code)" 라는 책을 리뷰 할수 있게 되어

책을 읽고 몇가지 느낀점을 적어 본다.

 

사실 개발자/아키텍쳐로 서버시스템에 환경을 구축하기 위해 많은 밤을 세워가며,여러대의 환경을 동일하게 구축하기 위해 또는 반복적인 구축작업을 수동으로 많은것들 했던 기억들이 난다. 

이 책을 리뷰하는 동안에도 반복적인 환경변경이나 작업이 필요하면 경험치를 바탕으로 수동으로

작업을 진행하고 있었다.

 

코드로 인프라 관리하기 책을 읽으면서 다소 이해하기 어려운 부분은 인프라 엔지니어가 아니면 경험 또는 이해하지 못하는 부분들이 다소 있어 초급이 보기에는 다소 어렵지 않나 생각이 든다. 

이 책은 코드 중심으로 인프라 환경을 구축, 배포, 관리하는 개념의 인프라 운영 방법을 소개한다.

 

책이 총 3부로 나뉘어져 쓰여져 있는데, 

 

1부에서는 가상화 인프라 관리문제점,자동화, 클라우드, 인프라 오케스트레이션 도구등을 설명하는 부분으로 용어적인 설명과 기초적인 부분으로 구성되어져 있다.

 

2부에서는 동적인 자동인프라를 사용하는 방법, 서버를 프로비저닝하고 서버템플릿 이미지를관리하고

서버의변경관리하는 방법등을 소개하고 있다.

 

3부에서는 1부와 2부에서 기초적으로 설명했던 부분들을 좀더 전문적으로 설명을 하고 있는데 1부/2부에 비해 다소 난이도가 높은 부분이다.  그래도 1부와 2부에 내용을 어느정도 이해를 하고 3부까지 왔다면 자주 듣던 용어와 설명들이 재설명이 되기 때문에 어렵지 않게 볼수있다. 1부에서 3부까지의 구성은 목차를 참조하면 도움이 될듯하다.

 

책의 저자 키프 모리스는 이책을 지으면서 Depth에 대한 고민을 나름 하지 않았나 생각해본다.

1부에서 3부로 넘어가는 과정이 매 스텝별로  기초부터 전문적인과정으로 전진해나가는

방식으로 글을 풀어 설명을 함으로 이해도를 높일려고 했던것 같다.

 

다소 그림과 예시등은 저자가 책 서두에서 이야기한것처럼 많지 않고 짧은 예시코드가 수록되어 있기는 하지만, 사례가 구체적으로 제시되지 않은게 조금은 안타까우며, 인프라 관리자로 오랫동안 일한경험을 바탕으로 예시를 넣으것은 좋은것 같다. 

 

원본책은 어떻게 쓰여져 있는지 보지 못했으나, 책에 나오는 용어설명이나 영문을 한글발음로 표기해두고 옆쪽에 조그만하게 영어원문을 표기하는 방식을 사용했는데, 다소 글이 작아 보기에 어려움이

있지 않나 생각이 들며, 각주에서 보여주는 참조URL등은 참조하는데 많은 도움을 줄것으로

생각이 든다.

 

책을 읽으면서 많은내용을 다 기억할수 없지만 동적인프라 플랫폼 구축방법과 관리, 프로비저닝, 서버템플릿의 구체적인 패턴과사례, 인프라관리자와 개발자들간의 협업 유사성 비교등 많은 내용들이 나중에 인프라 운영을 위해서 한번쯤 수행해볼 필요성을 느끼게 한다.

 

이 책에서 다룬 것들이 전부가 아니라고 한다. 이 책으로 모든 것을 설명하려고 했다면 턱없이 부족할 것이라고 생각된다.

 

효과적인 인프라 운영 방법에 관심은 있지만 어떤 방법으로 접근해야 하는지 잘 몰라서 망설였던 인프라 관리자라면 이 책을 통해서 코드로 인프라를 관리하는 방법에 관한 포괄적인 개요와 전체적인 개념, 클라우드,자동화등 새로운 인프라 관리방법등을 배울수 있다.

 

시스템관리자나 인프라엔지니어에게 많은 도움을 줄수 있을것 같으며, 소프트웨어 개발자라면 새로운 관리방법론에 눈을뜨게 될것이다.

 

 먼저 '코드로 인프라 관리하기'를 접했을 때 책 제목에서 예전의 서버와 네트워크 관리를 위한 단순 반복 작업에 유용하고 일상 작업을 도와주는 스크립트 등을 소개하는 부류의 책이라는 선입견을 갖게 되었다. 하지만 막상 책을 읽어보니 생각했던 것과는 다른 책이었다.

 아예 초반에 '이 책은 특정 스크립트 언어나 도구의 사용법을 알려주지 않는다.'라고 선언을 한다. 

 

 먼저 인프라가 필요하게 된 현재의 시대를 '클라우드 시대'라 부르고, 이전의 시기를 '철기 시대'라고 부를 정도로 책에서 부를 정도로 과거와 달라진 환경에 대한 이야기로 시작한다. 예전 '철기 시대'를 경험해봤는데, 그때는 장애가 일어나면 하드웨어에 직접적으로 모니터와 키보드, 마우스 등을 연결해서 직접 보면서 문제를 해결하고, 한 사람이 관리하는 장비들의 숫자도 그리 많은 편은 아니었다. 그러나 이제는 MS나 아마존 등이 제공하는 가상 서버, 클라우드를 이용하는 환경이 보편화 됨에 따라 관리자는 물리 하드웨어에서 벗어나게 되었다. 

 또한 '철기시대'의 '매우 신뢰할 수 있는 하드웨어 위에서 동작하던 신뢰할 수 없는 소프트웨어'에서  '클라우드 시대'의 '신뢰할 수 없는 하드웨어 위에서 신뢰성 있게 동작하는 소프트웨어'로 패러다임이 변하게 되었다. 이런 변화에 기존의 인프라를 관리하는 방식은 새로운 환경에 맞지 않게 된 것이다.

 

 그러면 이제부터 새로운 환경에 어떤 방식으로 인프라를 관리해야 하는 것일까?

 

 그 이전에도 많은 설명이 나오지만 13장에서 가장 명확하게 언급하는 새로운 방식은 "서버와 인프라에서 직접 작업하던 것에서 벗어나 간접적인 방식으로 작업하는 것"이다. 

 이제 인프라 담당자는 변경을 하려고 더 이상 서버에 로그인하지 않아도 된다. 아니 오히려 하면 안 된다. 도구와 정의를 변경한 후 책에서 변경 관리 파이프라인을 통해 자동적으로 변경이 서버에 적용되게 하는 것이다. 초반에는 간단한 것도 더 느리고 더 복잡한 방식으로 하는 것처럼 느껴질 수 있지만, 코드로서의 인프라에 익숙해지면 일상적이고 반복적인 작업에 드는 시간을 줄일 수 있고 줄어든 시간을 예외 상황, 문제를 처리하면서, 인프라를 개선하는 데 시간을 사용할 수 있다.

 즉 코드로서의 인프라를 채택하면 일상적인 작업을 실행하는 데는 시간이 적게 들이고, 시스템 자체를 개선하는 데 더 많은 시간을 들일 수 있다. 

 

 이 책은 스크립트, 코딩이나 코드에 대한 이야기가 아니라이렇게 인프라팀, 부서의 패러다임과 효율성을 바꿔놓을 코드로서의 인프라를 적용하기 위한 전반적인 부분을 언급하고 설명한 책이다.

 우리나라에서도 서버 관리자, 시스템 엔지니어등 서버나 인프라를 관리하는 분들은 개발자와는 다른 프로세스로 일을 하는 경우가 많았으나, 책을 보면 이제 인프라 관리자, 부서도 개발자, 개발팀과 거의 같은 지식과 프로세스를 갖춰야 하는 상황이 되었다. 관리용 스크립트를 버전관리시스템(VCS)를 쓰면서 관리했던 일은 드물었을테지만, 코드로서의 인프라에서는 핵심인 코드를 버전관리시스템(VCS)를 통해서 관리하고 해당 코드는 개발 프로세스와 동일하게 테스트, 자동 배포, 지속적 통합(CI)까지 책에서는 요구한다. 개발자를 위한 서적에서 언급되는 클린 코드, 기술적 부채, 애자일등도 언급되어 코드로서의 인프라에서 요구되는 코드의 수준이 상당한 수준이며 매우 중요한 핵심임을 알 수 있다.

 이런 과정을 거친 인프라는 기존의 견고함 수준을 넘어 충격을 받으면 더 강해지는 반취약성(Antifragility)을 갖을 수 있는 수준까지 올라오게 될 것이다.

 

 앞서 이야기 한대로 책 제목에 코드가 언급되어 상당한 양의 소스 코드가 나오게 될 것으로 예상하였으나, 코드가 나오는 예제는 테스트를 언급하며 테스트관련 코드가 다량으로 나오는 11장 전까지는 간단한 루비 코드 예제 2개에 지나지 않는다. 책 마지막에따라잡기 힘들 정도로 세상이 빨리 변하고 있있는 상황에서 모든 주제의 모든 부분을 다루는 것은 간단한 일이 아니며 특히 특정 도구로 구현한 기술적인 세부 사항까지 깊게 들어가는 것은 더욱 어려운 일이라고 언급한 부분을 보면, 오히려 플랫폼과 특정 기술에 국한된 부분은 과감히 생략하였기에 코드로서의 인프라를 전반적으로 볼 수 있었다는 생각이 들었다. 다만 이 책은 시작이고 앞으로의 방향을 안내해주는 안내서의 역활인데, 모든 것을 한 권의 책에 담겨있을거라고 기대한다면 실망할 수 있다는 생각이 든다.

 

 

photo_0.JPG

 

 

서비스가 커지면 운용하는 인프라의 규모가 커지게 된다. 여러대의 물리적인 서버를 사용하게 될 것이고, 그 위에 올리는 가상머신은 더 많을 수 있으며, 설치된 패키지, 마운트 된 스토리지, 네트워크 장비, OS, 시스템 등등을 모두 고려하면 인프라 그 자체가 상당한 리소스를 투입하여 관리해야하는 일이 된다. 이러한 인프라는 필요에 따라 증설되어야 할 수도 있고 줄어들어야 할 수도 있는데, 어떤 경우에도 예측할 수 있는 결과가 나오도록 잘 관리되어야한다. 하지만 이는 쉬운 일이 아니다. 버전은 꼬이고, 의존성은 엉켜버리며, 각각의 서버는 저마다 따로 놀게되기 일쑤다. 이는 사람의 한계이고, 관리의 문제이다.

 

이 책은 서버, 스토리지, 네트워크 등등 개발이나 서비스를 위한 모든 자원인 인프라를 어떻게 관리해야할지에 대한 어떤 철학을 얘기한다. 그 철학은 모든 인프라는 빠르게 재현가능 해야하므로, 자동화 되어 있어야 하며, 초기 비용이 많이 들더라도 코드로 관리해야한다는 것이며, 책의 전반 상당부분을 할애해 왜 인프라 관리를 자동화해야하는가를 역설한다. 인프라를 코드로 관리하지 않으면, 즉 인프라 관리를 자동화 해놓지 않으면, 어떤 문제점이 생기는지를 길게 설명한다.

 

제목은 코드로 인프라 관리하기이지만, 실제 코드는 별로 등장하지 않는다. 책에서 다루고자 하는 주제인 '인프라의 문제'는 수학적이고 논리적인 것이라기 보다는, 인간적이고 절차적인 문제이기에, 책은 따라할 수 있는 설명서라기보다는 인프라를 관리할 때 어떤 것을 고민해야 하는가에 대한 지침서에 가깝다. 이 책은 인프라를 관리하는 인프라 엔지니어를 위한 가이드이며, 인프라를 배우기 위한 책은 아니다. 따라서 인프라 관리의 문제를 직접 겪지 못한 소프트웨어 엔지니어나 시스템 엔지니어가 읽기에는 다소 와닿지 않을 수 있다.

 

코드로 인프라 관리하기.jpg

서버가 가상까지 합쳐 백 대가 좀 넘는 규모의 전산실에 있었을 때, 인프라 부문의 동료들은 VB Script로 윈도 서버들을 잘 다루었다. 회사 규모가 커지면서 물리, 가상 할 것 없이 서버들이 그침 없이 많아지자 너무 힘들어 했던 모습이 기억난다.

인스타그램이 페이스북에 인수될 때 전 직원이 12명이었다는데, 사용자가 3천만 명이나 되었던 서비스의 인프라 담당직원은 다섯 명 안짝이었을까? 다들 수퍼맨이었을 리는 없으니 인프라 자동화 수준이 꽤나 높았던 모양이다. 전산실 시절 인프라 담당 동료나 사내 클라우드팀원과 센터 팀원의 노고를 옆에서 보아온 경험을 토대로 가늠하자면, 인프라 자동화 기술 보유자는 한국에서도 억대 연봉을 쉽게 받을 수 있지 않을까 싶다.

 

한빛미디어에서 내놓은 <코드로 인프라 관리하기>는 인프라 자동화 기술의 A부터 Z까지 다룬 입문서다. 내가 아는 한 2017년 기준으로 인프라 자동화의 모든 것을 다뤘지만, 바이블보다는 입문서에 가깝다. 초보자가 이 책에 있는 내용만 가지고 인프라 자동화로 당장 뭔가 시도해 보기는 어렵다.

 

이 책의 뒤표지를 보면, 관련도서로 <클라우드 시스템을 관리하는 기술>, <오픈스택 인 액션>, <웹 엔지니어가 알아야 할 인프라의 기본>이라는 책들을 소개한다. <코드로 인프라 관리하기>를 다 읽고 나니 저 책들을 왜 소개했는지 알 만했다.

 

그렇다고 객체지향 프로그래밍에서 객체를 논하듯 추상적인 내용을 다루는 건 아니다. 인프라 운영에 있어 산전수전을 다 겪은 선배가 '이제부터 여기에서 네가 할 일이 뭔지 전부 알려주마'하며 한두 달 OJT를 해주는 느낌이랄까? 솔직한 실수담까지 곁들인 OJT를 다 받으면 비로소 업무를 시작하게 되니, 이 책은 출발점이자 이정표이자 로드맵이 되주는 셈이다. 이 책에 나온 각종 기술과 절차에 다 익숙해진다면 앞서 말했던 억대 연봉 엔지니어도 빠른 시간 내에 될 수 있을 거라 감히 강조하는 바이다.

 

<코드로 인프라 관리하기>는 세 파트로 나뉘었다.  파트 1 '기초'는 인프라 자동화의 당위성과 함께 인프라 자동화를 가능하게 한 기술과 도구를 설명한다. 파트 2 '패턴'은 인프라 자동화의 전술을 설명한다. 상대적으로 다른 파트에 비해 짧으면서도 꽤 공격적인 혹은 이상적인 목표를 다룬다. 과연 한국에서는 저 정도로 하는 곳이 있을까, 실리콘밸리는 정말 저 정도까지 하는 건가 싶었다. 파트 3 '관례'는 서비스 지속, 백업, 재해복구, 보안의 비기능적 요소 외에도 인프라 바깥의 주제를 많이 다룬다. 특히 개발 배포에 대해 비중을 많이 두어 살짝 놀랍기까지 했다. 생각해 보니 인프라를 구축하고 운영하는 이유는 사용자(1)에게 서비스를 제공하기 위해서이다. 서비스를 구현하는 개발에 인프라가 밀착 지원하는 게 데브옵스 운운하지 않더라도 마땅하고 옳은 일이다. 심지어 인프라 운영자도 고객 페르소나를 알아야 인프라를 최적화할 수 있다는 대목에서는 깨달음을 얻은 듯했다.

 

인스타그램 첫 버전을 만드는 데에 고작 8주가 걸렸다고 한다. 필터 기능 추가나 사용자 폭증 등 갖가지 사안에 인프라는 지체 없이 대응해야 했을 것이다. 2017년은 빨리 구현하고 최종사용자의 냉혹한 검증을 받아 빨리 방향을 수정해야 하는 속도 우선의 시대다. 비즈니스의 요구에 적시 대응하기 위해서는 부지런함만으로 부족하다. 가상화, 퍼블릭/프라이빗/하이브리드 클라우드, 마이크로 서비스, 도커 등을 제때에 엮어내고 무탈하게 운영할 줄 알아야 한다. <코드로 인프라 관리하기>를 계기로 이 시대가 요구하는(2) 시스템 엔지니어가 되는 길에 한 걸음 나아가 보는 것도 의미가 있겠다.

 

(1) 내외부 고객
(2) (한국이라면) 요구할?

이 책은 클라우드 환경에서 서버와 소프트웨어 배포를 어떻게 효율적으로 관리하고 자동화하할 것인지에 대한 노하우, 패턴을 다루는 책입니다. 이 책 앞 부분에는 책이 다루고 있는 주제를 좀 더 잘 이해할 수 있도록 클라우드 환경에 대한 간략한 개요 등이 나옵니다.

 

사실 이 책을 읽기 전에 "코딩으로 인프라 관리하기"라는 제목만 보고는, 개발하고 있는 애플리케이션을 자동으로 테스트하고 서버에 배포하고, 또 서버들을 동적으로 구성하고 늘리거나 줄이는 등 서버 관리를 자동화하는 방법을 다루는 책이라고 생각했습니다. 스스로 개발을 구식으로 하는 점이 콤플렉스였고 개선할 필요가 있다고 생각해 왔기 때문에 이 책을 고르게 되었고, 보고 나면 자동화된 개발 환경을 구축하는데 도움이 될 것이라고 생각했습니다.


막상 이 책 첫 장을 읽기 시작하면서부터는, 제가 생각한 것보다 훨씬 더 앞서 나간 내용을 다루고 있다는 것을 깨달았습니다. 다시 말해서 이 책은 현재 클라우드 환경을 경험하고 있는 관리자 겸 개발자들을 위해 적합한 책입니다. 이 책을 읽고 유용하다고 느낄 수 있는 사람들은 AWS 같은 공용 클라우드를 접해 본 사람들일 것 같습니다. 이 책에서의 '인프라'라는 말은 클라우드 환경에서 서버들을 멀티로 띄우고 있는 상태를 말하는 것이고, 그 인프라를 스크립트 코드로 추가/삭제/수정하여 동적으로 관리할 때 '내가 이렇게 해보니 좋더라 혹은 나쁘더라'를 얘기하는 책입니다.

 

개인적으로는 아직은 시기상조가 아닐까 싶은 생각도 들었지만, 한편으로는 클라우드는 미래의 이야기라고 굳게 믿고 있었던 저에게는 크나큰 충격으로 다가오기도 합니다. 십 년도 훨씬 전부터 많은 사람들이 가상화된 환경을 구축해서 이용하고 있고, 노하우가 쌓여서 이런 패턴이 좋다 나쁘다를 논할 정도로 성숙했다는 이야기일 테니까요.


그럼에도 불구하고 이 책이 유용한 점은, 클라우드에 대해 문외한인 사람에게 클라우드 환경의 이모저모를 알려주고 대충 감을 잡을 수 있게 해 주기 때문입니다. 가령 이 책의 4장에서는 가상 머신과 컨테이너의 차이를 상세하게 설명해주면서 멀게만 느껴졌던 용어의 뜻이 무엇인지 이해할 수 있게 도와 줍니다. 이 책의 처음 부분에는 과거처럼 수동으로 서버 환경 설정을 수정하고 서버를 늘릴 때마다 서버 환경 설정을 복사-붙여넣기하다보면 눈송이 같이 복잡해지고 일관성이 없어진다는 단점을 이야기하고 있습니다. 이러한 단점들을 극복하기 위해서는 서버들을 동적으로 추가/삭제, 업데이트하는 '동적 인프라'가 필요하다는 내용으로 이어집니다. 그리고 이미 앤서블, 셰프, 퍼핏 같이 코드로 서버를 구성하는 도구들이 많이 나와 있다는 것도 이 책을 통해서 알게 되었습니다.

 

2부, 3부에는 이렇게 해 보니 좋더라 나쁘더라 하는 패턴들이 나오는데, 이 부분은 솔직히 뜬구름 잡는 듯하게 느껴졌습니다. 클라우드 환경에서 실제로 소프트웨어를 운영하고 있지 않은 사람들은 그다지 공감할 수 없는 내용일 것 같습니다. 


이 책은 현 시점에 저에게 100% 필요한 책은 아니었지만, 이 책의 개념을 지금처럼 수동적인 관리에도 일부는 적용할 수 있을 것 같습니다. 하지만 특정 클라우드 제품에 종속적이지 않은 점은 좋은 것 같고, 멀지 않은 미래에 이 내용들을 적용할 수 있으리라는 기대를 해 봅니다.


코드로 인프라 관리하기

 

 - 효율적인 인프라 관리를 위한 자동화 방법

 

 

 IT를 잘 모르더라도 뉴스를 비롯한 생활 전반에서 흘러나오는 

 

용어나 이야기를 통해서, 요즘 인기있는 것이 무엇인지는 대략

 

알 수 있습니다. 가장 최근에 또는 지금까지도 쉽게 들을 수 

 

있는 용어가 몇 개 있습니다. 바로 클라우드 혹은 가상화라는 

 

단어입니다. 클라우드나 가상화라는 단어는 

 

전문적인 기술자가 아니어도 쉽게 들을 수 있었던 

 

용어 중의 하나가 아닌가 생각됩니다. 

 

 

이 책은 가상화와 클라우드라는 용어를 기술적으로 실제로 

 

다루고 있거나, 알아보고 싶은 기술자들을 위한 참고 서적입니다.

 

밀접하게 관련된 용어라면, 아마도 데브옵스, 오픈스택, 자동화

 

등이 아닐까 생각됩니다. 

 

 

어떤 책을 읽을때 제목만 봐도 그 의미가 명확한 것이 있지만,

 

제목만으로는 그 의미가 명확하지 않은 경우가 있습니다. 

 

이 책의 제목을 읽고, 그 자체만으로도 의미를 알 수 있는 사람

 

이었다면, 아마도 현업에서 실제로 이 업무를 진행하는 경우가

 

아니었을까 생각합니다. 인프라 쪽이 아닌 다른 개발 경험이

 

있는 분들 중에도 제목만으로는 이 내용을 바로 이해하기는 어려울 

 

수 있을텐데요. 

 

이 책의 내용을 좀 거칠고 단순하게 정리해 보자면, 

 

'소프트웨어 개발할 때, 소스코드를 관리하는 것 처럼

 

인프라를 관리해 보자, 그리고 그 방법이 무엇인지 

 

구체적인 예를 알려주겠다' 

 

정도입니다. 

 

실제 책에도 다음과 같이 나와있습니다.

 

'이 책의 목표는 클라우드 시대를 맞아 코드로서의 인프라 

 

접근법을 IT 인프라 관리에 활용하는 방법을 설명하는 것이다.' (29쪽)

 

 

실제 인프라라고 하면 여러가지가 있을 수 있겠지만, 

 

좀 많이 단순화해서 그냥 '서버'라고 생각해도 처음에 시작하기에는

 

무리가 없을것 같습니다. 

 

 

 

 

책은 다음과 같이 총 3부 15장으로 구성되어 있습니다.

 

1부 기초 (1장 ~ 5장), 

2부 패턴 (6장 ~ 9장), 

3부 관례 (10장 ~ 15장)

 

하지만 단순히 수치적인 분량으로만 치면, 

 

1부 + 2부 가 절반 나머지 절반이 3부 입니다. 

 

다시 말해 소프트웨어 개발할 때 사용했던 다양한 관례들이 

 

실제 인프라 관리에서 어떻게 적용될 수 있는지에 대한 예시들이

 

책의 절반을 차지하고 있습니다. 

 

 

개인적으로는 "코드로 인프라 관리하기"에 대한 초보자로서 

 

1, 2부의 내용들이 꽤 마음에 들었습니다. 

 

3부의 경우, 실제 기존 기술의 이해를 통해 다른 분야에 대한 

 

적용을 목적으로 하는 내용이다 보니, 

 

소프트웨어 개발의 경험정도와 인프라와 관련된 경험 정도에 따라서

 

이해가 어려운 부분도 있었습니다. 

 

초보자라면 1, 2부, 시간이 없다면, 1부 정도만 읽어봐도 

 

기본적인 철학과 개념은 알아볼 수 있을 거 같습니다. 

 

 

 

개인적으로 아쉬웠던 점은, 다음과 같습니다. 

 

우선, 파편화된 소스코드 예제입니다. 

 

중간 중간에 실제로 적용했다는 혹은 살짝 변형했다는 

 

코드 예제들이 나오는데요. 좀 더 구체적이고 

 

자세하게 나왔다면, 좋았을거 같았습니다. 

 

도서의 분량이나 설명의 내용에 비해서는 코드가 

 

너무 자세한 것도 좋지 않지만, 좀 더 자세한 내용을 

 

봤으면 좋았겠다는 생각을 했습니다. 

 

둘째로는 이 책의 시리즈와 같은 식으로 실제로 

 

"코드로 인프라 관리하기"를 실습할 수 있는 책이 나왔으면

 

합니다. 이 책은 개념적인 것과 기본적인 이야기를 설명하고

 

있다는 장점이 있지만, 실제로 구체적인 실습을 혼자서

 

해보기에는 어려움이 있었습니다. 인프라관련 엔지니어가 

 

아닌 입장에서 약간은 막연한 개념적인 흐름이 잡히기는 했지만

 

실제적인 실습을 할 수 있었더라면 좀 더 좋았을 것 같습니다. 

 

얼마전에 읽었던 <오픈스택 인 액션>이 생각났습니다. 

 

실습위주의 '인 액션' 시리즈와 같은 내용도 함께 나와 주면

 

더 확실히 "코드로 인프라 관리하기"를 이해할 수 있을 거 같습니다.

 

 

 

초보자의 관점에서 이 책은 "코드로 인프라 관리하기"에 대한 

 

기본적인 개념과 필요성을 이해하고, 해야할 일이 무엇인지에 대한 

 

대략적인 관점들을 가질 수 있었습니다. 

 

또한 인프라 관리에 대한 소프트웨어적인 접근 방식은 기존에 

 

소프트웨어를 개발해 오던 개발자드에게도 인프라 관리라는 

 

새로운 분야에 대한 시야를 넓히는데 도움이 될 거 같습니다. 

 

 

이 책을 선정한 이유


요즘 한창 서버를 공부하고 있다. 마침 이번에 나가는 IOT 대회에서 내가 맡은 분야가 서버쪽이다. 나는 솔직히 코드로 인프라를 관리한다는 그 개념 자체를 처음 들어보았다. 이 책을 다 읽었지만 아직까지 정확하게 감은 잡히지 않는다. 그렇다 이 책의 대상 독자는 IT 인프라 운영 현장에서 일하는 사람들이나 서버를 관리하는 사람들을 위한것이다. 아직 학생인 내가 읽어서 공감을 할 수 있는 부분은 크게 없다고 생각이 든다. 그러나 이 책을 읽기 전이랑 읽고 난 후랑 변화는 크다고 나는 생각이 든다. 그래서 잘 모르는 분야인 '코드로 인프라 관리하기'책을 선택해서 읽게 되었다.

 

 

 

이 책의 장점


  • 코드로서의 인프라를 왜 배워야 하는지 왜 중요한지 아주 잘 설명을 해주고 있다.
  • 보통 일반 다른 책들에서는 특정 도구를 선정해서 설명을 하곤 하는데 '코드로 인프라 관리하기'책은 특정 도구만 정해서 설명을 하는것이 아니라 개념적인 설명을 친절하게 해준 후 다양한 도구들을 소개를 해주는 장점이 있다.
  • 인프라를 관리하기 위한 다양한 팁들을 제공을 해주고 있다.

 

이 책의 아쉬운 점


해당 책은 이미 전문가들을 위한 참고할만한 서적으로 나온 책이다. 그러나 나와 비롯한 학생들 및 해당 기술을 배우고 싶은 사람들을 위해 쉬운 내용들과 책은 두꺼우지겠지만 많은 예제들을 통해서 책을 출판하면 어떨까 하는 개인적인 생각이 든다.

 

 

 

결론


 

이 책은 학생들이 한번 읽고 이해하기는 어려운 책이다. 그러나 해당 책은 다양항 팀들과 특징들을 아주 잘 설명이 되어있는 책이므로 이미 현업에 종사하거나 이쪽으로 잘 알고 계신 분들에게는 해당 책이 아주 도움이 될거라고 생각이 된다. 한번 읽고 이해가 잘 안되니 한번 더 읽어봐야겠다.

AWS와 같은 클라우드가 대중화되면서 서버라는 자원에 누구나 쉽게 접근할 수 있게 되었다. 이제 막 웹 개발을 시작한 사람이라도 AWS의 (그렇게 친절하진 않은) GUI를 통해 서버를 생성하고 나만의 웹페이지를 가질 수 있다. 나 또한 그렇게 웹 개발을 시작했고, 클라우드 환경에서 여러 프로젝트를 수행하면서 이런 생각을 했다.

이제 서버나 네트워크와 같은 인프라를 신경쓰지 않고 어플리케이션 개발에만 집중할 수 있는 시대가 되었구나.

이런 착각은 데이터 엔지니어라는 직함으로 취업하자마자 혹독한 시련과 마주하며 산산조각이 나고 말았다. 내가 맡은 일 중 하나는 20여대의 AWS 인스턴스로 이루어진 데이터 클러스터의 오픈소스 버전 업그레이드, 장비 교체, 에러 대응이었고 또 하나는 API서버 개발, 배포 및 운영이었다.

내가 주로 저지른 실수들은 다음과 같았다.

  1. 1. 서버 교체 시 AWS 인스턴스에 Block Storage를 Mount 하는것을 깜빡하여 용량 부족으로 인스턴스가 죽음
  2. 2. 방화벽 포트 관리 실수로 인스턴스간 네트워크 오류 발생
  3. 3. 약 10여대의 인스턴스로 이루어진 분산 스토리지 시스템을 SSH로 일일이 접속하여 배포하는 과정에서 주요 스텝을 빠뜨려 여러번 다시 배포
  4. 4. API 서버를 Dev, Staging, Production 등의 환경으로 나누어 셋팅 후 각 환경별로 다른 설정을 적용하여 환경마다 서버가 다르게 동작

이런 실수들은 한 번 발생하면 팀의 개발 생산성이 크게 저하되고 개인적인 사기도 떨어져서 많은 악영향을 끼쳤다. 끔찍한 경험들을 하고 나서야 소위 DevOps라는 철학이 이제 모든 개발자들이 기본적으로 갖춰야 할 덕목이라는 생각이 들었다.

마음은 먹었지만서도 막상 무엇부터 해야 할지는 정말 막막하다. 대충 떠올려봐도 해야 할 것들이 정말 많다. 서버 생성, 패키지 설치, 네트워크 설정, 배포 자동화, 무중단 배포, 오토 스케일링 등등… 가장 첫 단계인 서버 생성부터 자동화하고자 클라우드 서비스의 SDK나 Rest API 를 살펴보지만 수많은 파라미터들과 이해하기 힘든 옵션들로 인해 자신감을 잃고 일단 기존 방식대로 하면서 조금씩 배워나가보자라고 미뤄두고 다신 꺼내보지 않게 된다.

바로 이 때 이 책이 큰 도움이 되었다.

우선 첫 챕터부터 피를 토하는 심정으로 인프라 관리 자동화의 필요성을 역설하여 이 작업의 중요성에 대한 확신을 갖게 된다. 친숙하게 이용했던 AWS, Azure의 GUI를 점점 멀리하고 SDK, API를 이용한 서버 생성 및 관리를 당연시 여김으로써 인프라 관리의 첫 관문을 넘을 수 있게 해준다.

두번째로는 인프라 관리 자동화의 여러 측면을 조명해줌으로써 내가 처한 환경에서 선택 가능한 옵션을 고민할 수 있게 도와준다. 이 책에서 동적 인프라 관리를 위해 강조하는 것 중 하나가 서버 이용자가 직접 서버를 생성, 운영 및 제거 할 수 있는 셀프서비스인데 나의 현 직장에서는 인프라 담당자가 따로 있어서 불가능한 부분이었다. 하지만 컨테이너 가상화 기술을 이용하면 기존의 할당받은 서버에서도 셀프 서비스형 인프라 관리를 할 수 있다는 점을 확인하고 시도해볼 수 있었다.

세번째로 특정 도구에 종속되지 않고 개념적인 접근을 취하면서 다양한 도구들을 소개해준다. 이 부분은 바로 실전에 적용할 예를 찾는 사람에게는 단점이 될 수도 있다. 하지만 현재 상황이 급하지 않고 차근차근 인프라 관리의 개념을 익혀가는 나에겐 더 유익한 부분이었다. 추후 실제 업무에 적용할 때는 여기 소개된 다양한 도구들의 장단점을 직접 살펴보고 신중하게 결정할 수 있게 되었다.

개인적 취향의 문제지만 용어들이 지나치게 번역되었다는 점은 가독성을 다소 떨어뜨리지 않았나 하는 생각은 든다. 부하 분산기(로드 밸런서), 감시(모니터링) 등 개발자들이 일상적으로 받아들이는 단어들이 생소한 한글로 번역되어서 읽는 속도가 떨어진다는 생각은 들었다. (물론 읽다보면 적응된다.)

책을 읽고 나면 그제서야 시작이다. 이제 왜 인프라 자동화가 필요하고 완성도 높은 자동화를 위해서 뭘 해야 하는지도 감이 온다. 위에서 겪은 어처구니없는 실수를 줄이기 위해서는 실제로 사용할 도구들을 선정하고 학습하여 현업에 도입해야 한다. 첫번째로 나는 도커를 선택했다. 이제 도커 설치하러 갑니다.

[1]
"코드로 인프라 관리하기"는 대규모 인프라를 효율적으로 관리하는 방법을 알려주는 책이다. 표지에 끌려 무작정 집어 들기는 했지만, 대규모 인프라를 관리하기는커녕 접해본 경험조차 많지 않은 내가 소화하기에는 쉽지 않은 내용이었다. 그래도 혹시 비슷한 수준의 독자들에게 도움이 되지 않을까 싶어서 글을 남겨본다.

 

[2]
IT 분야에서는 전통적으로 개발자와 인프라 담당자가 서로 다른 업무를 진행해왔다. 그런데 최근에는 가상화 기술과 클라우드가 보편적으로 사용되면서, 두 가지 일을 결합해서 수행하는 데브옵스(DevOps)가 유행하고 있다. 이제는 개발자가 직접 서버를 관리하는 모습이 낯설지 않다. 문제는 규모다. 서비스가 성공적으로 출시되면, 초기에 수 대에서 수십 대에 불과했던 서버는 금방 수백~수천 대로 늘어나게 마련이다. 담당자가 일일이 서버를 생성/운영/폐기하는 예전 작업 방식으로는 대규모 인프라를 관리하는 것이 거의 불가능에 가깝기에, 자동화된 인프라 관리 작업이 필수적으로 필요하게 된다. 그리고 자동화를 위해 필수적인 요소가 바로 코드(자동화 스크립트)이다. 이 책은 바로 그 부분에 초점을 맞추고 있다. 책 내용은 총 3부 15장으로 구성되어 있는데 1부는 기초적인 내용으로 시작한다. 코드로서의 인프라가 왜 필요한지와 동적 인프라 플랫폼 관련 도구를 고를 때의 원칙을 살펴본다. 이어지는 2부는 패턴에 대한 내용이다. 서버 프로비저닝, 서버 템플릿 관리, 서버 업데이트 및 변경, 인프라 정의까지 크게 네 가지 패턴으로 영역을 나눠서 살펴본다. 3부에서는 코드로 인프라를 구성/변경하고 관리하는 방법을 다룬다. 그리고 인프라팀과 시스템 관리자, 프로젝트 리더, 아키텍트들이 효율적으로 협업하는 방법을 제시한다.
 
[3]
개인적인 경험에 미뤄보면 IT 번역서는 크게 세 가지 수준으로 나뉜다. 사명감으로 많은 시간을 투자하는 번역, 의뢰를 받았으니 돈 받은 만큼만 적당히 진행하는 번역, 그리고 학생/아르바이트생에게 맡기거나 번역기를 돌리고 대충 다듬기만 하는 최악의 번역. 이 책은 첫 번째 사명감 그룹에 속한다. 인프라와 소프트웨어 엔지니어링 전반을 넘나드는 방대한 내용이기에 정말 다양한 IT 용어들이 수록되었음에도, 한글 번역에 어색함을 느낄 수 없을 만큼 일관된 기준이 적용되었다. 원문에 충실한 직역이므로 한글 문장이 아주 부드럽게 읽히지는 않는다. 그래도 원서와 대조해서 이해해야 할 만큼 난해한 문장은 드물다. 옮긴 이가 원래 완벽주의적인 성격인지 아니면 편집부의 덕일지 모르겠지만, 책 내용 중 오/탈자도 전혀 발견하지 못하였다. 번역자 강재준님은 국내 통신사에서 10년 이상 네트워크/인프라를 담당해온 전문가이므로 풍부한 실무의 경험도 번역 과정에서 충분히 반영되었을 것으로 추측된다.
 
[4]
이 책의 원서는 부(Part)와 장(Chapter)에만 번호를 부여하고, 그 이하의 세부 구분은 번호가 없이 큰 글씨로 제목만 표기되어 있다. 그래서 특정 내용을 빠르게 찾기가 어려웠는데, 번역서는 일반적인 번호체계(Part -> 1 -> 1.1 -> 1.1.1)를 도입하여, 세부 절에도 번호를 부여했다. 읽기가 더 편해졌고 내용을 찾아보거나 요약정리를 하기에도 유용했다.
 
[5]
이 책은 '코드로 인프라 자동화하기'라는 하나의 주제에 집중해서 개념을 정리하는 이론서이다. 짧은 예시 코드가 부분 부분 수록되어 있기는 하지만, 전체 인프라 구성 사례가 구체적으로 제시되지는 않았다. 그래서 인프라 담당 실무자가 아니라면 실제로 이해할 수 있는 깊이가 얕을 수밖에 없다. 만약 실제로 자동화된 인프라를 관리해보는 후속 도서가 기획/출간된다면 본서에서 제시하는 깊이 있는 이론에 더하여 실습을 병행할 수 있으므로 금상첨화일 것으로 생각된다.

최근 몇년간 IT업계의 화두이자 관심사 중 하나로 '클라우드'와 '가상화'를 꼽는 사람은 나 뿐만은 아닐 것이다. 아마존이나 구글의 사업 영역을 예로 들자면, 아마존은 이미 자사의 웹서비스의 유휴 자원을 AWS라는 플랫폼으로 만들어 판매한지 오래이고, 구글도 자사의 플랫폼을 가상화 서버로 관리하여, 다양한 사내 요구(연구, 개발, 서비스 등)를 충족하는 한편 직접 클라우드 판매를 하는 데에도 나서고 있다. 

 

이러한 경향은 국내의 유력한 B2C 업계나 B2B 업계를 가리지 않고 나타나고 있어서, 업계의 인프라 엔지니어들은 대중화된 서비스를 이용하거나(AWS, Azure 등) 자사에 직접 구축(openstack, VMWare vCenter 등)하기도 한다.

또한, 5-6여년 전부터 입에 오르내리는 'DevOps' 라는 용어와 최근에 회자되는 'fullstack 개발자' 는 운영자와 개발자간 경계를 넘어 서로의 고유한 업무를 흐리게 하는 데까지 이르고 있다.

이번에 읽게된 '코드로 인프라 관리하기(Infrastructure as Code)'는 위에서 언급한 '클라우드'와 '가상화' 시대에 인프라 엔지니어로써 'DevOps'가 되는데 필요한 인프라 관리 '자동화'를 깊게 다루는 전문서적이다.

 

사실 이 책을 리뷰하는 나는 하드웨어에 탑재되는 펌웨어를 개발하는 '개발자'로 '인프라 엔지니어'의 세계에 초보라 책의 내용이 아주 깊게 이해되지는 않았다. 즉 'DevOps'를 지향하기 보다는 'fullstack' 개발자를 지향하는 측인데, 어쨋든 이 책이 개별 플랫폼이나 코드를 소개하기 보다는 인프라 자동화를 위한 '원칙', '패턴', '관례', '지침' 등에 중점을 두고 있기 때문에 나 같은 초보자가 시작하기에도 무난하다. 다만, 인프라를 자동화하는 전문적인 방법을 다루는 책의 후반부는 전반부에 비해 난이도가 급격히 올라가는 듯한 느낌이 든다.

 

책은 총 3부로 나뉘어져 1부에서는 가상화 확산 등 현재 인프라 관리의 문제점을 설명하고, '동적 인프라 플랫폼', '인프라 정의 도구', '서버 구성 도구'를 각각 나누어 설명하고 이를 사용하는 '활용예'를 설명하고 있다. 일종의 '개론' 또는 '총론'인 셈.

2부에서는 실제 '코드로써의 인프라'를 활용하는 패턴을 설명하고 있는데, '안티패턴'을 함께 소개해서 셜명해서 좋은 예와 나쁜 예를 비교하며 볼 수 있게 되어 유용하다. 

마지막 3부에서는 품질(10장)과 자동 test(11장), CI(12장) 등 개발의 여러 단계를 차용하여 코드로써의 인프라를 설명한다. 13-14장은 코드로써의 인프라를 대하는 엔지니어의 자세를 안내하고 15장에서는 조직 측면에서 코드로써의 인프라를 설명한다.

 

핵심 주제로 '자동화'를 기반에 두고 있는데, '코드로써의 인프라'가 인프라 관리/운영을 '코드'같이 작성하고 실행하며, 업데이트 하는 방식을 의미하니 각 부분에 '자동화'하지 않은 툴이나 외부 접근이 어려운 플랫폼은 피하라고 조언하기도 한다. 'GUI'보다 'CLI'를 선호하는 것도 같은 이유이다.

 

이 책은 인프라 관리자로 오랜동안 일한 필자가 쓰고, 역시 오랜동안 현업에서 근무한 역자가 번역했다. 용어의 선택에 약간의 어색함 - 예를 들면, 곳곳에 '팀은', '팀이' 등의 표현이 있는데, 그냥 '팀'이 아니라 역할이 드러나도록 개발팀, 인프라팀 등으로 표현하거나 '조직'으로 바꿔 썼으면 어떨까 하는 생각이 들었다. 

또한, 각주와 역주를 섞거나 참조URL을 본문에서 현지화(연결이 가능한 경우 en -> ko로 변경)하는 등 일관성이 떨어져 원문과 비교시 어렵지 않을까 했는데, 역자의 경력과 번역품질을 볼 때 굳이 원서를 사서 비교해 볼 필요까진 없지 않겠나 생각한다.

 

'클라우드'와 '가상화' 뿐 아니라 '인공지능' 등 기존의 방식으로는 효율이 떨어지거나 어려운 업무가 늘고 있다. 책 '코드로 인프라 관리하기'는 기존의 방식을 탈피하여 일을 하는 새로운 방식을 제시하는 좋은 책이라고 본다.

많은 트래픽과 데이터 처리를 위해 scale-out은 필수로 고려되는 사항입니다. 또한, 클라우드 환경이 점점

증가하면서 하루에도 수백만대 이상의 서버 인스턴스가 생기고 사라지는 과정을 반복하고 있습니다.

한번 셋팅하면 반영구적으로 사용하는 인프라는 이미 먼 과거의 이야기입니다.


이렇게 급하게 변해가는 환경에서 무작정 따라가려고만 하면 결국 위 기술들의 장점을 제대로 활용할 수 없을지도 모릅니다.

<코드로 인프라 관리하기>를 읽으면서 좋았던 점은 저자와 그 주변의 실제 업무경험이 중간중간 이해하기 쉽게 들어가있다는 점입니다.

또한, 단순히 사용법만 나열한 것이 아니라 어떤 경우에 해당 패턴이 나오게 되었는지, 어떤 문제가 있기 때문에 현재와 같은 방식으로

자리를 잡게 되었는지 설명이 잘 되어있습니다.

 

초반에는 '코드로서의 인프라가 왜 필요한지' 부터 시작해서 '어떤 도구들이 있는지'에 대한 내용으로 구성되어 있어서

인프라에 대해 잘 모르는 초보자도 쉽게 내용을 따라올 수 있게 구성되어 있습니다.

책의 중반에는 저자의 경험을 기반으로 코드로서의 인프라를 관리하기 위한 각종 패턴들을 설명하고 있으며 후반에서는

관례와 운영하는 방법에 대해서 설명하고 있습니다.

 

devOps를 추구하는 개발자라면 코드로서의 인프라 관리에 대한 철학도 다잡을 수 있어서 꼭 한번 읽어보면 좋은 책이라고 생각합니다.

 

블로그 리뷰의 링크를 여기에 적습니다 ^^

https://mechanickim.github.io/book/2017/04/03/book-08-review.html

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

배송료 안내

  • 20,000원 이상 구매시 도서 배송 무료
  • 브론즈, 실버, 골드회원 무료배송
닫기

리뷰쓰기

닫기
* 상품명 :
코드로 인프라 관리하기
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

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

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

오탈자 등록

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

도서 인증

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

* 온라인 또는 오프라인 서점에서 구입한 도서를 인증하면 마일리지 500점을 드립니다.

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

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

닫기

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

자료실

최근 본 상품1