메뉴

DevOps란?

비스듬히 세워진 회색 돋보기
항목

DevOps는 애플리케이션 개발의 품질과 속도를 개선하고 신규 또는 수정된 소프트웨어 기능이나 제품의 릴리즈 주기 단축을 장려하는 새로운 철학이자 프레임워크입니다.

DevOps 사례는 애플리케이션 개발 팀(Dev)과 해당 IT 운영 팀(Ops) 팀 간의 원활하고 지속적인 커뮤니케이션, 협업, 통합, 가시성 및 투명성을 장려합니다.

"Dev"와 "Ops" 간의 이러한 긴밀한 관계는 초기 소프트웨어 계획부터 코딩, 구축, 테스트 및 릴리즈 단계와 구축, 운영 및 지속적인 모니터링에 이르는 DevOps 라이프사이클의 모든 단계에 걸쳐 계속됩니다. 이러한 관계는 추가 개선, 개발, 테스트 및 구축에 대한 지속적인 고객 피드백 루프를 추진하는 원동력이 됩니다. 이러한 노력이 제공하는 결과 중 하나는 필요한 기능 변경 또는 추가 기능을 더 빠르고 지속적으로 릴리즈할 수 있다는 것입니다.

혹자는 DevOps 목표를 문화, 자동화, 측정 및 공유(CAMS)의 네 가지 범주로 그룹화하는데 DevOps 툴을 사용하여 이 모든 영역을 지원할 수 있습니다. 이러한 툴을 사용하면 개발 및 운영 워크플로우의 효율성 및 협업 기능을 개선하여 통합, 개발, 테스트, 구축 또는 모니터링과 관련된 기존의 시간 소모적인 수동 또는 정적 작업을 자동화할 수 있습니다.

DevOps가 중요한 이유

개발 팀과 IT 운영 팀 간의 커뮤니케이션 및 협업에 대한 장벽을 허무는 노력과 함께 DevOps는 고객 만족과 더 빠른 가치 제공이라는 핵심 가치를 추구합니다. DevOps는 비즈니스 혁신을 추진하고 지속적인 프로세스 개선을 주도하도록 설계되었습니다.

DevOps 사례는 조직의 최종 고객에게 비즈니스 가치를 더 빠르고 안전하게 제공할 수 있는 환경을 조성합니다. 이 가치는 더 자주 릴리즈되는 제품, 기능 또는 업데이트의 형태를 취할 수 있으며 적절한 수준의 품질과 보안을 갖춘 제품 릴리즈 또는 새로운 기능을 고객에게 더 빠르게 제공하는 것과 관련될 수 있습니다. 또는 문제점이나 버그를 신속하게 식별하여 해결하고 다시 릴리즈하는 데 집중할 수 있습니다.

또한 기본 인프라는 소프트웨어를 처음 개발 및 테스트하고 운영 환경에 출시할 때까지 지속적인 성능, 가용성 및 안정성을 바탕으로 DevOps를 지원합니다.

DevOps 방법

조직에서 개발 및 제품 출시의 속도와 향상을 위해 사용할 수 있는 몇 가지 일반적인 DevOps 방법이 있습니다. 이러한 방법은 소프트웨어 개발 방법론 및 모범 사례의 형식을 사용합니다. 가장 많이 사용되는 방법은 스크럼(Scrum), 칸반(Kanban) 및 애자일(Agile)입니다.

  • 스크럼: 스크럼은 개발 및 QA 프로젝트를 가속하기 위한 팀원의 협력 방법을 정의합니다. 스크럼 사례에는 주요 워크플로 및 특정 용어(Sprint, 시간 상자, 일별 스크럼[회의])와 전담 역할(스크럼 마스터, 제품 소유자)이 포함됩니다.
  • 칸반: 칸반은 Toyota 공장에서 얻은 효율에서 비롯되었습니다. 칸반은 진행 중인 소프트웨어 프로젝트 작업 상태(WIP)를 칸반 보드로 추적할 것을 지시합니다.
  • 애자일: 초기 애자일 소프트웨어 개발 방법이 여전히 DevOps 사례 및 툴에 영향을 미치고 있습니다. 스크럼 및 칸반을 비롯한 많은 DevOps 방법에는 애자일 프로그래밍 요소가 포함되어 있습니다. 일부 애자일 사례는 변화하는 요구 및 요구사항에 빠르게 대응하고 요구사항을 사용자 사례로 문서화하며 매일 아침 회의를 수행하고 지속적인 고객 피드백을 포함하는 것과 관련됩니다. 또한 애자일은 기존의 긴 "폭포수" 개발 방법 대신 짧은소프트웨어 개발 라이프사이클을 사용할 것을 지시합니다.

DevOps 툴체인

