|
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
소프트웨어 개발을 하다 보면, 제품이나 개발 프로세스에서 빠지지 않는 부분이 바로 인프라에 대한 내용입니다. 특히 빠르게 변하는 소프트웨어의 특성으로 인해 지속적인 통합(Continuous Integration)과 지속적인 배포(Continuous Deploy)가 강조되는 만큼 이를 구현하기 위해서는 인프라의 도움이 절실한 상황입니다. 하지만 소프트웨어에 요구되는 빠른 변화는 인프라에게도 동일하게 적용됩니다. 빠르게 변하는 인프라에 대한 요구사항을 주먹구구식으로 대응 할 수 없습니다. 이에 따라 인프라 자체도 코드 활용할 수 있다면 자체적인 버전관리를 통해 안정적으로 쌓아 올릴 수 있고, 적절한 모듈화를 통해 확장성과 재사용성마저 증가시킬 수 있습니다. <코드로 인프라 관리하기>는 어떻게 하면 인프라를 코드로 관리할 수 있는가에 대해 설명합니다. 이 책에서는 코드로 인프라를 관리해야 하는 이유가 바로 클라우드 시대로의 변화에 있다고 합니다. 과거의 인프라는 엄격한 변경 관리 프로세스를 통해 가능한 안정적인 상태를 벗어나지 않으려고 했습니다. 하지만 클라우드 시대로 변하게 되면서 인프라는 클라우드 속에 가상화되어 원하면 언제든 몇개의 명령어로 손쉽게 불러올 수 있게 되었습니다. 더 이상 엄격한 관리로는 통제되지 않는 상태가 되었습니다. 빠르게 변할 수 있는 동적 인프라를 관리하기 위해 코드형 인프라를 적용하면 다음과 같은 이점이 있습니다.
코드형 인프라는 소프트웨어와 동일한 성격을 갖고 있습니다. 따라서 소프트웨어를 개발하는 것 처럼 코드형 인프라는 모든 것을 코드로 정의해야 합니다. 또한 CI/CD에서 이야기 하는 것과 같이 지속적인 테스트와 전달 과정이 필요합니다. 마지막으로 시스템을 가능한 작고 간단하게 빌드해야 합니다. 이 책에서 특히 인상깊었던 부분은 코드형 인프라 반대론자들에 대한 반격(?) 입니다. 개발 프로세스에 대한 제언들은 "자동화가 필요할 정도로 변경이 잦지 않다", "그런 것은 우리에겐 시기상조다", "그것을 적용하기엔 우리는 너무 바쁘다" 와 같은 핑계로 도입을 미루고 있습니다. 신기하게도 이러한 것들은 코드형 인프라를 적용하지 않으려는 반대론자들도 동일한 맥락으로 도입을 미루고 있습니다. 저자는 이런 반대론자들의 주장을 자동화를 사용할 수 있는 방법과 사용해야 하는 방법에 대한 오해에서 비롯된다고 말합니다. 먼저 "자동화가 필요할 정도로 변경이 잦지 않다"에 대해서는 결국 대부분의 시스템은 폐기되기 직전까지 지속적인 변경이 필요합니다. "변경이 잦지 않다"라고 말한 것은 몇 번의 시스템 변경이 있었지만, 이는 일시적이고 임시적인 내용이라 불편을 감수하면서 며칠 밤낮을 고생해 수정했어도 감수해야 한다는 이야기입니다. 앞서 이야기 한 것 처럼 인프라가 지속적으로 클라우드로 넘어가고 있는 시점에서 안정적인 시스템을 구축하기 위해서는 지속적인 변경에서 비롯됩니다. 따라서 변경이 별로 없다는 시스템의 인프라 역시 코드형 인프라 구축은 필요합니다. 다음으로 코드형 인프라 구축은 시간이 오래 걸리기 때문에 시스템을 구축한 다음 자동화를 도입해야 한다는 주장에 대해서 이 책은 다음과 같이 말합니다. 시스템의 구축 단계에서부터 자동화를 도입하지 않으면, 이미 구축된 시스템에 대해 자동화를 적용하는 것이 훨씬 어렵습니다. 또한 자동화 자체는 거추장 스러운 것이 아니라 오히려 더 빠른 개발을 도와주는 편리한 도구에 가깝습니다. 자동화를 통해 지속적인 테스트와 배포를 통해 훨씬 안정적인 프로세스를 만들 수도 있습니다. 마지막으로 빠르게 개발해야 하는 시스템의 경우 자동화 도입은 품질은 높일 수 있지만, 개발 속도가 늦춰진다는 오해에 대해서 이 책은 이렇게 말합니다. 속도와 품질은 서로 트레이드 오프 관계에 있는 것이 아닙니다. 빠르게 개발하기 위해서는 높은 품질을 유지할 수 있어야 하고, 반대로 높은 품질을 유지하기 위해선 빠른 변경이 필요 합니다. 속도를 높이기 위해 품질을 포기하게 된다면, 포기한 품질에서 비롯된 기술 부채가 점차 누적되어 결국 개발 속도가 느려지게 되는 문제를 겪게 될 것입니다. 반대로 품질을 위해 속도를 포기하게 된다면 마감일에 대한 압박으로 인해 결국 어느 순간에는 속도가 필요하게 되어 품질을 포기하려 하게 됩니다. 지속적이고 안정적인 개발을 위해서는 적절한 인프라를 활용해야 합니다. 웹, 앱, 딥러닝, 자율주행 등 수 많은 도메인의 시스템들 역시 다양한 형태의 인프라를 정의하고 있습니다. <코드로 인프라 관리하기>는 특정 도메인에만 적용되는 특수 도구가 아닌 범용적으로 수 많은 도메인에서 필요로 하는 안정적인 인프라 관리 방법에 대한 책 입니다. 빠르게 변화하는 클라우드 시대에 기반이 되는 안정적인 인프라 도입을 위해 개발자라면 한번 쯤 읽어 볼만한 책이라 생각됩니다.
|
|
1. 코드형 인프라(IaC: Infrastructure as Code)란?본격적으로 도서 리뷰를 시작하기 전, 코드형 인프라(Infrastructure as Code, IaC)에 대해 간단히 알아보자. 코드형 인프라, 즉 IaC는 매뉴얼 작업이 아니라, 코드로 인프라를 관리하고 구축하는 것을 뜻한다. IaC로 인프라를 관리 및 구축하게 되면, 휴먼 에러 없이 동일한 환경을 프로비저닝 하게 도와주고, 구성 내용을 문서화(코드로 남김)하여 구성 내용을 관리하는 데에 도움을 준다. IaC로 인프라 구축을 자동화하면, 애플리케이션을 개발하거나 배포할 때마다 개발자 혹은 엔지니어가 서버, 운영 체제, 스토리지, 기타 인프라 구성 요소들을 수동으로 구축하거나 관리할 필요가 없어진다. 90년대에도 시스템 엔지니어들이 스크립트로 인프라 관리를 자동화하거나 하는 등 코드를 통해 인프라 관리를 자동화 한다는 행위는 이미 존재했지만, IaC에 대한 개념은 00년대 말 셰프(Chef)의 공동 창업자인 아담 제이콥(Adam Jacob), 퍼펫(Puppet)의 설립자 루크 케이니스(Luke Kanies)가 해당 용어를 사용하기 시작하고 나서 비로소 점점 널리 사용되기 시작되었다. 또한, IaC에 대한 접근 방식에는 선언적 방식과 명령형 방식 두 가지가 있다. 선언적 접근 방식은 말 그대로 필요한 리소스와 속성 등 바람직한(Desired) 시스템의 상태를 정의하게 되면, IaC 도구가 해당 상태로 구성해주는 방식으로. 선언적 접근방식으로 인프라 구축을 자동화하는 툴에는 하시코프(Hashicorp)의 Terraform, AWS의 Cloudformation, Redhat에서 개발한 오픈소스 툴인 앤서블(Ansible)이 있다. 원하는 상태를 key-value값으로 정의(JSON, YAML등의 파일을 떠올려보면 된다)하는 등으로 인프라 구성을 정의하면 해당 도구들이 정의한 상태에 맞도록 구성을 진행하게 된다. 명령적 접근 방식은 바람직한(Desired) 시스템 상태를 얻기 위한 특정 절차를 명령으로 정의하여, 이 정의된 명령을 올바른 순서로 실행해야 한다. 명령적 접근방식을 활용하여 인프라 구축을 자동화하는 툴에는 AWS CDK가 있다. AWS CDK의 경우에는, Java, Python과 같은 개발자에게 친숙한 코드언어로 인프라를 구성할 수 있다는 장점이 있다. 2. **'**코드로 인프라 관리하기(2판)’ 리뷰‘코드로 인프라 관리하기’ 라는 책은 제목만 봤을 때는 위에서 언급한 특정 IaC 도구들을 어떻게 사용할지에 대해서 알려주는 책이라고 생각할 수 있는데, 이 책은 특정 도구를 어떤식으로 사용하면 좋을지에 대해 알려주는 가이드 매뉴얼, 혹은 튜토리얼 같은 책은 아니다. 하지만 읽어본 감상으로는 그렇다고 반대로 코드형 인프라가 무엇인지에 대해 설명하는 개념서적인 책도 아니라고 말할 수 있다. 물론 이 책의 초반에서는 코드형 인프라란 무엇인지, 왜 사용하는지 클라우드 네이티브(Cloud Native)한 환경에서 인프라를 운영하는 것이란 무엇인지에 대해서 설명하는데에 상당한 부분을 할애하고 있지만 가장 중요한 부분은 특정 기술이나 도구에 얽매이지 않고 코드로 인프라를 관리할 때 어떤 부분에 주의해서 구성해야할지에 대한 방법론에 대해 설명하는 부분. 사실 책 소개만 읽었을 때에는 특정 도구 없이 이런 부분을 어떻게 설명할까 싶었는데, 이 책에서는 ShopSpinner라는 가상의 기업이 FCS(Fictional Cloud Service)라는 가상의 퍼블릭 클라우드를 사용하면서, FSI(Fictional Server Image), 그리고 FKS(Fictional Kubernetes Service)를 사용하여 인프라를 운영하고 있다고 가정한다. 그리고 ShopSpinner라는 기업은 Terraform, CloudFormation, Flumi(코드형 인프라 관리 도구로 일반적 프로그래밍 언어로 인프라를 구축할 수 있다)와 비슷한 Stackmaker라는 도구를 사용하고, Ansible, Chef, Puppet과 비슷한 Servermaker라는 도구로 서버를 설정하고있다고 가정한다. 따라서 특정 도구에 대한 선수 지식 필요 없이(하지만 코드형 인프라 관리 툴에 대한 개념을 이해하고 있어야 하기에 한 가지 이상의 툴을 써본 경험이 있으면 좋다) 코드형 인프라를 어떻게 관리해야할지에 대해 설명하고 있다. 따라서 특정 툴에 대한 지식을 쌓고 싶어하는 사람보다는 이미 코드형 인프라 관리 툴을 사용해본 데브옵스 엔지니어, 인프라 엔지니어 혹은 사이트 신뢰성 엔지니어(Site Reliability Engineer) 중에서 어떻게 하면 코드형 인프라 툴을 효과적으로 사용할 수있을지에 대해 배우고 싶은 경우 추천하고 싶은 책이었다. |
|
몇년 전부터 클라우드의 효율성과 편리성이 대두되며 여러 기업에서 클라우드 도입에 관심을 갖고 사기업, 공공기관 할 것 없이 도입을 앞다투어 하고 있다. 나도 인프라 공부를 막 시작하며 모든게 신기해보일때 SharedIT를 통해 오라클, 마이크로소프트 사의 클라우드 세미나에 참석하여 클라우드의 구성 방식과 기업에 적용되는 방식을 보며 우리 회사에도 도입되면 정말 편하고 좋을텐데... 라고 생각했었다. 비록 현실의 벽에 부딪혀 회사에 클라우드를 적용하지는 못했지만, 그 방법 등을 더 심도있게 공부해보고 싶은 마음은 항상 가지고 있었다.
먼저 이 책의 저자 카프 모리스는 ThoughtWorks의 클라우드 엔지니어링 글로벌 이사이며 소프트웨어 개발자, 시스템 관리자, 기술 부담당, R&D관리자, 호스팅 관리자, 기술 리드, 기술 설계자 등 다양한 경력을 가지고 있다. 번역을 담당한 이동규님은 SK텔레콤에서 여러 도메인 전문가와 함께 기존의 온프레미스 영역을 넘어 클라우드와 MEC로 확장되는 IT영역에 효과적으로 대응하기 위한 인프라 솔루션 개발 및 자동화 구축을 담당하고 있다고 한다. 옮긴이의 말 중 보통 국내에서 엔지니어가 자동화 도입을 시도할 경우 보안, 규정, 규제 등의 벽에 부딪히게 되는데 아직까지 국내의 정책상 현실적인 문제기에 적용이 쉽지 않다는 말에 공감이 갔다.
2판에서 달라진 점은 과거 2016년 초판에서는 인프라 자동화가 서버 구성에 초점이 맞춰져 있었다면 현재는 클라우드 플랫폼의 인프라 리소스 집합을 관리하는데 초점이 맞춰져 CloudFormation과 Terraform 같은 도구의 역할인 스택 구축을 많이 다룬다고 한다. 비록 제목을 가진 책이지만 초판과 2판의 내용은 상당히 다를 것으로 보인다.
책의 앞부분에 코드형 인프라의 역사와 대상 독자도 친절하게 안내하고 있다. 대상 독자는 소프트웨어 배포와 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람으로 팀에서 엔지니어링, 테스트, 설계, 관리자 역할을 맡은 경우라고 한다. 독자는 시스템, 인프라 또는 소프트웨어 배포와 실행 관련 배경지식이 필요하며, 인프라 자동화를 위해 코드를 사용하는 클라우드나 가상 인프라에 대한 경험이 있다고 가정한다.
이 책의 장점을 꼽자면 중간중간 도표나 그림으로 독자의 이해를 돕고 있으며, 코드로 인프라 관리하기라는 책의 제목에 걸맞게 중간 중간 코드를 통해 어떻게 인프라를 관리하는지에 대해 자세하고 친절하게 설명되어 있다는 점이다.
이 책을 읽고 난 후 총평은 관련 분야 엔지니어나 관리자들에게 확실히 많은 도움이 될만한 책이라는 것이다. 클라우드 인프라에 대해 기초부터 매우 심화적인 내용까지 자세하게 다루고 있으며 21개의 챕터로 구성되어 27가지 관리/구축 패턴이 수록되어 체계적으로 알려주기 때문에 관련 분야에 종사중인 엔지니어들의 필독서가 되지 않을까 싶다. 초보자들이 읽기 위해선 앞서 옮긴이가 말했듯이 시스템, 인프라 또는 소프트웨어 배포와 실행 관련 배경지식이 필요하며, 인프라 자동화를 위해 코드를 사용하는 클라우드나 가상 인프라에 대한 경험이 어느정도 필요할 것 같다. 아무튼 클라우드 엔지니어들에겐 정말 많은 도움이 될만한 책이라는 것은 변하지 않을 것 같다. |
|
2017년 코드로 인프라 관리하기 1판이 나온 후 5년 만에 2판이 새로 출간되었다. 1판에서 서버 구성 자동화 위주였다면 2판은 클라우드 인프라 구축 및 리소스 관리 방법 위주로 내용 구성이 되었다. 2판에서 저자가 특히 강조한 코드형 인프라(laC)의 3가지 핵심 실행 방법을 제시하였는데 첫째, 모든 것을 코드로 정의해야 한다 인프라를 코드로 정의하면 어떤 문제나 장애 발생 시 문제를 추적하거나 수정, 현재 상황 파악, 또는 이전 시점으로 롤백 등 인프라 관리가 한결 수월해지게 된다. 둘째, 코드를 지속해서 테스트하고 딜리버리하는 것이다. 코드를 수정하고 다시 작성하는 과정에서의 지속적인 테스트는 코드의 품질을 더욱 향상시킨다. 셋쨰, 시스템을 작고 간단하게 빌드한다 시스템이 성장하고 발전할수록 더 많은 사람이 사용하고 더 많은 사람이 개발하며 더 많은 기능이 추가되는데 장기적으로는 품질을 향상시키면서 빠른 변경 속도를 유지할 수 있도록 시스템을 모듈화해야 한다. 코드형 인프라를 처음 접하는 분들 또는 인프라 관련 업무를 하는 분들에게 이 책은 기본 개념을 잡는데 많은 도움이 될 것이다. |
|
Python 및 Ansible를 통해 자동화 세계에 입문을 하여 수백 대 스위치 그리고 보안장비들을 독학으로 관리를 해보았었지만 업무가 조금 변경이 되고 회사의 방향이 클라우드로 나아가고 있는 지금 기존의 툴 그리고 앞으로 필요할 툴을 생각하게 되었습니다. |
|
이제 클라우드가 기본인 세상이 되었다해도 과언이 아닌 시대가 되었다. 아무래도 서버 인프라를 코드로 관리하는 것에 대한 책이다 보니 개발자에서도 인프라를 다루는 데브옵스 팀에게 유용할 것으로 보인다. 책의 처음에도 나오지만 1판과의 차이는 1판이 나올 당시의 인프라 자동화는 서버 구성에 초점이 맞춰져 있었던데에 반해 책에서는 원칙, 실행방법, 패턴, 안티패턴 이라는 용어를 중점적으로 사용하는데 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
|
IaC(Infrastructure as Code) 코드로 인프라 관리하기는 예전 부터 들어왔던 용어이다. 하지만 클라우드와 연관된 업무를 하기 전 까지는 크게 관심이 없었던 것도 사실이다. 클라우드 시대가 와서 관련 업무를 하면서 VM을 받아서 내가 원하는 환경을 구성하는 것을 몇번이고 반복하고 있다. 기존에는 쉘 스크립트를 만들어서 실행하는 것으로 만족하고 있었지만 좀더 IaC에 대한 필요성이 크게 느끼고 있다. Terraform이나 Ansible에 대한 문법을 알려주는 것은 아니지만 클라우드 시대에 어떤 방식으로 인프라를 관리하면 되는 것인지에 대한 고민을 잘 보여 주고 있다. 몇 백대에 서버를 관리하는 것은 아니지만 몇개의 클러스터를 만들고 없애고 하는 과정에서 점점 코드로 인프라를 관리하는 것에 대한 필요성을 크게 느끼고 있는 중이다. 그런 면에서 이 책은 나의 고민을 많이 충족시켜주는 책이라고 하겠다. 어떻게 하면 인프라를 코드로 잘 관리해 주는 것인지, 코드로 관리할 때 어떤 점을 중점적으로 봐야하는 것인지 등에 대한 저자의 고민이 많이 담겨져 있다. 이 책을 통해서 나의 업무 환경도 코드로 인프라를 관리하는 방향으로 가봐야겠다. 클라우드를 관리하는 분들 중에서 IaC에 관심이 있는 분들이라면 이책을 한번 보시는 것의 추천 드린다.
"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다." |
|
코드형 인프라스트럭처(Infrastructure as code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝하는 것을 말합니다. 여기서 프로비저닝이란? 사용자의 요구에 맞게 시스템 자원을 할당, 배치, 배포해 두었다가 필요시 시스템을 즉시 사용할 수 있는 상태로 미리 준비해 두는 것을 말합니다. IaC를 사용하면 인프라 사양을 담은 구성 파일이 생성되므로 구성을 편집하고 배포하기가 더 쉬어 집니다. 또한 IaC는 매번 동일한 환경을 프로비저닝 하도록 보장합니다. 코드형 인프라 도구는 시스템 품질 향상을 위해 변경을 자주, 빠르게, 안정적으로 실행할 수 있게 합니다. 클라우드 환경에 진화에 따라 코드형 인프라 IaC 관리 방법 또한 많이 변화 하였습니다. 이 책의 1판에서는 서버 구성 자동화에 초점을 맞췄다면, 2판에서는 클라우드 인프라에 초점을 맞춰 인프라 리소스를 구성하기 위한 스택 구축및 관리 방법을 소개합니다.
코드형 인프라에 맞춰진 많은 패턴과 안티패턴에 대해서 설명하고 코드형 인프라를 위한 3가지 핵심 실행 방법과 클라우드 인프라의 5가지 원칙에 대해서 설명합니다. 코드형 인프라를 구현하기 위한 세가지 핵심 방법은 다음과 같습니다.
더 자세한 내용은 책을 통해서 알아보도록 합니다! 이 책은 코드형 인프라를 처음 접하는 사람에게 좋은 시작점이 될 것 입니다. 클라우드 플랫폼 작동 방식에 익숙하고 하나 이상의 인프라 코딩 도구에 대한 기본 지식만 있으면 책 내용의 대부분을 활용할 수 있습니다. 인프라 코딩 도구를 사용해본 경험이 있는 사람이라면 이미 알고 있는 내용과 혼합된 새로운 콘셉트와 접근법을 발견하고 적용할 수 있을 것입니다. 이 책을 통하여 효율적인 방법으로 인프라 자동화에 대한 여러가지 해결책을 제시 받을 수 있을 것입니다. 서버 프로비저닝과 업데이트를 코드로 완전 자동화 하는 방법에 대해 고민하고 있는 분들에게 추천합니다.! |
키프 모리스 지음 이동규 옮김 "한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."
2022년 9월 2022 나는 리뷰어다 활동의 여덟 번째 리뷰
9월에 리뷰할 책은 "코드로 인프라 관리하기"이다.
우선 옮긴이가 꼭 전달하고 싶은 책의 일부를 보자
"애자일 소프트웨어 개발과 코드형 인프라의 핵심은 변경에 대한 태도를 뒤집는 것이다. 변경을 두려워하거나 변경을 최소화하기보다는 자주 변경함으로써 오류를 예방할 수 있다. 변경을 더 잘하는 유일한 방법은 자주 변경하여 시스템과 프로세스를 지속적으로 개선하는 것이다."
저자는 '속도를 빠르게 하여 품질을 향상시키고 품질을 향상시켜 속도를 빠르게 한다'를 강조한다. 가장 높은 수준의 데브옵스란 인프라 코드가 애플리케이션 코드와 결합하여 빠르고 안전하게 변경을 실행하고 언제든지 전체 시스템을 복구할 수 있는 상태라고 생각한다.
저자와 옮긴이의 기조를 생각하며 책을 읽어나가야 한다.
코드형 인프라라는 용어는 무엇인가? 오래전부터 시스템 관리자는 시스템을 관리하기 위해 스크립트를 사용했고, 코드형 인프라는 데브옵스 움직임과 함께 성장했다. 2009년 애자일 인프라라는 강연에서 코드형 인프라 용어가 사용되었고 이 책에까지 이르고 있다.
그럼 이 책의 세 가지 핵심 실행 방법을 보자.
1. 모든 것을 코드로 정의한다 2. 코드를 지속적으로 테스트하고 딜리버리 한다 3. 시스템을 작고 간단하게 빌드한다.
이 세 가지 실행 방법은 서로를 보강하며, 코드는 변경 관리의 여러 단계에서 추적, 버저닝, 배포를 용이하게 한다. 이를 통해 팀은 더 쉽게 더 작은 부분을 지속적으로 테스트할 수 있는 것이다.
이 책의 대상 독자는 소프트웨어 배포와 실행에 필요한 인프라를 프로비저닝하고 관리하는 사람으로 팀에서 엔지니어링, 테스트, 설계, 관리자 역할을 맡은 경우다. 시스템, 인프라 또는 소프트웨어 배포와 실행 관련 배경지식이 필요하며, 인프라 자동화를 위해 코드를 사용하는 클라우드나 가상 인프라에 대한 경험이 있다고 가정한다.
결국 이 책은 숙련된 실무자와 팀이 효율적인 방법으로 공통 언어를 만들고 인프라 자동화에 도전하는 과정에서 찾은 해결 방법을 명확하게 설명한다. 이 책을 통해 많은 엔지니어들은 시스템과 프로세스 구현의 밑거름을 얻어갈 수 있을 것이다.
Love Yourself. |
|
인프라를 생성하고 제어할 수 있는 방법들은 이미 과거와는 비교할 수 없을 정도로 발전했다. |