DevOps란?

사람, 프로세스, 기술을 하나로 통합하여 고객에게 더 나은 제품을 더 빨리 제공할 수 있는 DevOps에 대해 알아보세요.

DevOps 정의

개발(Dev)과 운영(Ops)의 합성어인 DevOps는 고객에게 지속적으로 가치를 제공하도록 지원하는 사람, 프로세스 및 기술의 합집합입니다.

팀에는 DevOps가 어떤 의미일까요? DevOps는 개발, IT 운영, 품질 엔지니어링, 보안 등 이제껏 서로 단절되었던 역할들이 서로 조율하고 협업하여 더욱 안정적이고 뛰어난 제품을 생산할 수 있도록 지원합니다. DevOps 방식과 도구를 비롯한 DevOps 문화를 도입하는 팀은 고객 요구 사항에 보다 효과적으로 대응하고, 더욱 안심하고 애플리케이션을 빌드하며, 비즈니스 목표를 더 빨리 달성할 수 있습니다.

DevOps의 이점

DevOps 문화, 방식 및 도구를 도입하는 팀은 더 나은 제품을 더 빨리 빌드하여 고객 만족을 높임으로써 높은 성과를 달성합니다. 향상된 협업과 생산성은 다음과 같은 비즈니스 목표를 달성하기 위해서도 꼭 필요합니다.

출시 시간 단축

시장과 경쟁 지형에 따른 유연한 대응

시스템 안정성 및 신뢰성 유지

평균 복구 시간 개선

DevOps와 애플리케이션 수명 주기

DevOps는 계획, 개발, 제공, 운영 단계 전반에 걸쳐 애플리케이션 수명 주기에 영향을 줍니다. 각 단계는 서로 영향을 주며, 단계가 특정 역할에 한정되지 않습니다. 진정한 DevOps 문화에서는 각 역할이 단계마다 일부 관여하게 됩니다.

요금제

계획 단계에서는 DevOps 팀들이 빌드하려는 애플리케이션과 시스템의 특징 및 기능에 대한 아이디어를 도출하고, 이를 정의하고, 기술합니다. 단일 제품 작업에서부터 여러 제품으로 이루어진 포트폴리오에 적용되는 작업까지, 세밀함의 수준을 달리하며 진행 상황을 추적합니다. DevOps 팀들은 백로그를 만들고, 버그를 추적하고, 스크럼을 사용하여 Agile Software Development를 관리하고, Kanban 보드를 사용하고, 대시보드로 진행 상황을 시각화하는 등 가시성을 바탕으로 민첩하게 계획을 진행합니다.

개발

개발 단계에는 팀원들이 코드를 작성하고, 검토하고, 통합하는 코딩의 모든 측면과 이 코드를 다양한 환경에 배포할 수 있는 빌드 아티팩트로 빌드하는 작업이 포함됩니다. DevOps 팀들은 품질, 안정성 및 생산성의 저하 없이 신속하게 혁신할 방안을 모색하며, 이를 위해 생산성이 뛰어난 도구를 사용하고, 일상적인 수동 단계를 자동화하고, 자동화된 테스트 및 연속 통합을 통해 작은 증분 단위로 반복합니다.

제공

제공은 일관성 있고 안정적인 방식으로 프로덕션 환경에 애플리케이션을 배포하는 과정을 의미합니다. 제공 단계에는 이러한 환경을 구성하는 완전 관리형 기본 인프라를 배포하고 구성하는 작업도 포함됩니다.

팀들은 제공 단계에서 명확한 수동 승인 단계를 통해 릴리스 관리 프로세스를 정의하고, 고객에게 출시되기 전까지 애플리케이션이 여러 단계를 거치도록 자동화된 게이트를 설정합니다. 이러한 프로세스를 자동화하면 확장성과 반복성, 관리 용이성이 향상됩니다. 이처럼 DevOps를 구현하는 팀들은 쉽고 자신 있게 안심하고 애플리케이션을 빈번하게 제공할 수 있습니다.

