Devops

DevOps란

DevOps란 프로그램 개발 방법론의 하나로 개발자와 운영자와의 협업 및 전환을 빠르게 하기 위한 방법이다.

소프트웨어 개발 방법론의 하나로, 개발(development)과 운영(operation)을 결합한 혼성어이다. 개발 담당자와 운영 담당자가 연계하여 협력하는 개발 방법론을 말한다.

– 두산백과

전통적인 조직의 경우 개발자부서에서 개발을 하고 운영을 하는 부서가 이를 넘겨 받아 운영을 한다. 개발자들이 시스템 전반적인 지식이 없는 경우 자신이 작성한 프로그램이 로컬에서는 돌아가지만 시스템에 영향을 주거나 정상적인 동작을 하지 못하는 경우가 있었다고 한다.

개발부서와 운영부서와의 마찰을 줄이고 능률을 향상 시키기 위해 DevOps라는 role이 생기게 되었다. Devops는 자동화, 협업, 빠른 피드백과 반복적인 개선과정을 통해 개발과 운영의 전환 속도를 빠르게 지원한다.

GitLab

GitLab은 Offline 환경에서도 지원을 해 많은 회사 및 조직에서 사용 중인 서비스다. GitLab에서는 단순 레포지토리로서의 개념이 아닌 운영에도 많은 도움을 주는 관리도구들이 많아 DevOps를 구현하는데 좋은 환경이라고 한다.

DevOps in GitLab

깃랩에서 DevOps를 어떤 원칙과 방식으로 지원하고 구현하는지 알아보도록 하자.

DevOps 4대 원칙

  • 소프트웨어 개발 생명주기의 자동화
  • 협동과 소통
  • 지속적 향상 및 소모 자원의 최소화
  • 빠른 피드백 주기로 사용자 요구의 집중

해당 4대 원칙을 DevOps의 중요 요소로 Gitlab에서는 정의한다. 해당 원칙을 바탕으로 위에서 말한 DevOps의 목표인 개발과 운영간의 전환을 빠르게 한다.

DevOps 4단계

DevOps가 생기며 복잡해지는 경우가 있는데, 이는 두가지 요인 때문이다.

  • 모놀리식 아키텍처에서 MSA(Microservice Architectures)로의 변화
  • 관리도구와 프로젝트의 증가로 프로젝트 도구의 통합이 필요할 경우.

위의 요인을 위한 진화는 4가지 단계로 진행된다.

1. 자신만의 DevOps 구현
각 팀과 개발자들은 자신만의 DevOps 도구를 선택하게 된다. 이렇게 되면 다른 개발자들 및 팀들과의 협업에서 문제가 생길 수 있는데 이는 다른 팀들이 당신의 도구에 익숙하지 않기 때문이다.

2. Best-in-Class DevOps
이 단계에서는 서로 다른 도구들을 지양하고, 같은 도구들을 사용하도록 정의한다. DevOps 주기의 각 단계에서 선호하는 하나의 도구를 선택하고 정의함으로 조직간의 협업을 원할히 수행 할 수 있도록 돕는다. 하지만 도구들을 한정적으로 선택하며 소프트웨어를 변경해야되는 문제가 생길 수 있다.

3. DIY DevOps
위 문제를 해결하기 위해 DIY DevOps 단계를 수행한다. 개발자들은 DevOps 솔루션을 통합하기 위해 다시 개발을 하게 된다. 보통 개발과정에서 다른 개발 도구들과의 통합이나 팀들간의 통합이 고려되지 않기 때문에 해당 과정이 성공적으로 수행되는 경우가 드물다.

4. DevOps Platform
위에서 사용되는 문제들을 해결하기 위해 단일 어플리케이션 플랫폼(Gitlab)이 등장하게 되었다. 개발, 운영, 보안 등 전산 전반에 기여하는 팀들이 사용하는 도구들을 DevOps 주기(계획, 빌드, 보안, 배포)에 맞춰 end-to-end에서 융합 가능한 시스템으로 제공된다. 사용자 친화적인 UI, 융합된 코드 저장소에서 단일 코드 베이스로 제작되어 비효율적이고 신뢰성 낮은 DIY DevOps 환경 보다 신뢰성 높게 동작한다.

DevOps 생명주기

DevOps 생명주기는 아래의 10단계로 이루어져있다. 해당 단계를 통해 배포, 유지 보수 및 보안성을 유지하며 S/W가 개발되고 운영된다.

  1. 관리
  2. 계획
  3. 생성
  4. 검증
  5. Package
  6. 보안
  7. 배포
  8. 구성
  9. 모니터링
  10. 보호

DevOps 도구 및 구성 요소

  1. Source Code Management
  2. Agile Project & Portfolio Management
  3. CI(Continuous Integration)
  4. CD(Continuous Delivery)
  5. Shift Left Security
  6. Monitoring and Feedback
  7. Rapid Innovation

DevOps Engineer

DevOps Engineer는 모든 소프트웨어 개발 및 운영을 신경써야된다. 개발 과정을 업무 흐름에 녹여야 되고 자동화가 가능한 부분을 판단하고 적용해야하며 개발 코드들을 분석하고 테스트 해야한다. DevOps Engineer는 빌드, 배포, 업데이트 및 환경 구성 등 모든 전반적인 부분을 책임지고 관리해야한다. 따라서 개발 언어에 대한 이해가 필요하며, 기술자들간의 의사소통 능력 뿐만 아니라 사업 및 비즈니스에 대한 이해도 필요하다.

결국 DevOps의 목표는 빠르게 변하는 시장에 맞춰 효율적으로 개발하고 배포하는데 필요없는 소모를 줄이는 것이다.

Reference

GitLab-What is DevOps

댓글남기기