DevOps 사례를 따르는 사람들은 종종 DevOps “툴체인”의 일부로 DevOps 친화적인 툴을 사용합니다. 이러한 툴의 목표는 소프트웨어 전송 워크플로(또는 "파이프라인")의 다양한 단계를 추가로 간소화하고, 단축하고, 자동화하는 것입니다. 또한 이러한 툴 중 다수는 자동화, 협업 및 개발-운영 팀 간의 통합에 대한 핵심 DevOps 원칙을 손쉽게 준수할 수 있도록 합니다. 다음은 다양한 DevOps 라이프사이클 단계에서 사용되는 툴의 예입니다.

  • 계획: 이 단계는 비즈니스 가치 및 요구사항을 정의하는 데 도움이 됩니다. 샘플 툴로는 알려진 문제를 추적하고 프로젝트 관리를 수행하는 데 도움이 되는 Jira 또는 Git가 있습니다.
  • 코딩: 이 단계에는 소프트웨어 설계 및 소프트웨어 코드 생성이 포함됩니다. 샘플 툴로는 GitHub, GitLab, Bitbucket 또는 Stash가 있습니다.
  • 구축: 이 단계에서는 소프트웨어 빌드 및 버전을 관리하고 자동화된 툴을 사용하여 코드를 컴파일하고 패키징하여 향후 제품 릴리즈에 제공합니다. 소스 코드 저장소 또는 패키지 저장소를 사용합니다. 이러한 저장소는 제품 릴리즈에 필요한 "패키지" 인프라 역할도 합니다. 샘플 툴로는 Docker, Ansible, Puppet, Chef, Gradle, Maven 또는 JFrog Artifactory가 있습니다.
  • 테스트: 이 단계에서는 최적의 코드 품질을 보장하기 위해 지속적인 테스트(수동 또는 자동)를 수행합니다. 샘플 툴로는 JUnit, Codeception, Selenium, Vagrant, TestNG 또는 BlazeMeter가 있습니다.
  • 배포: 이 단계에는 제품 릴리즈를 운영 단계로 관리, 조정, 예약 및 자동화하는 데 도움이 되는 툴이 포함될 수 있습니다. 샘플 툴로는 Puppet, Chef, Ansible, Jenkins, Kubernetes, OpenShift, OpenStack, Docker 또는 Jira가 있습니다.
  • 운영: 이 단계에서는 운영 중인 소프트웨어를 관리합니다. 샘플 툴로는 Anabilities, Puppet, PowerShell, Chef, Salt 또는 Otter가 있습니다.
  • 모니터링: 이 단계에서는 운영 환경의 특정 소프트웨어 릴리즈에서 발생하는 문제에 대한 정보를 식별하고 수집합니다. 샘플 툴로는 New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios 또는 Slack이 있습니다.

DevOps 사례

DevOps 사례는 지속적인 개선 및 자동화 개념을 반영합니다. 많은 사례가 하나 이상의 개발 주기 단계에 중점을 둡니다. 이러한 사례는 다음과 같습니다.

  • 지속적인 개발. 이 사례는 DevOps 라이프사이클의 계획 및 코딩 단계에 걸쳐 적용됩니다. 버전 제어 메커니즘이 관련될 수 있습니다.
  • 지속적인 테스트. 이 사례는 애플리케이션 코드를 작성하거나 업데이트하는 동안 자동화되고 사전 예약된 지속적인 코드 테스트를 포함합니다. 이러한 테스트를 수행하면 코드를 더 빠르게 운영 환경에 제공할 수 있습니다.
  • 지속적인 통합(CI). 이 사례는 구성 관리(CM) 툴을 다른 테스트 및 개발 툴과 함께 사용하여 개발 중인 코드의 운영 준비 상태를 추적합니다. 테스트와 개발 간의 신속한 피드백을 통해 코드 문제를 신속하게 파악하고 해결하는 작업이 포함됩니다.
  • 지속적인 제공이 사례는 테스트 후 사전 운영 또는 스테이징 환경으로 코드 변경을 제공하는 작업을 자동화합니다. 제공된 후에는 직원이 이러한 코드 변경을 운영 환경으로 승격할 수 있습니다.
  • 지속적인 구축(CD). 지속적인 제공과 마찬가지로 이 사례는 신규 또는 변경된 코드를 운영 단계로 자동 릴리즈합니다. 지속적인 구축을 수행하는 회사에서는 코드 또는 기능 변경을 하루에 여러 번 릴리즈할 수 있습니다. Docker, Kubernetes 및 기타 컨테이너 기술을 사용하면 서로 다른 구축 플랫폼 및 환경에서 코드의 일관성을 유지하여 지속적인 구축을 지원할 수 있습니다.
  • 지속적인 모니터링. 이 사례는 작동 중인 코드와 이를 지원하는 기본 인프라에 대한 지속적인 모니터링과 관련됩니다. 피드백 루프를 통해 버그 또는 문제를 보고한 후 다시 개발 단계로 되돌아갑니다.
  • 코드형 인프라. 이 사례는 다양한 DevOps 단계에서 소프트웨어 릴리즈에 필요한 인프라 프로비저닝을 자동화하는 데 사용될 수 있습니다. 개발자는 기존 개발 툴 내에서 인프라 "코드"를 추가합니다. 예를 들어 개발자는 Docker, Kubernetes 또는 OpenShift에서 필요에 따라 스토리지 볼륨을 생성할 수 있습니다. 또한 운영 팀은 이 사례를 통해 환경 구성을 모니터링하고, 변경 사항을 추적하며, 구성 롤백을 간소화할 수 있습니다.

