DevOps.. Vagrant.. Ansible..?
몇 년전부터 개발 트렌드(?)라고 줄기차게 들어왔지만,
명확하게 뭐라고 딱히 정의를 하기 어려운 용어 DevOps! 그래서 그게 뭔지를 알아보기로 했다.
- 위키백과 정의 :개발(Developments)와 Operations(운용)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다
말은 어렵지만 쉽게 말해서,
다양한 기업들에게서 나온 좋은 도구들(Docker, Ansible 등)을 사용하여,
기존에 가지고있던 전문화된 서버구축 및 번거로운 코드 배포 등을 추상화 및 자동화하여
쉽고 빠르게 배포하자는 것이다.
1. DevOps 문화(또는 도구)는 애자일 방법론과 궁합이 좋다!
짧은 기간동안 다양한 기능 추가 및 개선 필요한 최근의 웹서비스 동향에서는
완성품을 결정하고 개발하는 워터폴(Waterfall) 방법보다는 지속적으로 '설계->개발->테스트'가 이루어지는
애자일 방법론이 중요시된다.
DevOps 도구들은 이러한 애자일 방법론을 Vagrant, Ansible, Docker 등을 통하여, 든든하게 지원사격한다.
2. 전문화된 서버구축, 어떤 단계가 있을까?
이쯤되면, 그래서 전문화된 서버구축에는 어떤 요소들이 있는데? 라는 의문이 들게된다.
전문화된 서버구축 = 인프라 구성 및 관리 = 프로비저닝!
프로비저닝은 아래와 같이 세 가지 부분으로 나뉘어 진다.
(1) 오케스트레이션, (2) 컨피규레이션, (3) 부트 스트래핑..
어렵게 들어가면 너무 복잡하니 간단히 설명하면 이렇다.
- 부트 스트래핑 : 가상 머신 및 OS 설치하는 부분을 말한다. (ex. Docker)
- 컨피규레이션 : 부트 스트래핑 이후 서버내의 설정 및 미들웨어 설정에 대한 적용사항을 정의하는 것을 말한다.
- 오케스트레이션 : 다중서버 배포를 위한 설정부분들을 정의하는 것을 말한다.
(즉, 목적에 맞게 서버들을 분류하여 개별 설정등을 통제)
3. 프로비저닝을 개발자가 어떻게 하지?
서버를 증설하거나 재구축할때마다, 개발자가 VM을 생성하고 목적(DB, Web, API서버)에 따라
yum 명령어등을 통하여 각각의 미들웨어 설치하고 하는 등의 작업들을 수작업으로 하기에는
(1) 너무 번거로울 뿐만 아니라, (2) 이력을 관리하기도 어렵다.
따라서,
이러한 인프라 구성을 코드화하여 버튼 또는 CLI 명령어만으로 쉽고빠르게 서버를 (재)구축하고,
어느 개발자가 봐도 단 번에 이해할 수 있게 만드는 것이 바로 '인프라의 코드화' 즉 'Infrastructure as Code' 가
DevOps에서는 매우 중요하다.
4. 마치며..
사실, 위의 내용만으로 DevOps를 설명하기에는 새 발의 피(?) 그 이하인 것 같다.
PDCA(계획->실행->확인->개선), 버전 관리, 모니터링, 개발자간의 문화 등의 많은 개념들이 복합적으로 들어가야 DevOps를 설명할 수 있는데, 나는 개발자이기때문에 뭐 이정도만 알면 되지 않을까? 그런생각이다.
아니면 말고 뭐..