DevOps란?
역할
애플리케이션은 개발, 운영, 보안 등 여러 분야가 협업하여 개발된다. DevOps는 개발과 배포 과정을 지원하는 역할을 하는 사람, 팀, 문화 혹은 시스템이다.
목표
- 릴리스 시간 단축
- 릴리스 시간의 단축은 더 잦은 업데이트를 통해 빠르게 변화하는 요구 사항에 유연하게 대응할 수 있게 한다.
- 시스템의 안정성 유지
- 애플리케이션의 변경 사항을 추적하며 안전하게 업데이트 할 수 있게한다.
- 개발 인프라 일관성 유지, 자동화
- 시스템 구성을 자동화하여 복잡한 환경을 대규모로 운영할 수 있게한다.
- 협업 지원
- 개발, 운영, 보안 등 여러 분야가 협업하기 쉬운 환경을 구성한다.
방법
microsoft, aws 등에서 소개하는 DevOps 방법은 다음과 같다.
- 지속적 통합/전달 (CI/CI)
- CI/CI는 빌드 및 테스트를 자동화하고 변경 사항을 환경에 맞춰 배포한다.
- 마이크로 서비스
- 마이크로 서비스는 애플리케이션을 여러 작은 서비스의 집합으로 구축하는 방법이다.
- 다양한 프레임 워크, 언어를 이용하여 마이크로 서비스를 만들고, 통합하여 애플리케이션을 제공한다.
- Agile
- Agile은 짧은 주기로 디자인, 개발, 테스트를 반복하는 방법이다.
- 짧은 주기의 개발은 요구사항이 변경되었을 때 대처하기 쉽다.
- 코드형 인프라(IaC)
- IaC는 시스템 리소스를 코드를 통해 관리한다.
- 시스템 리로스가 코드를 통해 관리되면 수동으로 환경을 구성할 필요 없이, 최신 패치와 업데이트가 가능해진다.
- 구성 관리
- 시스템 구성 변경될 위험을 줄인다.
- 시스템 구성을 템플릿화 하여 쉽게 환경을 구성할 수 있다.
- 모니터링
- 애플리케이션의 성능과 상태, 사용자에게 주는 영향을 모니터링한다.
도구
컨테이너
컨테이너는 시스템의 다른 부분과 분리된 프로세스 집합이다. 컨테이너를 통해 환경을 구성하면 쉽게 환경을 일관성 있게 유지할 수 있다.
종류로는 Docker, Harbor, Packer등이 있으며 Docker가 널리 쓰인다.
쿠버네티스
쿠버네티스는 컨테이너 작업을 자동화하는 플랫폼이다.
자동 확장, 수명주기 관리, 자가 복구, 로드 밸런싱 등의 역할을 수행한다.
Helm, Karpenter 등 쿠버네티스 활용을 톱는 도구들이 있다.
CI/CD
CI/CD를 위해 사용하는 도구는 다음과 같은 역할을 한다.
- 컴파일 오류 검출
- 자동화 테스트
- 성능 변화 감시
- 배포작업 CI/CD를 위한 도구 종류
- Jenkins
- Github Action
- Argo CD
- AWS CodeDeploy
- AWS CodePipeline
- AWS CodeBuild
- Gitlab