DevOps
- 소프트웨어의 개발(Development)과 운영(Operations)의 합성어
- 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화
- 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
DevOps의 이점
속도
- 작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하고, 좀 더 효율적으로 비즈니스 성과를 창출
- 마이크로 서비스와 지속적 전달을 사용하면 팀에서 서비스를 주도적으로 운영하여 업데이트를 좀더 빠르게 릴리즈 할 수 있다.
신속한 제공
- 릴리스의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선
- 새로운 기능의 릴리스와 버그 수정 속도가 빨라질수록 고객의 요구에 더 빠르게 대응하여 경쟁 우위를 강화
- CI/CD는 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하는 방식
안전성
- 최종 사용자에게 지속적으로 긍정적인 경험을 제공하는 한편 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장
- CI/CD와 같은 방식을 사용하여 각 변경 사항이 제대로 작동하며 안전한지 테스트합니다.
- 모니터링과 로깅 방식을 통해 실시간으로 성능에 대한 정보를 얻을 수 있습니다.
확장
- 규모에 따라 인프라와 개발 프로세스를 운영 및 관리
- 자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리
- 예를 들어 코드형 인프라를 사용하면 개발, 테스트 및 프로덕션 환경을 반복 가능하고 좀 더 효율적인 방식으로 관리할 수 있습니다.
협업 강화
- 주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축
- 개발자와 운영팀은 긴밀하게 협력하고, 많은 책임을 공유하며, 워크플로를 결합
- 이를 통해 비효율성을 줄이고 시간을 절약
보안
- 제어를 유지하고 규정을 준수하면서 신속하게 진행할 수 있습니다.
- 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 그대로 유지하면서 DevOps 모델을 도입할 수 있습니다.
- 예를 들어 코드형 인프라와 코드형 정책을 사용하면 규모에 따라 규정 준수를 정의하고 추적할 수 있습니다.
DevOps 방식
Continuous Integration
지속적 통합은 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 소프트웨어 개발 방식입니다.
지속적 통합의 핵심 목표는 버그를 신속하게 찾아 해결하고, 소프트웨어 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 걸리는 시간을 단축하는 것입니다.
Continuous Delivery
지속적 전달은 프로덕션에 릴리스하기 위한 코드 변경이 자동으로 빌드, 테스트 및 준비되는 소프트웨어 개발 방식입니다. 빌드 단계 이후의 모든 코드 변경 사항을 테스트 환경 및/또는 프로덕션 환경에 배포함으로써 지속적 통합을 확장합니다.
지속적 전달이 적절하게 구현되면, 개발자는 언제나 즉시 배포할 수 있고 표준화된 테스트 프로세스를 통과한 빌드 아티팩트를 보유하게 됩니다.
Micro Service
마이크로 서비스 아키텍처는 단일 애플리케이션을 작은 서비스의 집합으로 구축하는 설계 접근 방식입니다.
각 서비스는 자체 프로세스에서 실행되고, 주로 HTTP 기반 API(애플리케이션 프로그래밍 인터페이스)라는 간편한 메커니즘을 사용하는 잘 정의된 인터페이스를 통해 다른 서비스와 통신합니다.
마이크로 서비스는 비즈니스 기능을 중심으로 구축되며, 각 서비스는 단일 목적으로 한정되어 있습니다.
다양한 프레임워크 또는 프로그래밍 언어를 사용하여 마이크로 서비스를 작성하고, 이를 독립적으로 단일 서비스 또는 서비스 그룹으로 배포할 수 있습니다.
코드형 인프라
코드형 인프라는 버전 관리 및 지속적 통합과 같은 코드와 소프트웨어 개발 기술을 사용하여 인프라를 프로비저닝하고 관리하는 방식입니다.
클라우드의 API 중심 모델을 사용하면 개발자와 시스템 관리자가 수동으로 리소스를 설정 및 구성할 필요 없이 프로그래밍 방식으로 대규모로 인프라와 상호 작용할 수 있습니다. 따라서 엔지니어는 코드 기반 도구를 사용하여 인프라와 인터페이스하고, 애플리케이션 코드를 다루는 방법과 유사한 방식으로 인프라를 다룰 수 있습니다.
인프라가 코드를 통해 정의되므로 인프라와 서버를 표준화된 패턴을 사용하여 배포하고, 최신 패치와 버전으로 업데이트하거나, 반복 가능한 방식으로 복제할 수 있습니다.
구성 관리
개발자와 시스템 관리자는 코드를 사용하여 운영 체제를 자동화하고 구성, 운영 작업 등을 호스팅합니다. 코드를 사용함으로써 구성 변경을 반복하고 표준화할 수 있습니다. 따라서 개발자와 시스템 관리자는 운영 체제, 시스템 애플리케이션 또는 서버 소프트웨어를 수동으로 구성할 필요가 없습니다.
코드형 정책
인프라와 인프라의 구성이 클라우드로 체계화된 조직은 규정 준수를 규모에 따라 동적으로 모니터링하고 적용할 수 있습니다. 따라서 코드를 통해 설명된 인프라는 자동화된 방식으로 추적, 검증 및 재구성할 수 있습니다. 이는 조직이 손쉽게 리소스 변경을 관리하고 보안 조치가 분산 방식으로 적절하게 적용될 수 있게 해줍니다(예: PCI-DSS 또는 HIPAA 규정 준수나 정보 보안). 규정 위반 리소스가 추가 조사를 할 수 있도록 자동으로 플래그가 지정되거나 규정 준수 상태로 자동으로 변경될 수 있으므로 이를 통해 조직 내 팀은 더 빠르게 움직일 수 있습니다.
모니터링 및 로깅
조직은 지표와 로그를 모니터링하여 애플리케이션 및 인프라 성능이 제품의 최종 사용자 경험에 어떤 영향을 미치는지 확인합니다. 조직은 애플리케이션과 인프라에서 생성되는 데이터 및 로그를 캡처하고 분류한 다음 이를 분석함으로써 변경 또는 업데이트가 사용자에게 어떤 영향을 주는지 이해하고, 문제의 근본 원인 또는 예상치 못한 변경에 대한 통찰력을 확보합니다.
서비스는 연중무휴 24시간 사용할 수 있어야 하고 애플리케이션 및 인프라 업데이트 빈도가 증가함에 따라 적극적인 모니터링이 점점 더 중요해지고 있습니다. 이러한 데이터에 대한 실시간 분석을 수행하거나 알림을 생성하는 것도 조직이 좀 더 능동적으로 서비스를 모니터링하는 데 도움이 됩니다.
커뮤니케이션 및 협업
조직에서 커뮤니케이션과 협업이 증가하는 것도 DevOps의 주요 문화적 측면 중 하나입니다.
DevOps 도구 및 소프트웨어 제공 프로세스 자동화를 사용하면 개발 및 운영의 워크플로와 책임을 물리적으로 합침으로써 협업이 이루어집니다. 해당 팀에서는 이 위에 채팅 애플리케이션, 문제 또는 프로젝트 추적 시스템, wiki를 사용하여 커뮤니케이션을 지원하고 정보를 공유하는 강력한 문화적 표준을 확립합니다. 이를 통해 개발자와 운영 그리고 마케팅이나 영업과 같은 다른 팀 간에도 커뮤니케이션이 활발해지면서 조직의 모든 부분에서 목표와 프로젝트에 좀 더 가깝게 다가갈 수 있습니다.
DevOps 도구
References