저번 글에서 클라우드에 대한 내용을 다루었는데, 클라우드가 뭔지 대충 알았으니 직접적인 프로젝트 주제인 DevOps에 대해 찾아보았다..!! 이번에 DevOps 내용들을 정리하면서 CI/CD에 대해 추가적으로 찾아보았고 이해에 큰 도움이 되었던 것 같다!!
DevOps란?
DevOps란 Development와 Operations의 합성어로 개발과 운영이 통합된 환경을 의미
위의 사진은 DevOps를 검색하면 많이 보이는 Lifecycle인데, 사진들마다 조금씩 내용이 다르다는 것을 볼 수 있음
⇒ 이는 조직의 목표에 따라 달라지기 때문
DevOps의 등장 배경 (왜 개발과 운영을 합치게 되었지?)
DevOps는 2000년대 후반 IT 업계에 등장하였으며, 소프트웨어 개발과 운영의 분리로 인한 여러 문제를 해결하기 위해 애자일(Agile) 방법론과 함께 발전
💡 개발과 운영이 분리된 환경에서 생긴 문제는 뭐지?
일반적인 개발 운영 체계는 개발팀에 의해 개발이 끝나면, 시스템은 테스트를 거쳐서 운영팀에 이관되고, 운영팀은 해당 시스템을 배포 및 관리 운영하는 체계이다. 이때 운영팀에 이관된 시스템은 개발팀이 일절 관여하지 않게 되고, 운영팀에 의해서 유지된다.
때문에 소통 단절로 인한 프로젝트 진행 속도 저하, 긴급 수정사항 발생 시 느린 대처와 같은 상황이 발생하고, 이러한 문제들이 생기는 과정에서 개발팀과 운영팀 간의 갈등도 생기게 된다.
애자일(Agile) 방법론이란, 본래 소프트웨어 개발 방법론 중 하나로 서비스 기능 테스트-릴리즈-피드백-기능 추가 및 개선사항 반영 과 같은 짧은 주기를 빠르게 반복하는 방식
⇒ 이는 또 다른 기존 개발 방법론인 Waterfall과 반대되는 개념으로, Waterfall은 비교적 긴 주기로 프로젝트 계획을 세우고, 전체 기능이 모두 구현된 완성품을 한 번에 내놓는 방식
DevOps는 개발과 운영의 협업을 촉진함과 동시에 애자일(Agile) 방법론을 바탕으로 빠른 피드백과 유연한 개발 프로세스를 강조함
DevOps의 장점
- 개발팀과 운영팀의 협업 및 커뮤니케이션
- 기존에 개발팀과 운영팀 사이의 분리된 환경으로 갈등이 생겼던 문제를 해결
- 지속적인 통합과 배포(CI/CD)를 통한 품질 향상 및 시장 변화에 신속한 대응
- 자동화
- 시간 절약과 인적 오류가 감소되는 등의 효율성이 극대화
- 지속적인 모니터링으로 개선점을 찾아내는 피드백
DevOps 도입절차
- 현재 프로세스 분석
- 기존 시스템을 분석하여 문제점을 파악
- 목표 설정
- 조직의 목표와 일치하는 DevOps 도입 목표 설정 ⇒ DevOps 도입의 방향성 제시
- 기술 적용
- IT 인프라 현황에 적절한 CI/CD 도구를 선택 (AWS, Azure 등)
- 최적화
- DevOps 도입 후에도 지속적인 개선 과정을 통해 최적화
CI/CD란?
지속적인 통합과 배포를 통해 애플리케이션 개발 단계를 자동화하여 고객에게 보다 짧은 주기로 서비스를 제공하고 개선하는 방법
CI(Continuous Integration) = 지속적인 통합
- Code를 통합하는 과정에서 개발자들의 커뮤니케이션 후 Github와 같은 소스 저장소에 저장됨
- Build 과정을 통해 실행 가능한 패키지 형태로 만들어짐
- Test 과정을 통해 실행 파일의 동작 여부를 점검
위와 같이 지속적인 통합을 하게 될 경우, 빠른 버그 해결과 소프트웨어의 품질이 향상되며, 새로운 소프트웨어 업데이트를 검증 및 릴리스하는 데 시간이 절약된다는 장점이 존재
CD(Continuous Delivery / Continuous Depolyment) = 지속적인 배포
- Release/Deploy를 진행 (Test에서 문제가 없을 경우)
- Operate
- Monitor
위와 같은 파이프라인을 통해 진행된다면 개발자는 언제든 즉시 배포가 가능해짐
기업마다 이러한 CI/CD 순서와 내용들은 조금씩 다르며 해당 내용은 이 유튜브 영상에서 참고하여 작성하였다.
CI/CD 도구들
대표적인 오픈소스 CI/CD 도구들은 아래와 같다.
Code
- Git
- Eclipse
- Jira
Build
- Maven
- Apache Ant
- Gradle
Test
- Se
- Junit
Release
- Jenkins
- Bamboo
Deploy
- Ansible
- Terraform
- Puppet
- CHEF
- Saltstack
Operate
- Nagios
- Splunk
- Sensu
- New Relic
- Elastic Search
참고문헌
https://aws.amazon.com/ko/devops/what-is-devops/
https://www.elancer.co.kr/blog/detail/739
https://bcho.tistory.com/815?category=502863
https://www.youtube.com/watch?v=onOy7WiguMI
https://www.ibm.com/kr-ko/topics/application-lifecycle-management