오늘은 DevOps가 무엇인지 좀 더 깊게 공부해 보도록 하겠다.
DevOps의 개념에 대해서
데브옵스(DevOps) 는 무엇일까
데브옵스(DevOps)는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직 간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
출처 :
https://ko.wikipedia.org/wiki/%EB%8D%B0%EB%B8%8C%EC%98%B5%EC%8A%A4
전통적으로 소프트웨어가 개발되고 검증되고 배포되고 유지보수되는 과정에서 각 개발팀이나 파트별로 역할이 나누어져 있었다. 그래야 전문적으로 각 분야에 집중할 수 있고 각자의 수준을 높혀서 품질을 높이는 전략을 택해왔던 것 같다. 이는 여전히 대부분의 회사가 그렇게 운영되고 효율적인 업무 분담과 각 분야의 커리어를 관리하는 측면에서 매우 중요한 개념이다.
하지만 소프트웨어 분야에서는 점차 비효율적인 것들이 나타나기 시작했다. 최신의 프로그램들은 요구사항이 빠르게 변하고 그에 따라 해당하는 요구사항들이 즉각적으로 반영되지 않으면 도태될 수 있었다. 그럼에도 불구하고 유저들은 점차 더 높은 수준의 품질을 요구하고 그에 따라 빠르게 수정 반영을 하기에는 기존의 시스템은 너무 느리고 비효율적이었다. 그러다 보니 소프트웨어의 개발과 검증 그리고 운영 및 배포의 전체적인 프로세스를 관리해야 할 필요성이 생겨났다.
즉 DevOps는 소프트웨어의 개발의 품질과 속도를 개선하고 변경되거나 추가되는 기능으로 인한 제품의 릴리즈 주기 단축을 장려하는 새로운 철학이자 프레임워크이다. DevOps는 개발 팀과 운영 팀 간의 원활하고 지속적인 커뮤니케이션, 협업, 통합, 가시성 및 투명성을 추구한다.
DevOps의 효과
- 출시 시간 단축 : 유기적인 운영을 통해 시간이 단축되므로 비즈니스에서 유리할 수 밖에 없다.
- 시장과 경쟁 지형에 따른 유연한 대응 : 고객의 니즈를 파악하는 피드백루프를 통해 유연한 대응이 가능하다.
- 시스템 안정성 및 신뢰성 유지 : 수정 및 신규사항에 대해 검증하고 릴리즈하는 절차를 프로세스화함으로써 안정성과 신뢰성을 유지할 수 있다.
- 평균 복구 시간 개선 : 자동화 프로세스를 통해 안정적으로 빠르게 복구가 가능하다.
소프트웨어는 그 자체의 품질과 성능이 중요할 뿐만 아니라 현대 사회에서는 각종 비즈니스의 핵심 요소가 되었다. 따라서 기업, 조직은 소프트웨어 없이는 제대로된 가치를 고객에게 제공하기 힘들고 만약 요구사항이 반영되지 않는다면 고객의 신뢰를 잃고 점차 비즈니스 경쟁에서 도태될 것이다. DevOps는 이러한 리스크를 개선하기 위해 도입된 개념이므로 매우 중요하다고 할 수 있다. 소프트웨어의 개발부터 실제 고객에게 전해지는 과정을 관리함으로써 더 빠르고 유기적인 시스템을 추구하기 때문이다.
DevOps의 ToolChain
DevOps를 실천하기 위한 도구들은 아래와 같다.
- 계획: Jira, Confluence와 같은 tool을 통해 요구사항을 수집할 수 있는 단계이다.
- 코딩: 실제 코딩을 진행하고 관리하는 도구로는 Git, Gerrit, GitHub, Bitbucket 같은 형상관리 도구들이 포함될 수 있다.
- 구축: 릴리즈를 위한 패키지를 할 수 있는 단계이다. Docker, Ansible, Gradle, Maven, JFrog Artifactory 같은 도구가 있다.
- 테스트: 안정적이고 신뢰성을 보장하기 위해서는 테스트가 중요하다. JUnit, Codeception 등과 같은 도구가 있다.
- 배포: 실제 배포를 관리하고 자동화하는 툴이 필요하다. Jenkins, Kubernetes, Docker, Jira와 같은 도구가 있다.
- 운영: 운영 중인 소프트웨어를 관리하는 툴로는 Anabilities, Puppet, Chef, Salt, Otter가 있다.
- 모니터링: 문제를 식별하고 수집할 수 있는 툴은 New Relic, Datadog, Grafana, Wireshark, Splunk, Nagios 또는 Slack이 있다.
DevOps의 사례
DevOps를 실천할 수 있는 사례는 아래와 같다.
- 지속적 통합
- 지속적 전달
- 마이크로 서비스
- 코드형 인프라
- 모니터링 및 로깅
- 커뮤니케이션 및 협업
참고 :
https://www.netapp.com/ko/devops-solutions/what-is-devops/
https://aws.amazon.com/ko/devops/what-is-devops/
결론
데브옵스는 한번 시도하고 구축해본다고 끝나는 개념이 아니다. 지속적으로 피드백하고 개선해 나가는 애자일 원칙과도 일맥상통하는 개념이다. 어떤 일이든 마찬가지겠지만 공부하면 할수록 소프트웨어는 사람이 하는 일이라는 것을 절실히 느낀다. 각종 공학이론들과는 조금 다르게 공식이나 정답, 이론이 존재하지 않고 사람들이 원하는 것을 실제로 실행할 수 있도록 만들고 유지하는 것이 핵심인 것 같다. 그러기 위해서는 소프트웨어가 문제없이 잘 작동해야 하고 그게 지속되어야 한다. 또 문제가 발생하거나 새로운 기능이 추가되어야 할 때 빠르고 안정적으로 문제없이 반영되어야 한다. 이런 것 상황들을 잘 이해하고 설명해 줄 수 있는 포괄적인 개념이 데브옵스가 아닌가 생각해 본다.
'개발 > DevOps' 카테고리의 다른 글
[Docker] 도커의 개념과 설치 방법에 대해서 (0) | 2023.02.14 |
---|