제품의 변경사항을 품질을 보장함과 동시에 프로덕션에 반영하는데 걸리는 시간을 단축하기 위한 실천 방법의 모음
개발(Dev)과 운영(Ops)의 합성어
개발과 운영의 경계를 허물고 통합하고자 하는 문화 혹은 철학
소프트워어 설계 -> 개발 -> 테스트 -> 배포 -> 운영 -> 지원
만약 조직의 규모가 크다면 각 단계 별 전문가로 구성된 기능 조직을 운영할 수 있다.
하지만 그만큼 의사소통이 많이 필요해지기 때문에 커뮤니케이션 문제가 발생하고 병목구간이 생기기 쉬워진다.
이를 해결하기 위해 DevOps가 생겨났는데 개발자가 작성한 코드에 대해 스스로 테스트하고 배포하고 운영에 참여할 수 있게 하여 소프트웨어의 생명주기 중 여러 단계에 참여할 수 있게 하였다.
때문에 효율성이 증가하게 되었다.
- 지속적 통합 : 개발자가 만든 변경사항에 대해서 빌드 및 테스트를 진행해본 후에 중앙 코드 저장소에 통합함으로써 빠르게 버그를 발견하고 제품의 품질을 보장할 수 있게 해주는 소프트웨어 개발 방법, 지속적 통합을 함으로써 DevOps에서 개발 결과물을 운영으로 전달하는 과정에 품질을 보장할 수 있다.
- 지속적 배포 : 개발결과물의 산출물을 자동으로 개발환경이나 운영환경까지 배포하도록 만든 자동화된 파이프라인
- 마이크로 서비스 : 서비스 자체가 너무 크면 빌드 자체에서 너무 오래 걸리므로 빌드 및 테스트 배포 단계에서 병목 현상 발생할 수 있다. 이렇게 커다한 서비스를 마이크로 서비스로 작게 작게 쪼개 빌드타임과 배포타임을 단축시킬 수 있다.
- IaC : InfraStructure를 코드로 관리하는 기술을 의미
서비스를 배포함에 있어서 인프라에도 변경사항이 필요하게 되는데 이러한 인프라 변경 사항을 자동화 시켜 빠르게 적용하기 위해서는 인프라 또한 자동화된 관리가 필요하기 때문이다.
- 모니터링과 로깅 : 개발자들에게 제품의 Metric과 로그 데이터를 중앙에서 확인할 수 있는 환경을 제공해줌으로써 개발자들이 직접 운영에 참여하여 제품에 문제 발생시 빠르게 문제를 해결할 수 있다.
- 소통 및 협업 : 슬랙, Jira, Confluence, Notion