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

한빛미디어

독자리뷰

인프라 개발자를 위한 지침서

jrcfore***

|

2022-10-02

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

클라우드 인프라에 초점을 맞춰 인프라 리소스를 구성하기 위한 스택 구축 및 관리 방법을 다루는 도서로, 실무자뿐만 아니라 코드형 인프라(IaC)를 처음 접하는 사람에게도 실용적인 지침을 제공합니다.

  • 저자 : 키프 모리스
  • 번역 : 이동규
  • 출간 : 2022-08-29

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

 

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

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

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

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

 

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

 

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

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

 


3 장 : 인프라 플랫폼

 

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

 


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

 

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

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

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

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

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

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

 


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

 

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

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

그 이유는 하기와 같다.

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

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


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

 


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

 

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

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

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

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

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

 

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

닫기

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