운영

운영 단계에서는 프로덕션 환경에서 애플리케이션을 관리, 모니터링 및 문제 해결하는 작업이 이루어집니다. DevOps 방식을 도입한 팀들은 시스템 안정성과 고가용성을 보장하기 위해 협력하고, 가동 중지 시간을 0으로 유지하는 한편 보안 및 거버넌스를 구현하기 위해 노력합니다. DevOps 팀들은 고객 경험에 영향을 주기 전에 문제를 발견하려고 하며, 문제가 발생한 경우에는 빠르게 대응합니다. 이처럼 경계 태세를 늦추지 않으려면 깊이 있는 원격 분석 데이터와 유용한 알림, 애플리케이션 및 기본 시스템에 대한 완전한 가시성이 필요합니다.

DevOps 문화

DevOps 방식을 도입하면 기술을 통해 프로세스를 자동화 및 최적화할 수 있습니다. 이 모든 것은 조직 내부의 문화에서, 나아가 문화의 핵심적인 부분이 되는 사람으로부터 시작합니다. DevOps 문화를 조성하려면 사람들이 일하고 협업하는 방식이 근본적으로 변화해야 합니다. 진정으로 DevOps 문화를 받아들인 조직은 뛰어난 성과를 내는 개발 환경의 토대를 마련할 수 있습니다.

협업, 가시성 및 조율

건전한 DevOps 문화의 지표 중 하나는 팀 간의 협업입니다. 효과적인 협업은 가시성에서 출발합니다. 개발 팀, IT 운영 팀 등 여러 팀은 팀의 DevOps 프로세스, 우선 순위, 우려 사항을 다른 팀과 공유해야 하며, 효과적인 협업을 계획하는 한편 비즈니스 관련 목표와 성공 측정 기준을 조율해야 합니다.

팀 역할 범위와 책임의 변화

팀들은 조율 과정에서 팀 역할에 핵심적인 수명 주기 단계뿐 아니라 부차적인 수명 주기 단계에도 주인 의식을 갖고 관여하게 됩니다. 예를 들어, 개발자는 개발 단계에서 확립한 혁신 및 품질뿐 아니라 변경한 내용이 운영 단계에 미치는 성능과 안정성도 책임을 지게 됩니다. IT 운영자들은 계획 및 개발 단계에 거버넌스, 보안, 규정 준수를 적용합니다.

짧은 릴리스 주기

DevOps 팀은 짧은 주기로 소프트웨어를 릴리스하며 민첩성을 유지합니다. 릴리스 주기를 짧게 가져가면 개선 사항이 작은 증분 단위로 누적되기 때문에 계획과 위험 관리가 쉬워지게 되며, 이로 인해 시스템 안정성에 미치는 영향도 줄어듭니다. 릴리스 주기가 짧아지면 조직에서 변화하는 고객 요구 사항과 경쟁사의 압박에 유연하게 대응할 수 있습니다.

지속적인 학습

높은 성과를 내는 DevOps 팀은 성장형 사고방식을 갖고 있습니다. 이들은 페일 패스트하고 배운 내용을 프로세스에 적용하여 끊임없이 개선하고 고객 만족도를 높이며 혁신을 가속하고 시장 적응력을 향상합니다. DevOps는 하나의 여정이므로 언제나 개선의 여지가 있습니다.

Microsoft의 여러 팀이 어떻게 DevOps 문화를 채택하게 되었는지 확인

자세히 보기

DevOps 방식

DevOps 문화를 도입한 팀들은 애플리케이션 수명 주기 전체에서 특정한 방식을 구현하여 DevOps를 실천합니다. 이 중 일부 방식은 특정 단계를 가속화 및 자동화하고 개선하는 데 도움이 되고 다른 방식은 여러 단계에 걸쳐 적용되어 팀들이 생산성을 높이는 원활한 프로세스를 만들도록 지원합니다.

CI/CD(연속 통합 및 지속적인 업데이트)