DevOps의 이점

DevOps 지지자들이 설명하는 비즈니스 및 기술적 이점 중 다수는 고객 만족도의 개선입니다. DevOps의 몇 가지 이점은 다음과 같습니다.

  • 더 우수한 제품을 더 빠르게 제공
  • 더 빠른 문제 해결 및 복잡성 감소
  • 확장성 및 가용성 향상
  • 보다 안정적인 운영 환경
  • 향상된 리소스 활용률
  • 자동화 향상
  • 시스템 결과에 대한 가시성 개선
  • 더 위대한 혁신

DevOps의 역사

소프트웨어 개발 및 배포를 간소화하는 많은 DevOps 방법에서는 애자일 소프트웨어 개발 및 Lean 프로그래밍에 대한 초기 기반을 제공합니다. 그러나 애초에 DevOps는 개발자와 운영 팀 간의 조화로운 업무를 위한 몇 가지 초기 활동에서 시작되었습니다.

2000년대 초반에 Google이나 Flickr와 같은 인기 웹 사이트는 대대적인 성공에 대비하여 가용성을 유지해야 했습니다. 이로 인해 소프트웨어 안정성 엔지니어(SRE)가 필요하게 되었습니다. SRE는 개발자와 긴밀하게 협력하여 코드가 운영 환경에 공개된 후에도 사이트의 지속적인 실행을 보장하는 운영 인력입니다.

2009년에 Flickr의 엔지니어인 John Allspaw와 Paul Hammond는 한 컨퍼런스에서 DevOps와 유사한 방법론을 선보였는데 이 프레젠테이션의 제목은 "10+ Deploys per Day: Dev and Ops Cooperation at Flickr"였습니다. 같은 해, Patrick Debois는 벨기에에서 첫 번째 "DevOps Day"를 주최했습니다. 여기에는 DevOps 해시태그도 포함되었고 전 세계에서 더 많은 DevOps가 열리게 됨에 따라 가속도를 얻게 됩니다.

이후 몇 년간 DevOps의 목표를 달성하기 위한 업계 및 오픈 소스 툴과 프레임워크가 개발되고 제안되었습니다.

NetApp과 DevOps

NetApp은 DevOps를 통해 비즈니스 결과를 개선하는 데 도움이 되는 솔루션을 제공합니다. 운영 팀은 더 적은 엔지니어링으로 자동화된 인프라를 제공하고 개발자는 마찰이 적은 안정적이고 예측 가능한 환경에서 생산성을 개선할 수 있습니다. NetApp® 기술을 사용하면 온프레미스와 클라우드 환경 모두에서 개발자 생산성을 극대화하는 데 필요한 서비스와 기능을 자신 있게 제공할 수 있습니다.

NetApp은 개발자, 테스트, QA 및 운영 팀이 DevOps 파이프라인에 있는 익숙한 툴에서 인프라 리소스(예: 영구 스토리지 볼륨)를 코드로 손쉽게 사용할 수 있는 솔루션을 제공합니다. 예를 들어 NetApp 스토리지 API 및 IAC를 Puppet, Ansible, Docker, Kubernetes 및 OpenShift와 같은 툴과 통합할 수 있습니다.

그러나 스토리지를 코드로 손쉽게 사용할 수 있는 기능만 제공하는 것이 아닙니다. NetApp 기술을 사용하면 개발 및 테스트 담당자에게 리소스를 안전하게 프로비저닝하고 제공할 수 있습니다. 개발자와 테스터는 스냅샷 또는 클론과 같은 시간 절약형 스토리지 기능을 신속하게 자체 프로비저닝하여 코딩 및 테스트 주기를 단축할 수 있습니다. 이러한 기능을 사용하면 실시간 운영 데이터 또는 코드 세트의 복사본을 몇 초 또는 몇 분 만에 코드로 프로비저닝하여 개발 및 QA 워크플로의 속도를 높일 수 있습니다.

NetApp은 thePub를 통해 커뮤니티 기능을 제공합니다. 이 개발자 커뮤니티에서는 협업을 장려하고, 팁과 요령을 공유하며, 최신 DevOps 사례 및 프로토콜에 관한 아이디어를 토론할 수 있습니다.

DevOps 정보 계속 읽기