[DevOps] DevOps와 CI/CD?
DevOps란?
- 개발팀과 운영팀이 단일팀으로 병하바되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명주기에 걸쳐 작업하고 단일 기능에 한정되지 않은 광범위한 기술을 개발하는 것
- 소프트웨어 개발 방법론의 하나
- 개발(development)과 운영(operation)을 결합한 혼성어
- 2008년 애자일 컨퍼런스에서 앤드루 클레이 쉐이퍼(Andrew Clay Shafer)와 패트릭 드부와(Patrick Debois)가 "애자일 인프라스트럭처"에 대해 논의하며 처음으로 사용
- 셰프(Chef)나 퍼펫(Puppet)과 같은 인프라 구성관리 자동화 툴을 사용
애자일 소프트웨어(agile software) 개발과 지속적 통합(continuous integration)
애자일 소프트웨어 개발 방법
- 계획과 문서를 기반으로 개발 모형이나 모델에 따라 앞을 예측하며 개발하는 것이 아니라, 실질적인 코딩을 기반으로 일정한 주기에 따라 계속적으로 프로토타입을 형성하고 필요한 요구 사항을 파악하며 이에 따라 즉시 수정사항을 적용하여 결과적으로 하나의 큰 소프트웨어를 개발하는 적응형(adaptive style) 개발 방법
지속적 통합(continuous integration)
- 개발 당시의 코드(baseline code)와 개발 완료 후의 차이가 극심하여 통합시 다양한 변화와 의존성 문제 해결에 개발 시간보다 더 많은 시간이 소요되는 문제를 해결하기 위해, 통합 작업을 초기부터 계속적으로 자주 수행하여 지속적으로 소프트웨어의 품질 제어를 적용하고자 하는 것
DevOps이점
(1) 속도
(2) 신속한 제공
(3) 안정성
(4) 확장
(5) 협업강화
(6) 보안
CI/CD 지속적 통합과 지속적 배포
지속적 통합(Continuous Integration) , 지속적 배포(Continuous Deployment)
CI란? 빌드/테스트 자동화 과정, 개발자를 위한 자동화 프로세스, CI를 구현할 경우 애플리케이션에 대한 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합
커밋할 때마다 빌드, 테스트가 이루어져 동작을 확인하고 변경으로 인해 문제가 없게 만든다
CD란? 배포 자동화 과정 , 코드 변경이 파이프라인을 성공적으로 통과하면 코드가 자동으로 배포됨
CircleCI,Jenkins 사용가능
CI/CD 적용 전 후 비교
(전)
1. 개발자들이 코드 수정
2. 각자의 Branch 코드 수정 후 Integration
3. 에러가 있으면 디버깅하며 삽질...
4. 해결해도 배포
(후)
1. 개발자들이 코드 수정
2. 각자 Branch에서 코드 PUSH -> CI서버에서 알아서 Build, Test, Lint 실행 후 결과 전송
3. 결과 전송받고 에러 있으면 에러 부분 수정하고 코드 Master Branch에 Merge
4. Master Branch에 코드 Merge후 Build,Test 정상적 수행 -> CI서버에서 알아서 Deploy과정 수행
AWS CodeBuild : 코드 소스를 컴파일하는 단계부터 패키지를 개발하여 배포하는 단계까지 마칠 수 있는 완전 관리형의 지속적 통합 서비스
AWS CodeCommit : 안전한 Git 기반 리포지토리를 호스팅하는 완전 관리형 소스제어 서비스
AWS CodeDeploy : 다양한 컴퓨팅 서비스에 대한 소프트웨어 배포를 자동화하는 완전 관리형 배포 서비스
AWS CodePipeLine : 릴리스 파이프 라인을 자동화하는데 도움이 되는 완전 관리형 지속적전달서비스
GitHub Action : Github 저장소를 기반으로 소프트웨어 개발 Workflow를 자동화 할 수 있는 도구
Jenkins : 소프트웨어 개발시 지속적 통합 서비스를 제공하는 도구
Circle CI : 소프트웨어 개발시 형상관리 시스템(Github, Github Enterprise)과 연계하여 Automated-build/Deployment 기능을 지원
ArgoCD : Kubernetes를 위한 GitOps의 지속적인 배포도구
출처)
1. [네이버 지식백과] 데브옵스 [DevOps] (두산백과)