DevOps, 요즘 이리저리 많이 들리는 단어이다.
많이 들리다보니 개념이 정확이 무엇인지 궁금해졌고, 관련 영상과 글을 찾아보다가 이참에 정리해서 포스팅을 하면 좋겠다 생각했다.
오늘날의 작업방식
디지털 트랜스포메이션 시대의 기업들은 기술 혁신에 대한 도전에 직면하고 있다.
2000년대 포춘 500대 기업의 절반이 디지털 트랜스포메이션이라는 거대한 도전앞에 새로운 기술기반 기업들에게 자리를 내주어야 했다.
고객 가치를 빠르고 개선된 형태로 전달해주는 문제는 이제 단순히 매출을 조금더 올리는 문제가 아니라
기업 생존의 문제가 되었다.
새로운 기술을 통해 서비스를 빠르게 개선하고, 가치있는 고객 경험을 전달함으로써 지속적인 혁신을 할 수 있는 환경을 만들어야하는 것이다.
소프트웨어 개발환경, 어떻게 혁신해야할까?
DevOps를 통해 지속적인 서비스혁신을 할 수 있다. DevOps 란 어떤 개념일까?
DevOps는 단절된 개발과 운영간 프로세스를 seamless하게 연결하고 자동화 방법을 통해 효율성을 극대화 하는 방법이다.
왜 개발과 운영의 업무를 통합하려 하는 걸까?
과거에는 새로운 서비스를 출시하기 위해서 오랜 기간동안 작업하고, 배포했던 것과 달리
현재에는 서비스 출시 속도가 빠르고 업데이트 주기 또한 빈번해졌다.
따라서 개발된 소프트웨어가 시스템의 안정성을 유지하면서 사용자에게 빠르게 제공될 수 있도록
개발, 테스트, 배포, 운영 의 업무 사이클을 자동화된 하나의 프로세스로 통합할 필요성이 생긴 것이다.
DevOps의 핵심요소?
DevOps의 핵심요소는 CAMS 라고 할 수 있다.
1. Culture
DevOps는 개발과 운영 두팁의 경계를 허물고 협업 수준을 높여 품질 및 효율성을 향상시킬 수 있도록 문화와 환경을 제공해야한다.
따라서 데브옵스의 성공을 위해서는 조직이 사일로화 되지 않도록 경계해야한다.
사일로란?
곡식이나 사료를 저장해두는 굴뚝모양의 창고
각 사일로에는 동일한 내용물만 저장된다
즉, 조직내 다양한 부서들이 서로 다른 부서와 담을 쌓은 것처럼 교류하지 않고 자기 부서 내부의 이익만 추구하는 것을 사일로 현상이라고 한다.
사일로 조직이 되면 협업도 문제지만, 각 부서별 데이터들도 통합되지 않아 회사 전체 데이터를 통합해서 인사이트를 얻는게 힘들어진다.
따라서 데브옵스를 위해서는 우선 회사 비즈니스 목표에 맞춰 개발, 운영팀에 원활한 소통과 협업 문화가 중요하다.
2. Automation
자동화는 개발자가 소스코드를 작성하는 과정에서부터 실제 서비스에 적용되기까지의 전과정을 수작업이 아닌 자동화된 프로세스로 관리하고 서비스에 대한 품질 검사 및 모니터링과 운영도 자동화 하는 것을 포함한다.
이로 인해 시간을 절약할 수 있을 뿐만 아니라 작업자의 실수를 예방하고 서비스의 일관성을 유지할 수도 있다.
3. Measure
지속적인 서비스 개선을 위해서 측정은 정말 중요한 부분이다.
따라서 이를 위해 데브옵스 전반에 대한 측정능력 및 방안이 중요하고, 측정된 데이터는 투명하고 액세스 가능해야하며 시각화를 통해 한눈에 파악이 가능해야한다.
4. Share
DevOps의 성공을 위해서는 조직전반에 걸쳐 요구사항을 도출하고 협력할 수있는 공통된 도구를 활용하여 중복된 작업을 없애고 참여의식을 갖도록 해야한다.
MSA의 경우 서비스 구조가 복잡하여 작업 공유가 안되면 작업 내용 및 변경사항을 파악할 수가 없을 것이다.
이때문에 장애가 발생해도 원인분석에 많은 시간을 소모하게 될 수 있다.
따라서 개발과 운영을 하면서 얻는 노하우를 조직 구성원들에게 공유함으로써 향후 발생할 수 있는 장애를 줄이고 조직 전체의 기술 역량을 높일 수 있게 해야한다.
이것이 바로 DevOps를 하면서 대시보드, 슬랙 메신저, 티켓팅 시스템, 사내 위키를 활용하는 이유이다.
이 핵심 요소들이 표현된 것이 바로 CI/CD 및 대시보드이다.
하나씩 살펴보자
CI/CD 란?
지속적인 통합과 배포를 통해 애플리케이션 개발단계를 자동화하여 고객에게 보다 짧은 주기로 서비스를 제공하고 개선하는 방법을 의미한다.
먼저 CI는 지속적인 통합을 말한다.
우리가 사용하는 모바일 앱의 경우, 개발자 한명이 개발하는 경우는 거의 없다.
여러명의 개발자가 각각 맡은 기능을 개발하면 이 개발된 소스코드들을 하나로 합친다.
이때는 단순히 파일을 합치는게 아니라 해당기능이 꼭 필요한지, 다른 사람이 개발한 부분과 중복되었는지를 확인한 뒤 통합한다.
큰 프로젝트나 오픈소스 커뮤니티의 경우에는 컴퓨터 즉, 통합관리담당자가 확인한 후에 합쳐지게 된다.
이때 개발자 간 , 개발자와 커미터 사이에서 빈번한 커뮤니케이션이 발생한다.
합쳐진 소스는 저장소인 소스 저장소에 저장되고, 이후 빌드과정을 통해 실행가능한 패키지 형태로 만들고
이 실행파일이 제대로 동작하는 지 테스트 과정을 거치게 된다.
이처럼 지속적인 통합을 하게되면 버그를 신속하게 찾아 해결할 수 있으며
소프트웨어의 품질을 개선하고, 새로운 소프트웨어 업데이트를 검증 및 릴리즈하는데 걸리는 시간을 단축할 수 있다.
이번에는 CD 즉, 지속적인 배포에 대해서 알아보자
지속적 배포는 실행파일들을 실제 개발환경에서 테스트한 뒤 문제가 없으면 상용서비스에 적용하고 운영 및 모니터링 하는 과정 전체를 말한다. 이과정이 하나의 프로세스로 구현되면 개발자는 언제나 즉시 배포할 수 있다.
이처럼 CI CD는 지속적인 통합과 배포를 통해 애플리케이션 개발단계를 자동화하여
고객에게 보다 짧은 주기로 서비스를 제공하고 개선하는 방법이며, 대표적인 오픈소스 기반의 CI CD 도구는 다음과 같다.
코드개발을 위한 git, 이클립스,
빌드를 위한 maven, apache ant
소스코드 배포를 위한 Jenkins
인프라 배포를 위한 Ansible, Terraform
모니터링을 위한 Nagios, Splunk
로그 관리를 위한 Elastic Search 등이 있다.
앞서 DevOps를 통해 조직의 사일로화를 없애고 협업문화를 형성해야한다고 했는데,
팀 간 원활히 소통할 수 있는 협업툴과 프로젝트를 투명하게 관리하려면 대시보드의 도입이 필요하다.
대시보드를 사용하면 전체 개발 단계를 정하는 것은 물론, 개발하는 기능의 마감 날짜, 개발 담당자, 주요 업데이트 및 문제점 등
개발관련 핵심정보들을 업데이트하게된다.
그리고 매일 정해진 시간에 대시보드를 보면서 회의를 하여 개발이 지체되는 원인에 대한 분석과 필요한 리소스 들은 없는지 소통하게 된다.
필요한 경우에는 회의를 개발 운영팀을 넘어 마케팅, 영업팀 까지 확대할 수 있다.
이를 통해 개발자와 운영, 마케팅, 영업 등 다른 팀 간의 커뮤니케이션이 활발해지면서 조직의 모든 부분에서 목표와 프로젝트에 좀 더 빠르고 가깝게 다가갈 수 있다.
ref: https://www.youtube.com/watch?v=onOy7WiguMI&ab_channel=%EC%82%BC%EC%84%B1SDS