데브옵스란
데브옵스 (DevOps)
데브옵스란 소프트웨어의 개발(Development)과 운영(Operations)의 합성어이며, 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록, 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합이다.
대부분의 서비스가 웹 기반이며, 애자일 방법론에 대한 관심도가 높아지면서 빈번한 배포가 필요해졌다. 개발팀은 서비스 개발에 집중하고, 운영팀은 보안 및 인프라 구축에 집중하기 때문에 이러한 빈번한 배포 전략이 유연하게 동작할 수 없다. 이러한 점을 해결하기 위해 개발팀과 운영팀이 합쳐져 개발, 테스트, 배포, 운영에 이르는 라이프사이클을 개발하게 되는데, 이를 데브옵스라고 한다.
데브옵스의 이점
- 속도
- 작업 속도가 빨라지면서 시장 변화에 더 빠르게 대처하고 이로 인한 비즈니스 성과를 창출할 수 있다.
- 신속한 제공
- 새로운 기능 릴리즈와 버그 수정을 빠르게 할 수 있어, 고객의 요구에 더 빠르게 대응하고 경쟁 우위를 점할 수 있다.
- 안정성
- 지속적 통합, 지속적 전달, 모니터링, 로깅을 통해 안정적인 서비스 품질을 고객에게 제공할 수 있다.
- 확장
- 규모에 따라 인프라와 개발 프로세스를 운영 및 관리한다.
- 협업 강화
- 개발자와 운영팀이 긴밀하게 협력하고, 책임을 공유하며, 워크플로를 결합한다. 이를 통해 비효율성을 줄이고 시간을 절약한다.
예: 개발팀과 운영팀 간의 인도 기간 단축
- 개발자와 운영팀이 긴밀하게 협력하고, 책임을 공유하며, 워크플로를 결합한다. 이를 통해 비효율성을 줄이고 시간을 절약한다.
- 보안
- 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용가능
데브옵스 툴체인
데브옵스 툴체인에 사용되는 툴들의 목표는 소프트웨어 전송 워크플로의 다양한 단계를 간소화, 단축 및 자동화하는 것이다. 또한 이러한 툴 중 다수는 자동화, 협업 및 개발-운영 팀 간의 통합에 대한 핵심 데브옵스 원칙을 손쉽게 준수할 수 있도록 한다. 다음은 데브옵스 라이프사이클 단계에서 사용되는 툴들의 예시이다.
- 계획
- 계획 단계는 비즈니스 가치 및 요구사항을 정의하는 데 도움이 된다.
- 문제를 추적하고 프로젝트 관리를 위해 Git 또는 Jira등이 사용된다.
- 코딩
- 코딩 단계에는 소프트웨어 설계 및 소프트웨어 코드 생성이 포함된다.
- GitHub, GitLab, Bitbucket 또는 Statsh 등이 있다.
- 구축
- 구축 단계에서는 소프트웨어 빌드 및 버전을 관리하고 자동화된 툴을 사용하여 코드를 컴파일하고 패키징하여 향후 제품 릴리즈에 제공한다.
- Docker, Ansible, Puppet, Chef, Gradle, Maven 등이 있다.
- 테스트
- 테스트 단계에서는 최적의 코드 품질을 보장하기 위해 지속적인 테스트(수동 또는 자동)를 수행한다.
- JUnit, Codeception, Selenium, Vagrant, TestNG 등이 있다.
- 배포
- 배포 단계에는 제품 릴리즈를 운영 단계로 관리, 조정, 예약 및 자동화하는 데 도움이 되는 툴이 포함될 수 있다.
- Jenkins, Kubernetes, Docker 등이 있다.
- 운영
- 운영 단계에서는 운영 중인 소프트웨어를 관리한다.
- Anabilities, Puppet, PowerShell, Chef, Salt 등이 있다.
- 모니터링
- 모니터링 단계에서는 운영 환경의 특정 소프트웨어 릴리즈에서 발생하는 문제에 대한 정보를 식별 및 수집한다.
- New Relic, Datadog, Grafana 등이 있다.
데브옵스 사례 (DevOps Practices)
데브옵스 사례는 지속적인 개선 및 자동화 개념을 반영한다. 많은 사례가 하나 이상의 개발 주기 단계에 중점을 둔다. 사례는 다음과 같다.
- 지속적인 개발
- DevOps 라이프사이클의 계획 및 코딩 단계에 걸쳐 적용되며, 버전 관리 메커니즘이 관련될 수 있다.
- 지속적인 테스트
- 애플리케이션 코드를 작성하거나 업데이트하는 동안 자동화되고 사전 예약된 코드 테스트를 포함한다.
- 이러한 테스트를 수행하면 코드를 더 빠르게 프로덕션에 제공할 수 있다.
- 지속적인 통합 (CI)
- 빌드와 테스트를 수행하며, 서비스의 품질관리를 위해서 지속적인 빌드와 테스트 과정을 지원한다.
- 지속적인 제공
- 테스트 후 사전 운영 또는 스테이징 환경으로 코드 변경을 제공하는 작업을 자동화한다.
- 지속적인 구축 (CD)
- 빌드 단계 이후의 소프트웨어의 배포를 자동화한다.
- Docker, Kubernetes 및 기타 컨테이너 기술을 사용하면 서로 다른 구축 플랫폼 및 환경에서 코드의 일관성을 유지하여 지속적인 구축을 지원할 수 있다.
- 지속적인 모니터링
- 작동중인 코드와 이를 지원하는 기본 인프라에 대한 지속적인 모니터링과 관련된다.
- 코드형 인프라
- 환경 설정을 모니터링하고, 변경 사항을 추적하며, 설정의 롤백을 간소화할 수 있다.
면접에 나올 수 있는 질문
- 데브옵스란 무엇이고, 장점은 무엇인가?
참고
- 데브옵스 - 위키피디아
- DevOps란 무엇입니까? - AWS
- 데브옵스 DevOps란 무엇일까요?
- 데브옵스 (DevOps) - KENDRICK님 블로그
- What is DevOps - NetApp
기여자
Junho Moon
📦