서로 다른 조직이 연계하여 협력하는 문화. DevOps
DevOps란 무엇일까? 🤔
애자일(Agile)한 방식으로 협업한다면, 소프트웨어 개발의 생산성과 효율성을 높일 수 있습니다. 그렇기 때문에 많은 기업들이 애자일한 조직 문화를 정착시키기를 원했고, 전환을 시도했습니다. 결과적으로 애자일 프로세스에 의해 소프트웨어 개발 속도가 빨라지고, 사용자에게 빠르게 제공할 수 있게 되었습니다. 하지만 소프트웨어 개발 속도가 빨라지고, 배포가 잦아지는 과정 속에서 애자일이 커버하지 못하는 부분들이 생기기 시작했습니다.
하나의 소프트웨어를 여러 팀(개발, 운영, 보안과 같은)이 다루기 때문에, 이 안에서 간극이 발생한 것이 대표적입니다. 사용자의 요구 사항에 맞춰 빠르게 새로운 변화를 적용하고 시도하는 개발팀과, 장애 없이 안정적인 운영을 원하는 운영팀의 입장은 너무나 달랐습니다. 이처럼 하나의 소프트웨어에 대해 각 팀이 다른 업무를 수행하기 때문에, 각 팀 사이에는 생각의 차이가 발생하고, 병목 현상(속도 차이)까지 발생합니다. 그렇기에 이런 간극을 줄이기 위해, DevOps라는 개발과 운영을 어우르는 방법론이 등장합니다. DevOps는 개발을 뜻하는 Development와 운영을 뜻하는 Operations의 합성어인데, 단순히 개발과 운영을 통합하는 개념만은 아닙니다.
DevOps의 5가지 철학 📝
- 문화(Culture) - DevOps를 통해 하나의 문화를 만들어 나갑니다.
- 자동화(Automation) - 자동화를 통해 생산성과 효율성을 높입니다.
- 측정(Measurement) - 변경된 모든 것을 측정하여, 예측하고 개선해 나갑니다.
- 공유(Sharing) - 지식을 공유하고, 문제를 함께 해결하며 발전해 나갑니다.
- 축적(File up & Pile up) - 모든 기록을 축적하여 자산을 만들어 나갑니다.
데브옵스는 사용자의 요구 사항을 효율적으로 만족시키기 위해, 업무를 자동화하고, 변경된 모든 것을 측정하며 함께 공유합니다. 그리고 이러한 과정 속에서 발생한 결과물들을 축적해나가는 문화를 만드는 것입니다. 👏
DevOps 툴체인 🔥
데브옵스 툴체인(Toolchain)은 데브옵스 문화를 효과적으로 적용하기 위한 방법론으로, 데브옵스 적용이 가능한 툴들을 묶어 하나의 체인 형식으로 만든 개념입니다. 툴체인의 목표는 파이프라인의 다양한 단계를 간소화하고 단축하여 자동화하는 것입니다. 지속적인 통합(CI)과 지속적인 제공/배포(CD)를 수행하기 위해 다양한 툴을 엮어, 자동화를 시도함으로 팀 간의 기술적 차이를 해결합니다. 결과적으로 원활한 소통과 협업을 도와, 데브옵스의 원칙을 손쉽게 준수할 수 있도록 합니다.
- 계획: 알려진 문제를 추적(분석)하고, 프로젝트 관리를 수행합니다.
- 개발: 소프트웨어를 설계하고, 코드를 작성해 자주 병합(Merge)합니다.
- 빌드: 소프트웨어의 버전을 관리하고, 자동화 도구를 사용해 문제가 없는지 파악합니다.
- 테스트: 빌드한 기능이 문제가 없는지 요구 사항에 따라 검증합니다.
- 릴리즈: 완성된 결과물을 개발/품질 서버에 이관합니다.
- 배포: 서비스할 운영 서버나 클라우드에 배포합니다.
- 운영: 실제 업무에 적용하고, 운영 중인 소프트웨어를 관리합니다.
- 모니터링: 안정적인 운영을 위해 지속적으로 모니터링하고, 개선/오류 사항을 대비합니다.
CI/CD
CI는 지속적 통합(Continuous Integration), CD는 지속적 제공(Continuous Delivery) 또는 지속적 배포(Continuous Deployment)라고 합니다. Netflix, Facebook과 함께 많은 회사들이 CI/CD 개발 프로세스를 사용하고 있는데, 이들은 개발부터 배포까지를 자동화하여 사용자에게 빈번하게 제공하기 위해 존재합니다. 코드를 조금만 수정했는데도 반복된 작업(빌드, 테스트)을 하는 것은 낭비이기 때문에 자동화를 한다면 효율성을 확보하 수 있고, 운영팀의 입장에서도 배포를 위해 검증하는 단계를 간편하게 만들 수 있습니다.
CI (Continous Integration)
- 코드 변경 사항을 주기적으로 빈번하게 메인에 Merge 해야 합니다.
- 일은 최대한 작은 단위로 나누어, 메인에 통합해 나가야 합니다.
- 통합을 위한 단계(빌드, 테스트, Merge)를 자동화합니다. (통과하면 배포를 위해 사용 가능)
- 주기적으로 Merge 하기 때문에, 개발 생산성이 향상됩니다.
- 자동화 스크립트에 의해 문제점을 빠르게 찾아 버그 수정이 용이하고, 코드 퀄리티가 향상됩니다.
CD (Continuous Delivery)
- 통합된 저장소를 릴리즈(Release) 하기 전에 운영팀이 수동으로 품질을 검증합니다.
- 수동으로 검증하고, 배포하는 것을 지속적 제공이라 합니다.
CD (Continuous Deployment)
- 수동으로 품질을 검증하고, 배포하는 과정도 자동화하는 것을 지속적 배포라 합니다.
이처럼 CI/CD는 다수의 팀에서 수행되는 업무들을 자동화하고 서로 연결하는 것이라 볼 수 있습니다.
참고 자료 📖
'💻 컴퓨터공학 > 소프트웨어 공학' 카테고리의 다른 글
애자일 방법론과 스크럼, 칸반 (0) | 2021.10.11 |
---|---|
폭포수 모델 (Waterfall) (0) | 2021.10.11 |
소프트웨어 공학이 필요한 이유 (0) | 2021.10.10 |
댓글
이 글 공유하기
다른 글
-
애자일 방법론과 스크럼, 칸반
애자일 방법론과 스크럼, 칸반
2021.10.11 -
폭포수 모델 (Waterfall)
폭포수 모델 (Waterfall)
2021.10.11 -
소프트웨어 공학이 필요한 이유
소프트웨어 공학이 필요한 이유
2021.10.10