DevOps
DevOps는 소프트웨어 개발 팀과 IT 팀 간의 프로세스를 자동화하고 통합하는 일련의 관행, 도구 및 문화적 철학이다. 팀 지원, 팀 간 커뮤니케이션 및 공동 작업, 기술 자동화가 가장 중요한 요소라 볼 수 있다.
이는 일반적으로 회사 개발팀의 개발자들이 어떠한 프로젝트를 수행하고 개발을 완료하면 프로젝트가 끝나는 것이 아니라 운영팀을 통해 빌드, 테스트, 배포까지 완료되어야 하는 구조에서 나오게 된 개발 방법론이다. 하나의 작업을 완료하기 위해 두 팀간의 협업이 필요한 기존 구조는 서로의 입장을 잘 이해하고 배려해주는 이상적인 상황만 존재한다면 좋겠지만 현실에선 그러기 쉽지 않다. 개발자들은 계속해서 새로운 기술들을 도입하고 싶어하지만, 운영팀은 해당 프로젝트의 안정성에 가장 초점을 둔다. 그래서 등장한것이 DevOps이다. 즉, 개발팀과 운영팀 사이 원활한 의사소통을 돕기 위한 개발 방법론이다.
DevOps 수명 주기
DevOps 수명 주기는 개발(루프의 왼쪽) 및 운영(루프의 오른쪽)에 필요한 프로세스, 기능 및 도구를 나타내는 6단계로 구성됩니다. 각 단계에서 팀은 공동 작업하고 커뮤니케이션하여 조정, 속도 및 품질을 유지 관리된다.
- 계획(Plan)
- 애자일 방식을 기반으로 소프트웨어 개발에 대한 반복적인 접근 방식으로, 팀은 작업을 더 작은 부분으로 나누어 점진적인 가치를 제공 - 빌드(Build)
- Git등을 이용한 버전 관리 - 지속적 통합 및 배포(Continuous Intergration and Deployment)
- CI/CD를 통해 팀은 소스 코드 리포지토리에서 프로덕션에 이르기까지 자동화된 워크플로를 사용하여 높은 품질의 제품을 자주, 예측 가능한 방식으로 출시
- 코드 변경을 자주 병합하고, 기능 플래그를 배포하고, 엔드투엔드 테스트를 포함할 수 있음 - 모니터링(Monitoring)
- 제품 가동 시간, 속도 및 기능에 영향을 미치는 문제를 빠르게 식별하고 해결
- 서비스를 중단 없이 유지하기 위해 변경, 위험이 높은 작업 또는 장애를 팀에 자동으로 알림 - 운영(Operate)
- 고객에 대한 IT 서비스의 엔드투엔드 제공을 관리
- 이 단계에서 조직의 서비스를 지원하는 모든 IT 인프라의 설계, 구현, 구성, 배포 및 유지 관리에 관련된 관행이 포함 - 지속적인 피드백(Continuous Feedback)
- 각 릴리스를 평가하고 보고서를 생성하여 향후 릴리스를 개선
- 지속적인 피드백을 수집하여 팀은 프로세스를 개선하고 고객 피드백을 통합하여 다음 릴리스를 개선
위와 같은 생명 주기를 반복적으로 수행하며 DevOps 개발 방법론을 실행할 수 있다. 이를 통한 대표적인 이점으로는 속도 개선, 협업 효율 개선, 빠른 배포와 품질 및 신뢰성 향상 그리고 보안 등을 기대할 수 있다.
DevOps 특징
Continuous Intergration
지속적 통합은 코드 변경을 소프트웨어 프로젝트에 통합하는 작업을 자동화하는 관행이다. 개발자는 코드 변경 사항을 빌드 및 테스트를 실행하는 중앙 집중식 리포지토리에 자주 병합할 수 있고, 이를 통해 DevOps 팀은 버그를 더 빠르게 해결하고 소프트웨어 품질을 개선하며 새로운 소프트웨어 업데이트를 검증하고 릴리스하는 데 소요되는 시간을 줄일 수 있다.
Continuous Delivery
지속적 배포는 코드 변경 사항을 테스트/프로덕션 환경에 자동으로 배포하여 지속적 통합을 확대한다. 자동화된 빌드, 테스트 및 배포를 하나의 릴리스 워크플로우로 오케스트레이션(Orchestration)하는 지속적 배포 파이프라인을 따른다. 오케스트레이션이란 컴퓨터 시스템과 소프트웨어의 자동화된 구성, 조율, 관리이다.
Automation
가장 핵심이 되는 것 중 하나인 자동화이다. 자동화는 팀이 높은 품질 소프트웨어를 개발하고 배포하는 프로세스를 훨씬 빠르게 진행하도록 지원할 수 있기 때문이다. 자동화를 통해 코드 변경 사항을 소스 코드 리포지토리에 푸시하는 간단한 작업으로 빌드, 테스트 및 배포 프로세스를 트리거하여 이 단계에 소요되는 시간을 대폭 줄일 수 있다.
Infrastructure as Code
IaC(Infrastructure as Code)는 단순히 인프라 구성을 스크립팅하는 것뿐만 아니라 소스 제어, 코드 검토, 테스트 등을 사용하여 인프라 정의를 실제 코드처럼 다루는 것을 의미한다.
Micro Service
마이크로서비스는 애플리케이션을 서로 독립적으로 배포 및 운영할 수 있는 소규모의 서비스 모음으로 구축하는 아키텍처 기법이다.
Momitoring
DevOps 팀은 계획, 개발, 통합 및 테스트, 배포, 운영부터 전체 개발 수명 주기를 모니터링합니다. 이를 통해 개발 초기 단계에서 잘못된 프로덕션 변경 사항을 최소화할 수 있다.
참고 자료