클라우드/DevOps

DevOps - 데브옵스란?

박다큐 2021. 10. 19. 22:00

 

DevOps란 Development와 Operations가 합쳐서 생긴 개발 방법론이고, 전문가 사이의 소통, 협업, 통합 및 자동화를 강조하는 소프트웨어 개발 방법론이다.

 

DevOps의 사전 정의

  • 개발과 운영의 합성어
  • 개발자와 정보기술 간의 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화
  • 서비스를 빠른 시간에 개발 및 배포하는 것을 목적
  • 개발자와 운영자의 소통, 협업 및 통합을 강조하는 문화, 방법론, 프로세스, 도구 모두를 의미

 

소프트웨어를 개발하기 위해서는 개발자와 시스템을 운영하는 운영자가 필요하다.

  • 개발자는 고객의 요구 사하을 빠르게 수용해서 서비스를 개발하고 빠르게 적용하고 확인되길 원한다.
  • 운영자는 제공될 서비스가 정확하게 동작하며, 테스트되었고 문제가 없이 안정적으로 동작하길 원한다.

 

개발팀과 운영팀은 부서 간의 목표하는 바가 서로 다르다.

  • 개발팀 : 빠르게 변화하는 경쟁 환경에 대응
  • 운영팀 : 고객에게 안정적이고 신뢰할 수 있는 서비스 제공
  • 이러한 목표 차이는 성과를 달성하는데 방해가 되며 소프트웨어 서비스의 품질 저하와 비즈니스 경쟁력 악화시키는 요소

 

데브옵스의 시작이 개발팀과 운영팀 간의 갈등 해소를 위한 것이며 해결을 위해서는 개발팀과 운영팀의 협업과 소통 및 통합, 문화적 개선 등이 수반되어야 한다.

 


 

애자일 방법론

  • 소프트웨어 개발 방법에 있어 아무런 계획이 없는 개발 방법과 계획이 지나치게 많은 개발 방법들 사이에서 타협점을 찾고자 하는 방법론
  • 고전적 개발 방법론은 초기 계획에 너무 의존하며 추가 요구사항 및 변화에 적절한 대응 불가
  • 반대로 계획을 수립하지 않고 개발할 경우 앞으로의 일을 예측하기 어려워 효율적이지 않음
  • 애자일 방법론은 2, 3번에서 적절한 타협점을 제시하는 방법론
  • 다른 방법론과 가장 큰 차이점은 문서 통합이 아닌 실질적인 코드 통합 방법론
  • 폭포수 방법론의 해결책으로 여겨짐

 

애자일 방법론 개발 원칙 12가지

  • 최우선 순위 - 가치 있는 소프트웨어를 지속적으로 전달해 고객 만족 최우선
  • 개발의 후반부 일지라도 요구사항이 들어오면 환영해라. - 고객의 경쟁력에 도움이 되게 한다.
  • 작동하는 소프트웨어를 자주 전달하라. - 2주 - 2달, 더 짧은 기간을 선호해라
  • 비즈니스 쪽의 사람과 개발자는 함께 일해야 한다.
  • 동기가 부여된 개인을 중심으로 프로젝트를 구성해라
  • 정보를 교환하는데 가장 효율적이고 효과적인 방법은 면대면 대화
  • 작동하는 소프트웨어가 진척의 주된 척도이다.
  • 지속 가능한 개발을 장려한다. 일정한 속도를 계속 유지할 수 있어야 한다.
  • 기술적 탁월성과 좋은 설계에 대한 지속적 관심이 민첩성을 높인다.
  • 단순성 최고, 즉 안 하는 일의 양을 최대화하는 기술이 필수적
  • 최고의 아키텍처, 요구사항, 설계는 스스로 조직된 팀에서 나옴
  • 팀이 어떻게 더 효과적일지 행동을 조율하고 조정한다.

 

DevOps를 사용하면 다음과 같은 효과를 얻을 수 있다!

  • 빠르고 정확하게 운영 환경에 코드를 배포할 수 있다.
  • 배포 프로세스 단계별로 빠른 피드백 루프를 생성하여 빠르게 피드백을 받을 수 있다.
  • 자동화를 통해 보다 빠르고 효과적으로 업무 진행이 가능하다.
  • 원하는 기능과 고객의 요구사항을 독립적으로 전달하고 배포할 수 있다.
  • 신규 제품이나 기능의 출시와 이에 대한 피드백을 보다 효과적으로 진행할 수 있다.

 

