형상 관리 도구로 자동 프로비저닝된 서버에 지속적으로 테스트 및 배포되는 불변적인 컨테이너로 패키징된 마이크로서비스를 사용해 좀 더 효율적으로 설계하는 데 도움이 되는 여러 기술을 다룬다. 최신 사례와 도구를 사용해 전체 마이크로서비스 개발 및 배포 라이프사이클에서 도커, 버네티스, 앤시블, 우분투, 도커 스웜 및 도커 컴포즈, 컨설, etcd, 레지스트레이터, confd 등의 활용법을 설명한다.
요구사항과 설계부터 시작해, 개발과 테스트를 거쳐 배포 및 배포 후 단계까지 소프트웨어 개발 라이프사이클에 대해 자세히 알고자 하는 모든 사람을 대상으로 한다. 이론적인 내용도 다루고 있지만 실습이 꼭 필요하다. 대기업에서 개발한 모범 사례를 고려해 프로세스를 만들 것이다.
전병선 (옮긴이)의 말
애자일의 등장과 함께 지속적인 통합은 중요한 이슈가 됐다. 지속적인 통합이란 개발 환경 안에서 코드를 통합하고 구축하며 테스트하는 것을 말한다. 그 후, 지속적인 통합은 지속적인 배포, 지속적인 인도 개념으로 확장되며, 생산에 배포할 수 있는 패키지나 아티팩트가 생성된다. 이 개념들이 적용된 자동화로 인해 새로운 기능에 대한 아이디어를 개념화하는 것에서부터 생산에 배포될 때까지의 시간이 대폭 단축된다. 여기까지는 아직 운영 관점에서 시스템을 바라본다.
개발 관점에서도 시스템을 구축하는 방법에 많은 변화가 있었다. 특히 최근의 핵심 키워드는 확실히 마이크로서비스다. 넷플릭스에서 이 아키텍처가 성공한 이후 전 세계로 급속히 확산됐다. 이전 SOA 아키텍처의 서비스보다 훨씬 작기 때문에 더 빠르고 테스트와 패키징, 배포하는 시간도 적게 걸린다.
마이크로서비스는 도커 컨테이너에 탑재돼 수송된다. 컨테이너는 설계된 기능을 제공하는 분리되고 불변적인 이미지로 API를 통해서만 접근할 수 있다. 그리고 마이크로서비스가 어떤 환경에서든 안정적으로 실행될 수 있게 한다. 더욱이 컨테이너는 환경 사이에 일관적인 신뢰성을 제공하고, 노력을 들이지 않고도 확장할 수 있으며, 실패 시에 만회할 수 있게 한다. 더 나아가 코드로 인프라를 구성할 수 있는 코드로서의 인프라(infrastructure as code)를 가능하게 하며, 결국 데브옵스가 추구하는 개발과 운영이 결합될 수 있는 기반이 된다.
따라서 지속적인 인도와 배포, 마이크로서비스, 도커 컨테이너 이 세 가지가 결합돼 개발자와 운영자가 각기 다른 목표로 인해 갈등하던 시대에서 개발자도 운영을 이해하고, 운영자도 개발을 이해하며, 같은 목표 하에 협력하는 데브옵스의 시대를 이끌어가게 되는 것이다.
이 책은 이러한 관점에서 형상 관리 도구로 자동 프로비저닝된 서버에 지속적으로 테스트 및 배포된 마이크로서비스를 불변적인 컨테이너로 패키징해 소프트웨어를 좀 더 효율적으로 설계하는 데 도움이 되는 다양한 기술을 설명한다. 전체 마이크로서비스 개발과 배포 라이프사이클에서 도커(Docker), 쿠버네티스(Kubernetes), 앤서블(Ansible), 우분투(Ubuntu), 도커 스웜(Docker Swarm), 도커 컴포즈(Docker Compose), 컨설(Consul), etcd, 레지스트레이터(Registrator), confd, 젠킨스(Jenkins) 등의 도구를 사용하는 방법을 체계적이고 실제적으로 설명한다. 아무쪼록 이 책을 통해 데브옵스를 실천적으로 수행하는 기반을 갖춰 실무에서 활용할 수 있기를 희망한다.