연속 통합은 개발자가 기본 코드 분기에 코드 변경 내용을 빈번하게 병합하는 소프트웨어 개발 방식입니다. 연속 통합에는 자동화된 테스트가 사용됩니다. 즉, 기본 분기에 있는 코드가 항상 안정화된 상태를 유지할 수 있도록 새로운 코드가 커밋될 때마다 자동화된 테스트가 실행됩니다.

지속적인 업데이트란 프로덕션 환경에 새로운 애플리케이션 버전이 빈번하게 자동 배포되는 것을 가리킵니다. 배포에 필요한 단계를 자동화함으로써 배포 시에 발생할 수 있는 문제를 줄이는 한편 더욱 빈번한 업데이트가 가능해집니다.

이 두 가지를 모두 구현할 경우 코드 커밋에서부터 프로덕션 배포에까지 이르는 모든 단계의 완전한 자동화가 이루어지는 CI/CD가 구현됩니다. CI/CD를 구현하면 코드 빌드에만 집중할 수 있고 일상적이고 수동적인 단계에서 발생하기 마련인 오버헤드와 잠재적인 사용자 오류가 제거되며, 새로운 코드를 더욱 빠르고 안전하게 배포할 수 있습니다. 배포가 보다 빈번하게 더욱 작은 증분 단위로 이루어지므로 팀들이 민첩성과 생산성을 향상하고 실행 중인 코드에 더욱 안심할 수 있게 됩니다.

버전 제어

버전 제어란 코드를 버전으로 관리하는 것, 즉 수정 버전과 변경 이력을 추적하여 코드를 검토하기 쉽고 복구하기 쉽게 만드는 것을 의미합니다. 일반적으로 버전 제어는 여러 개발자가 협업하여 코드를 작성할 수 있도록 지원하는 Git과 같은 버전 제어 시스템을 사용하여 구현됩니다. 버전 제어 시스템은 동일한 파일에서 이루어진 코드 변경 사항을 병합하고 충돌을 처리하고 변경 사항을 이전 상태로 롤백하기 위한 명확한 프로세스를 제공합니다.

개발 팀의 협력을 지원하고, 팀원 간에 코딩 작업을 배분하고, 필요할 때 간편하게 복구할 수 있도록 모든 코드를 저장하는 버전 제어를 사용하는 것은 DevOps 방식의 구현을 위한 기본적인 요건입니다.

버전 제어는 연속 통합, IaC와 같은 다른 개발 방식에도 필요한 요소입니다.

Git에 대해 자세히 알아보기

Agile Software Development

Agile이란 팀 협업, 고객 및 사용자 피드백, 그리고 짧은 릴리스 주기를 통한 고도의 변화 적응력을 강조하는 소프트웨어 개발 방식입니다. Agile을 구현하는 팀들은 고객에게 지속적인 변경 사항 및 개선 사항을 제공하고, 고객의 피드백을 수집하며, 고객의 요구 사항과 필요 사항을 바탕으로 학습하고 조정합니다. Agile은 순차적인 단계로 정의되는 긴 릴리스 주기를 사용하는 폭포수와 같은 기존의 프레임워크와는 현저히 다른 개발 방식입니다. 널리 사용되는 Agile 프레임워크에는 칸반과 스크럼이 있습니다.

Agile 및 DevOps가 함께 작동하는 방식 알아보기

IaC(infrastructure as code)

IaC(infrastructure as code)는 팀들이 시스템 리소스와 토폴로지를 코딩하는 것처럼 관리할 수 있도록 이를 설명적으로 정의합니다. 정의는 버전 제어 시스템에 저장하여 버전을 관리할 수 있으며, 여기서 코드로 작업하는 것처럼 검토하고 되돌릴 수 있습니다.