DevOps의 문화적 구성요소는 4가지로 구분된다.

  1. 배려와 존중의 환경 구성
    1. 개발자는 운영자를 존중하고 운영자는 개발자를 존중하는 서로 배려와 존중하는 환경이 필요
    2. 또한 서로 일을 떠넘기지 않으며 이슈가 발생 시 문제 해결을 위해 서로 도움을 주는 것이 매우 중요하다.
  2. 자유로운 토론 환경 조성하기
    1. 문제로부터 숨지 않고 오픈마인드로 커뮤니케이션을 수행하여 개발자와 운영자 간의 자유로운 토론과 대화가 장려되어야 한다.
    2. 또한 진행되고 있는 일이나 향후 계획을 공유하는 것이 중요하다.
    3. 필요사항에 대해 협업하는 분위기를 조성하는 것이 중요하다.
  3. 남 탓하지 않기
    1. 남 탓을 하지 않고 서로 협력하여 문제를 빠르게 해결할 수 있다.
    2. 책임은 개발팀과 운영팀 모두에게 필요
  4. 완료되었다고 해서 책임 회피하지 않기
    1. 개발팀은 배포되었다고 하여 책임이 끝나지 않으며 개발팀과 운영팀은 서로 개발과 운영에 참여하여 상호 업무에 대한 이해와 협력이 필요하다.

 

DevOps를 위한 기술적 구성 요소는 네 가지로 정리할 수 있다.

1. 코드 기반 인프라 관리

- 프로그래밍형 인프라라고도 하는 IaC는 인프라 구성을 소프트웨어를 프로그래밍하는 것처럼 처리하는 방식

- 결과적으로 애플리케이션을 작성하는 작업과 애플리케이션이 실행되는 환경을 구현하는 작업을 코드 기반으로 관리할 수 있다.

- 아모전 및 MS, Google 등 대부분의 클라우드 업체는 Iac기반의 인프라 서비스를 제공

2. 버전 관리

- 개발 시간이 지남에 따라 발생되는 소스코드의 변경 사항을 개발팀이 관리하는 데 도움을 주는 소프트웨어 도구로 데이터베이스에 소스코드의 모든 수정 사항을 저장하고 추천한다.

- 모든 개발 프로젝트에서 소스코드는 보호되어야 하는 귀중한 자산

- 개발팀에서 소스코드는 문제 해결을 위한 지식과 이해의 저장소로 개발자들의 노력을 통해 수집되고 정제된다.

- 사람의 실수와 의도하지 않은 결과로부터 소스코드를 보호한다.

3. One-Step 빌드와 배포

- 빌드 작업은 개발팀 내 여러 개발자가 개발한 소스를 버전 관리 시스템을 이용하여 통합하고 통합된 소스를 컴파일/테스트/정적 분석 등을 실시해 실제 동작 가능한 S/W로 변환하는 작업

- 버전 관리 시스템에 있는 소스코드를 가져와 컴파일하여 실행 가능한 하일로 만드는 일련과정을 수행

- 배포 작업은 개발되어 빌드된 파일을 개발 서버 또는 운영서버에 등록하여 신규로 개발되거나 변경된 프로그램을 사용할 수 있게 전달하는 과정

- 배포 자체는 단순한 행위일지 모르지만 중요성은 매우 높은 작업 - 배포 과정에서 장애나 실수는 애플리캐이션의 장애로 연결됨

- 자동화 서비스 CI/CD(Continuous Integration/Continuous Delivery)를 이용한 자동화 시스템

4. 장애 발싱 시 인프라의 빠른 배포

- DevOps 기반의 인프라 환경은 문제 발생 시 기존 인프라를 빠르게 재배포가 가능한 환경으로 제공

- 클라우드 기반 환경에서는 PaaS/IaaS 기반 인프라에서 손쉽게 재구성 및 배포를 제공

 

 

* 아마존의 데브옵스 정리 *

https://aws.amazon.com/ko/devops/what-is-devops/

 

DevOps란 무엇입니까? – Amazon Web Services(AWS)

소프트웨어와 인터넷은 쇼핑에서 엔터테인먼트 그리고 뱅킹에 이르기까지 전 세계와 산업을 변화시켰습니다. 이제 소프트웨어는 비즈니스를 지원하는 것에 그치지 않고, 비즈니스의 모든 부분

aws.amazon.com

 

 

 

 

 

 

 

 

 

'클라우드 > DevOps' 카테고리의 다른 글

DevOps - IaaC(Infra as a Code)  (0) 2021.10.20