PaaS/CI CD

CI와 CD는 무엇일까?

armyost 2021. 12. 21. 06:11
728x90

Continuous Integration을 통하여 아래의 효익을 추구한다. 

• Developers push the code to a code repository often (GitHub / CodeCommit / Bitbucket / etc…)

• A testing / build server checks the code as soon as it’s pushed (CodeBuild / Jenkins CI / etc…)

• The developer gets feedback about the tests and checks that have passed / failed

• Find bugs early, fix bugs

• Deliver faster as the code is tested

• Deploy often

• Happier developers, as they’re unblocked

 

Continuous Delivery를 통하여 아래의 효익을 추구한다.

• Ensure that the software can be released reliably whenever needed.

• Ensures deployments happen often and are quick

• Shift away from “one release every 3 months” to ”5 releases a day”

 

Continuous Delivery vs Continuous Deployment 의 차이는 무엇일까?

Continuous Delivery:

• Ability to deploy often using automation

• May involve a manual step to “approve” a deployment

• The deployment itself is still automated and repeated!

 

Continuous Deployment:

Full automation, every code change is deployed all the way to production

No manual intervention of approvals

 

과거의 개발 프로세스는 아래와 같은 문제들이 있었다

  • 단일 개발단위가 무겁고, 생명주기 관리 빈도가 낮으면 단일 프로세스에도 개발본과 운영본의 코드차이가 커 개발생산성이 떨어진다.   

  • 개발완료시까지의 장시간으로 결과물을 사용자와 리뷰하는 빈도가 낮다. 개발이 완료된 후에 막상 사용자의 요구사항과 다를 수 있음

 

 

사실 위와 같은 체계가 잡힌건 문화적 요소도 영향을 끼쳤다. 

  • 잦은 미팅으로 요구사항이 계속 바뀌거나 범위가 늘어나는 요구사항이 발생
  • 올바른 회의 문화가 정착되지 않음
  • 본인 업무 완료를 공개하기 꺼림

 

그리고 기술과 프로세스적 요소도 있었다.

  • 개발조직과 운영조직이 서로 경쟁관계에 있다. 
  • 업무의 결합도가 강해 에자일이 힘들다.
  • 업무시간에 배포를 허락하지 않는다.
  • 기술부채에 대한 관리가 없다.

 

 

DevOps를 이때쯤 고려하기 시작한다

  • 배포가 무거워져 배포성공까지 3일, 1주, 2주 시간이 오래 걸리다보니 고객의 피드백 반영에 시간이 걸림
  • 개발, 운영 조직의 뭔지모를 문제로 사업이 정체됨
  • 시스템이 비대해져 하나를 수정하면 영향이 다른 곳까지 미침

 

DevOps가 생기기 이전에 ALM (Application LifeCycle Management) 은 있었고, 이러한 것이다. 

요구사항 분석, 모델링, 개발, 빌드, 테스트를 비롯한 소프트웨어 개발의 수명주기 활동들을 다음을 통해 조율하는것

  • 추적성(Traceability) : 산출물과 활동 간의 연관 관계를 추적할 수 있어야 함
  • 프로세스 강요(Process Enactment) : 일관적이고 적합한 프로세스가 강요되어야 함
  • 가시성(Visibility) : ALM 활동 전반에 대한 진행 상황을 볼 수 있어야 함

 

 

DevOps의 목표

  • 소규모로 구성된 전담 팀 조직구성
  • 기능을 독립적, 자율적으로 구현할 수 있는 프로세스
  • 프로덕션과 유사한 환경에서 품질과 정확성을 검증 프로세스
  • 프로덕션으로 빠르고 안전하게 배포하는 기술 및 프로세스

 

DevOps 필수요소

조직
개발팀 및 개발영역의 분할

 



프로세스
짧은 주기의 개발(애자일)
지속적인 빌드
지속적인 테스트
기술 부채 낮추기 : 버그캡

기업문화
피드백을 통한 학습 : 비난없는 포스트모템

Application 현대화(아키텍처)
마이크로 서비스

아키텍처 수직분할

 

시스템과 도구