DevOps란?
- DevOps는 개발자와 운영자가 상호 협력해가면서 비즈니스의 가치를 실현하는 개념을 가리킵니다.
- '10+ Deploys Per Day: Dev and Ops Cooperation at Flickr(1일 10회 이상의 배포: Flickr에 의한 개발과 운용의 협력 관계)'라는 제목의 ppt에서 비즈니스 가치를 계속해서 전달하기 위해 개발자(Dev)와 운영자(Ops)가 집중해야 하는 것에 대해 조직의 문화와 도구 관점에서 다음과 같이 제시하고 있습니다.
조직의 문화
- 상호 존중(Respect)
- 상호 신뢰(Trust)
- 실패에 대한 건전한 태도(Healthy attitude about failure)
- 상대를 비난하지 않기(Avoiding Blame)
도구
- 자동화된 인프라(Automated Infrastructure)
- 버전 관리 시스템의 공유(Shared vesion control)
- 원스텝 빌드와 배포(One step build and deploy)
- 피처 플래그(Feature flags) - SW 내에 새로운 기능을 넣었지만 이를 활성화할지는 설정 파일의 값에 따라 정해지는 방식을 말합니다.
- 지표 데이터의 공유(Shared mertics) - 서버의 부하나 접속 수와 같은 다양한 수치 데이터를 말합니다.
- IRC와 인스턴트 메신저 봇(IRC and IM robots) - 자동으로 IRC나 인스턴스 메신저에 글을 올리는 장치를 말합니다. Slack(슬랙)과 같은 채팅 도구도 포함됩니다.
- 비즈니스의 목적을 달성하기 위해서는 조직과 도구 양면에서 개선해나가야 합니다. 이러한 활동 전반을 DevOps라고 합니다.
조직에서 DevOps
- Dev 측에서는 요구 분석, 개발, 테스트까지를 시행하고, Ops 측에서는 품질 검사와 배포를 합니다.
- Dev 측은 동시에 여러 기능을 개발할 수 있어 각각의 공정을 며칠 만에 끝마칠 수 있는 반면에, Ops 측의 품질 검사와 배포는 동시에 복수로 처리될 수 없고, 게다가 시간도 상당히 소요됩니다.
- 비즈니스의 병목이 되는 것은 Ops 측의 품질 검사와 배포 프로세스라는 것을 알 수 있습니다. 따라서 먼저 개선되어야 할 항목은 프로세스입니다.
DevOps 적용
- 먼저 비즈니스와 IT의 관계에서 과제를 도출합니다.
- 과제에 대해 해결 우선순위를 설정합니다.
- 각각의 과제에 대해 향후 모습, 해결했는지를 확인하기 위한 지표 데이터(metric), 달성 목표 시기, 그리고 과제 해결을 진척시키키 위한 체제를 정합니다.
- 현재 상황이 어덯게 될지를 지표 데이터를 보면서 확인합니다.
- 해결한 과제와 미해결 과제를 명확히 합니다. 새로운 과제가 나온 경우에는 이 또한 관리합니다.
- 필요에 다라 과제의 우선순위를 수정합니다.
- 이것은 말하자면 DevOps의 적용 및 추진을 애자일 방식으로 진행하는 것입니다.
DevOps에서의 도구 도입
도구 도입의 흐름은 다음과 같이 이루어집니다.
- 우선 전체 모습이나 목표를 명확히 합니다.
- 현재 어떤 상태인지, 목표보다 무엇이 부족한지를 분석합니다.
- 도구 도입 계획을 생각해보고 그에 따라 단계적으로 도입합니다.
- 도구 도입 후에 애초 생각했던 전체 모습이나 목표에 가까워졌는지, 과제가 없는지를 확인해서 대응합니다.
DevOps를 실현했을 때의 작업들
- 커뮤니케이션 도구를 사용해서 관련자 간 커뮤니케이션을 원활히 합니다.
- 개발팀이나 운영팀은 버전 관리 시스템에 시스템 소스코드나 설정 정보를 저장합니다.
- 다양한 요건이나 과제, 작업이나 오류를 프로젝트 관리 도구로 관리합니다.
- 소프트웨어 테스트를 자동화합니다.
- 지속적 통합(Continuous Integraion, CI) 도구를 사용해서 빌드와 테스트를 상시 실시합니다.
- 배포 도구를 사용해서 다양한 환경에 소프트웨어를 배치합니다.
- 개발이나 검증에는 가상화 도구를 사용해서 모두 같은 환경을 이용합니다.
- 프로비저닝 도구나 구성 관리 도구를 사용해서 환경 구축을 자동화합니다.
- 모니터링 도구를 사용해서 운영 환경을 모니터링하고 그 결과를 받아서 문제를 발견하거나 프로세스를 개선합니다.
- 다양한 지표 데이터를 집약한 대시보드를 통해 모두가 정보를 볼 수 있게 합니다.
도구 도입 순서
- 모든 시작점은 버전 관리
- 프로젝트 관리 도구(github, redmine)
- 테스트 자동화(JUnit, PHPUnit, Selenium)
- 지속적 통합 도구 도입(Jenkins, CircleCI)
- 가상 환경 구축 도구 도입(Vagrant)
- 프로비저닝 도구 도입(Chef, Ansible)
- 모니터링 도구 도입(Sensu, Zabbix, Nagios)
도구 도입의 올바른 접근 방법
- 도입 이유를 명확히 한다.
- 도구는 사실상 표준인 것을 선택한다.
- 한 번에 많은 도구를 도입하지 말고 교육과 정착을 확인한다.
- 유지보수는 스스로 한다.