IaC를 도입하면 시스템 리소스를 안정적이고 반복 가능한 관리형 방식으로 배포할 수 있습니다. IaC는 배포를 자동화하고 복잡한 대규모 환경에서 사용자 오류가 발생할 위험을 줄이는 데도 도움이 됩니다. 환경 배포를 위한 반복적이고 안정적인 솔루션인 IaC를 사용하면 프로덕션과 동일한 개발 및 테스트 환경을 유지할 수 있습니다. 환경을 다른 데이터 센터와 클라우드 플랫폼으로 복제하는 것도 훨씬 간편하고 효율적으로 됩니다.

Configuration Management

구성 관리란 서버, 가상 머신, 데이터베이스를 비롯해 시스템에 포함된 리소스들의 상태를 관리하는 것을 가리킵니다. 구성 관리 도구를 사용하면 변경 사항을 체계적인 방식으로 롤아웃하여 시스템 구성이 수정될 위험을 줄일 수 있습니다. 시스템 리소스의 구성이 시간이 흐름에 따라 기존에 정의된 바람직한 상태에서 벗어나는 것을 가리키는 구성 드리프트를 방지하고 시스템 상태를 추적하는 데도 구성 관리 도구가 유용하게 사용됩니다.

IaC와 함께 구성 관리를 사용하면 시스템 정의와 구성을 간편하게 템플릿으로 만들고 자동화하여 복잡한 환경을 대규모로 운영할 수 있습니다.

지속적인 모니터링

지속적인 모니터링이란 애플리케이션을 실행하는 기본 인프라부터 상위 수준의 소프트웨어 구성 요소까지, 전체 애플리케이션 스택의 성능과 상태에 대한 완전한 실시간 가시성을 갖는 것을 의미합니다. 가시성은 원격 분석 데이터와 메타데이터 모음, 그리고 작업자의 관심이 필요한 사전 정의된 조건에 대해 알림을 설정하는 작업으로 구성됩니다. 원격 분석 데이터는 시스템의 여러 부분에서 수집된 이벤트 데이터와 로그로 이루어지는데, 이는 데이터를 분석하고 쿼리할 수 있는 곳에 저장됩니다.

뛰어난 성과를 내는 DevOps 팀들은 방대한 데이터로부터 인사이트를 창출할 수 있도록 유용하고 의미 있는 알림을 설정하고 깊이 있는 원격 분석 데이터를 수집하기 위해 노력합니다. 팀들은 이러한 인사이트를 바탕으로 문제에 실시간으로 대응하고 추후 개발 주기에서 애플리케이션을 개선할 방안을 도출할 수 있습니다.

DevOps 도구

조직에서 DevOps 문화를 촉진하는 데 도움이 되는 다양한 DevOps 도구가 있습니다. 일반적으로 여러 가지 도구를 사용하여 애플리케이션 수명 주기의 각 단계에 필요한 사용자 지정 도구 체인을 만드는 경우가 많습니다. 특정 도구나 기술을 도입하는 것이 곧바로 DevOps의 도입으로 연결되는 것은 아니지만, 기존에 DevOps 문화가 구현되어 있고 프로세스가 정의되어 있다면 올바른 도구를 선택하는 것으로 DevOps 방식을 구현하고 간소화할 수 있습니다. DevOps 구현을 위한 도구를 받으세요.

DevOps와 클라우드

클라우드 도입으로 인해 애플리케이션을 빌드, 배포 및 운영하는 방식이 근본적으로 혁신되었습니다. 여기에 DevOps의 도입까지 가세함에 따라 이제 개발 방식을 개선하고 고객에게 더 나은 서비스를 더 빨리 제공할 무수한 기회가 창출되고 있습니다.

클라우드 민첩성

제한 없는 리소스로 다중 지역 클라우드 환경을 빠르게 프로비저닝 및 구성할 수 있기 때문에 앱을 민첩하게 배포할 수 있습니다. 물리적 서버를 구매하고 구성하고 관리하는 대신 몇 분 만에 복잡한 클라우드 환경을 만들 수 있고 더 이상 필요하지 않을 경우 종료할 수 있습니다.

Kubernetes

