
소프트웨어의 개발(Development)과 운영(Operations)의 합성어다.
소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.
데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
단순한 프로세스들은 데브옵스 접근법을 사용하여 보다 프로그래밍 가능하게 되고 유동적으로 되고 있다. 데브옵스는 운영 프로세스의 예측 가능성, 효율성, 보안, 유지보수 가능성을 극대화하는 것이 목적이다.
데브옵스의 개념은 애자일 소프트웨어 개발과 지속적인 통합과도 관련 있다.
Agile Software Development
계획과 문서 기반이 아닌 실질적인 코딩을 기반으로 일정한 주기에 따라 지속적으로 프로토타입을 형성하고, 필요한 요구사항을 파악하며 이에 따라 즉시 수정사항을 적용하여 결과적으로 하나의 큰 소프트웨어를 개발하는 적응형 개발 방법
Continuous Integration (지속적 통합)
통합 작업을 초기부터 계속 수행해서 지속적으로 소프트웨어의 품질 제어를 적용하는 프로세스
소프트웨어의 질적 향상과 배포 시간을 줄인다.
신속한 배포: 새로운 기능과 개선 사항을 더 빠르게 배포할 수 있어 더 나은 비즈니스 성과를 창출한다.
협업 강화: 개발과 운영 팀 간 협력으로 내부 커뮤니케이션을 개선하고, 작업의 효율성을 높인다.
품질 향상: 자동화된 테스트와 지속적인 피드백 루프는 버그를 빠르게 발견하고 수정하는 데 도움을 준다.
비용 절감: 자동화와 효율적인 프로세스는 리소스 사용을 최적화하고 운영 비용을 줄인다.
안정성과 가용성: 인프라와 애플리케이션의 모니터링 및 자동 복구 메커니즘을 통해 시스템의 안정성과 가용성이 향상된다.
초기 투자 비용: DevOps를 도입하기 위해서는 새로운 도구와 기술에 대한 초기 투자가 필요하며, 기존 시스템과의 통합이나 변경이 필요할 수 있다.
보안 문제: 지속적인 배포는 보안 검토 프로세스를 압축시킬 수 있어, 실수로 보안 취약점이 포함된 코드가 배포될 수 있다.
유지 관리와 지속성: DevOps는 지속적인 관리와 개선을 요구한다. 지속적인 투자와 관심이 필요하다.
DevOps 라이프사이클 단계에서 사용되는 툴
계획: 비즈니스 가치 및 요구사항을 정의한다.
- Jira 또는 Git
코딩: 소프트웨어 설계 및 소프트웨어 코드를 생성한다.
- GitHub 또는 GitLab
구축: 소프트웨어 빌드 및 버전을 관리하고 자동화된 툴을 사용하여 코드를 컴파일하고 패키징하여 향후 제품 릴리즈에 제공한다. 소스 코드, 패키지 저장소는 제품 릴리즈에 필요한 "패키지" 인프라 역할도 한다.
- Docker, Ansible, Puppet, Chef, Gradle, Maven 또는 JFrog Artifactory
테스트: 최적의 코드 품질을 보장하기 위해 지속적인 테스트를 수행한다.
- JUnit 또는 Codeception
배포: 제품 릴리즈를 운영 단계로 관리, 조정, 예약 및 자동화하는 데 도움이 되는 툴이 포함될 수 있다.
- Ansible, Jenkins, Kubernetes, OpenShift, Docker 또는 Jira
운영: 운영 중인 소프트웨어를 관리한다.
- Anabilities, Puppet, PowerShell, Chef 또는 Otter
모니터링: 운영 환경의 특정 소프트웨어 릴리즈에서 발생하는 문제에 대한 정보를 식별하고 수집한다.
- New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios 또는 Slack
DevOps사례는 지속적인 개선 및 자동화 개념을 반영한다. 많은 사례가 하나 이상의 개발 주기 단계에 중점을 둔다.
지속적인 개발: DevOps 라이프사이클의 계획 및 코딩 단계에 걸쳐 적용된다.
지속적인 테스트: 애플리케이션 코드를 작성하거나 업데이트하는 동안 자동화되고 사전 예약된 지속적인 코드 테스트를 포함한다. 이러한 테스트를 수행하면 코드를 더 빠르게 운영 환경에 제공할 수 있다.
지속적인 통합(CI): 구성 관리(CM) 툴을 다른 테스트 및 개발 툴과 함께 사용하여 개발 중인 코드의 운영 준비 상태를 추적한다. 테스트와 개발 간의 신속한 피드백을 통해 코드 문제를 신속하게 파악하고 해결하는 작업이 포함된다.
지속적인 제공: 테스트 후 사전 운영 또는 스테이징 환경으로 코드 변경을 제공하는 작업을 자동화한다.
지속적인 구축(CD): 신규 또는 변경된 코드를 운영 단계로 자동 릴리즈한다. 지속적인 구축을 수행하는 회사에서는 코드 변경을 하루에 여러 번 릴리즈할 수 있다. Docker, Kubernetes 및 기타 컨테이너는 서로 다른 구축 플랫폼 및 환경에서 코드의 일관성을 유지하여 지속적인 구축을 지원한다.
지속적인 모니터링: 작동 중인 코드와 이를 지원하는 기본 인프라에 대한 지속적인 모니터링과 관련된다. 피드백 루프를 통해 버그 또는 문제를 보고한 후 다시 개발 단계로 되돌아간다.
코드형 인프라: 다양한 DevOps 단계에서 소프트웨어 릴리즈에 필요한 인프라 프로비저닝을 자동화하는 데 사용된다. 개발자는 Docker, Kubernetes 또는 OpenShift에서 필요에 따라 스토리지 볼륨을 생성할 수 있다. 또한 운영 팀은 이 사례를 통해 환경 구성을 모니터링하고, 변경 사항을 추적하며, 구성 롤백을 간소화할 수 있다.
참고
DEVOPS란?