김우석 개발자

DevOps

개요 : DevOps의 이해를 위한 번역 글

DevOps란

본문: https://www.scnsoft.com/blog/devops-implementation-guide —

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

DevOps는 개발, 운영, 품질 엔지니어링, 보안 등 이제껏 서로 단절되었던 역할들이 서로 조율하고 협업하여 더욱 안정적이고 뛰어난 제품을 생산할 수 있도록 지원한다.

어쩌다 DevOps가 주목받게 되었을까.


../../../../../public/assets/2021-06-29-DevOps/DevOps1.png

기존에는 소프트웨어 개발을 구성하는 세 가지 옵션이 있었다.

  1. 소프트웨어는 개발 프로세스 전담 재무 및 인적 자원이 풍부한 사내 팀에서 개발한다.
  2. 소프트웨어 개발은 개발을 위한 IT 리소스가 부족할 경우에 대비하여 제 3자에게 외주를 부탁한다.
  3. 소프트웨어 개발은 사내의 노력으로 이루어지지만, 예를 들어 품질 보증(QA)은 회사 내 QA 역량의 차이로 인해 타사의 QA 서비스 공급 업체에 위임한다.

직무 구분

  • 이러한 관련 부서 간의 엄격한 직문 구분으로 개발, 테스트 및 QA, 인프라 프로비저닝 및 현대화는 서로 다른 3개의 부서가 담당한다. 이에 따라 개발자는 코드를 작성하고, 소프트웨어 테스트 엔지니어는 애플리케이션의 버그를 검사하고, 운영팀은 운영 환경을 관리하며, 안정적인 애플리케이션 성능을 보장한다.

역할 분리와 그에 따른 책임

  • 부서들의 의무는 엄격히 분리되어 있고 그들 사이의 협업은 쉽지 않았다. 보안 관리자는 애플리케이션의 보안 약점을 탐지하려는 노력이 프로젝트의 연장으로 이어지기 때문에 소프트웨어 개발 주기에서 ’장애 요소’로 인식되는 독립 부서를 하나 더 만들었다.

불충분한 테스트

  • 개발자는 개발 초기에 테스트 가능한 가장 작은 소프트웨어 각 부분의 기능을 개별적으로 확인하기 위한 유닛 테스트를 작성한다. 유닛 테스트가 소프트웨어 유닛을 독립적으로 확인하는 것을 의미하므로 통합 오류 또는 소프트웨어 성능 문제가 눈에 띄지 않게 될 수 있다.

릴리즈 후 오류 발생 가능성

  • 테스트 엔지니어는 기능, 성능, 통합, 보안, 가용성 및 기타 유형의 테스트를 수행한다. 그러나 지속적인 테스트는 소프트웨어 개발 프로세스의 각 단계에서 구현되지 않는다. 이러한 테스트 차이로 인해 소프트웨어 사용자는 종종 심각한 버그를 릴리즈 후에 감지한다. 이러한 문제는 ’테스트 및 운영 환경의 구성’이나 프로덕션 및 ’테스트 환경에 구축한 빌드 버전’의 차이에 따라 발생한다
  • 이러한 문제들로 인하여 소프트웨어 품질에 대해 사용자의 만족도가 떨어지고 사용자가 직접 수동적으로 테스트를 하지 않으면 안된다. 사용자들은 소프트웨어를 사용하는 목적 달성이 중요하기 때문에 피드백은 상당히 지연된다.

수정 및 확정

  • 분리된 부서간의 협업이 쉽지 않기 때문에 버그를 감지 및 수정하거나 소프트웨어에서 사소한 변경 사항을 구현 및 릴리즈하는 데 긴 시간이 소요된다. 이러한 긴 대기 시간은 개발 중인 소프트웨어가 중요한 비즈니스 운영을 지원하거나 전환해야 하는 경우 특히 치명적이다.

위와 같은 특징들 속에서 DevOps의 필요성이 부각되었다

../../../../../public/assets/2021-06-29-DevOps/DevOps2.png

DevOps의 오해

자동화는 DevOps와 같지 않다

  • DevOps의 핵심 구성 요소는 새로운 IT 전문가들이 새로운 문화를 구축하기 위해 마련된 프로세스이다. 자동화는 소프트웨어 구축 및 테스트를 촉진하여 릴리즈 속도를 높이는 동시에 사람의 실수를 방지하는 도구이다.

DevOps 툴을 채택하는 것이 전부가 아니다.

  • DevOps 툴은 Ansible, Selenium, Docker, Kubernetes 등 다양하다. 그러나 이러한 툴의 사용 및 구성 방법을 외우는 것 외에도, 프로젝트의 모든 구성원이 지속적인 테스트와 지속적인 통합 및 유지보수(CI/CD) 방식을 채택하여 소프트웨어 제공을 가속화하고 품질을 높여야한다.

조직 구조를 재구성할 필요가 없다.

  • 기존 개발, 테스트, 지원, 운영 및 소프트웨어 개발과 관련된 기타 팀을 교육하여 인프라 관리, 애플리케이션 성능 모니터링 등의 틀을 적절하게 구성하고 새로운 사례를 적용할 수 있도록 한다

참고자료:

DevOps 자동화란?

같은 카테고리의 글