컨테이너 기술을 사용하는 애플리케이션이 갈수록 늘어남에 따라 Kubernetes는 대규모 컨테이너 오케스트레이션을 위한 업계 솔루션으로 자리 잡고 있습니다. Kubernetes가 대세로 자리 잡은 오늘날, CI/CD 파이프라인을 통해 컨테이너를 빌드 및 배포하는 프로세스를 자동화하고 프로덕션 환경에서 컨테이너를 모니터링하는 것이 필수적인 작업이 되고 있습니다.

서버리스 컴퓨팅

인프라 관리 오버헤드의 대부분이 클라우드 공급자에게 넘어가기 때문에 기본 인프라가 아닌 앱에 집중할 수 있습니다. 서버리스 컴퓨팅은 서버를 구성하고 관리하지 않고도 애플리케이션을 실행할 수 있는 역량을 제공합니다. 배포 및 운영의 복잡성과 위험을 줄여 주는 옵션도 있습니다.

DevOps 여정 시작

DevOps를 처음 접하는 경우 제공되는 방식과 솔루션이 많아서 혼란스러울 수 있습니다. 작은 규모로 시작하고 다른 조직의 사례를 통해 배워나가는 것이 중요합니다.

FAQ

  • DevOps는 조직의 다양한 역할들이 구현하는 문화이며, 역할 간의 긴밀한 협업이 요구됩니다. DevOps 역할에는 대부분의 경우 개발, IT, 운영, 보안, 지원이 포함됩니다.

    DevOps 방식을 빌드하는 방법을 알아보세요.

  • DevOps는 하나의 역할로 한정되지 않습니다. 애플리케이션 수명 주기 단계에 참여하는 모든 구성원이 DevOps 문화를 포용해야 합니다. 하지만 조직에 자동화를 지원하고, 구현 방식을 정의하고, CI/CD 파이프라인을 구현하는 일을 전담하는 담당자 또는 팀이 있는 경우가 있을 수 있습니다. 이러한 역할의 공식 직함이 DevOps 엔지니어 또는 DevOps 스페셜리스트인 경우도 있습니다.
  • 대규모 조직에서 DevOps를 도입하는 것은 쉬운 일이 아닙니다. 대규모 조직의 문화와 표준 프로세스 및 도구를 바꾸려면 인내와 끈기가 필요합니다. 대부분의 대규모 조직에는 DevOps 방식을 누구보다 먼저 포용하는 얼리어답터가 있습니다. DevOps 방식이 성숙 단계에 도달하여 긍정적인 결과를 내기 시작하면 다른 팀들이 뒤따라 DevOps를 도입하기 시작합니다.

    Microsoft의 팀이 DevOps 문화를 도입한 방법에 대해 알아보세요.

  • DevOps의 진정한 의미는 고객에게 지속적인 가치를 제공하는 데 있습니다. DevOps를 도입한 결과는 비즈니스 목표와 관련하여 측정해야 합니다. DevOps 팀들은 비즈니스 목표를 조율하고 짧은 릴리스 주기를 사용하여 목표를 달성합니다. 짧은 릴리스 주기에 따라 시장에 민첩하게 대응하고 고객 피드백을 통해 지속적으로 학습할 수 있습니다.
  • DevOps와 Agile은 둘 다 제품, 출시 또는 릴리스를 만들기 위한 최신 소프트웨어 개발 프레임워크입니다. DevOps는 소프트웨어 개발 및 유지 관리에 관련된 모든 역할 간 협업을 조성하는 문화입니다. Agile은 요구 사항이 변화하는 공통된 현실에서 생산성을 유지하고 릴리스를 추진하도록 설계된 개발 방법론입니다. DevOps와 Agile은 함께 사용할 수 있으므로 대개 동시에 도입됩니다.

    DevOps 및 Agile을 통합하는 방법을 알아보세요.

  • 연속 통합과 함께 지속적인 업데이트와 지속적인 배포는 소프트웨어 제공 단계를 자동화하는 방식입니다.