갑자기 DevOps???
저는 개발직무로 입문하여 [취업준비 + 역량강화]의 과정을 겪으며 다양하진 않지만 확실한 프로젝트를 4번 진행했습니다.
처음엔 Front-end로 시작하여 UI/UX를 설계하고, 사용자 인터페이스를 구현하며 개발자로서 한 걸음씩 내디뎠습니다. 그러다 마지막 프로젝트에서 Back-end와 CI/CD 업무를 맡아 진행했고, 이 과정에서 Front-end를 진행할 때 보다 더 강렬한 이끌림을 느껴 직무에 대한 고민을 시작했고, DevOps로 미래를 결심했습니다.
사실 DevOps에 관해 많이 찾아봤지만 이렇다 할 정의를 내리기가 참 애매했습니다. 그렇기에 저조차 DevOps로 결심을 했지만 제가 DevOps에 대해 다른 분께 명확히 설명드리기가 어려웠습니다. 그래서 DevOps를 조금 더 이해하고 개념을 명확히 잡으려고 이 글을 작성하게 되었습니다.
1. DevOps란?
- DevOps는 Development + Operations 를 합친 즉, 개발과 운영을 결합한 개발 방법론입니다.
간단히 말해서, 개발과 운영사이의 벽을 허물고 협력과 커뮤니케이션을 강화하는 역할을 합니다.
2. DevOps 라이프 사이클
Google에 DevOps를 검색해 보면 흔히 볼 수 있는 그림입니다. DevOps 라이프 사이클에 해당하는데 각각 알아보겠습니다.
- Plan(기획) : 비즈니스 가치와 요구사항을 정의합니다. 개발하려는 제품에 대한 아이디어를 도출하고 이를 정의합니다.
작업은 작은 규모의 단위로 쪼개서 관리하며 진행 상황을 추적합니다. - Code(코드) : 설계를 바탕으로 코드를 작성합니다. VCS(버전 관리 시스템)을 이용해 여러 개발자가 작성한 코드 작업을 조율하고 변경사항을 추적합니다. 작성된 코드는 함께 리뷰를 진행하며 일관성 있는 아키텍처를 구현하고 오류를 사전에 방지하여 제품에 대한 구성원들의 이해를 높입니다.
- Build(빌드) : 완성된 코드를 묶어 실행 가능한 상태로 만드는 단계입니다. 이 과정에서 구문 오류를 점검할 수 있고, 정적 분석을 통해 실행 오류나 불필요한 코드, 표준 위배 사항 등을 발견해 코드의 완성도를 높일 수 있습니다.
- Test(테스트) : 완성된 코드에 대해 단위테스트 혹은 정밀테스트, 통합테스트를 수행해 발생 가능한 논리적 오류를 방지합니다.
- Release(릴리스) : 완성된 코드를 배포 가능한 상태로 만드는 단계입니다. 완성본에 버전을 붙이면 변경 사항의 규모를 쉽게 확인할 수 있고, 완성본을 만든 시점도 기록할 수 있습니다.
- Deploy(배포) : 완성된 결과물을 실제 제품에 반영하는 단계입니다. 지속적으로 배포할 수 있는 도구로 빠르게 배포하면 변경사항 배포에 대한 위험을 줄이면서 비용과 시간도 절약할 수 있습니다. 문제 발생 시 신속히 확인하여 Rollback 할 수 있는 준비도 해야 합니다.
- Operate(운영) : 완성된 제품을 유지, 보수하는 단계입니다. 타 시스템과 연동해 서비스의 확장성을 높일 수 있고, 장비를 증설해 보다 안정적으로 서비스를 운영할 수 있습니다.
- Monitor(모니터링) : 완성된 제품에 이상이 없는지 주기적으로 확인하는 단계입니다. 물리적 장비의 CPU와 메모리, 저장 공간 등의 사용률을 확인하거나 제품의 응답 시간과 응답 결과물의 정확도 등의 서비스 지표를 지속해서 관찰하며 발생 가능한 위험에 미리 대비합니다.
3. DevOps의 핵심요소
라이프 사이클에서 볼 수 있듯 DevOps는 개발부터 운영, 유지보수에 이르기까지 광범위한 분야를 담당합니다. 즉, 개발팀과 운영팀의 협업에 관여하는 역할로 볼 수 있습니다. 그렇기 때문에 프로젝트 수행 시 DevOps를 도입한다면 협력하는 팀과 조직에 상당한 영향을 미칩니다.
1. 문화, '사일로화' 방지
사일로는 곡식이나 사료를 저장해 두는 굴뚝 모양의 창고를 뜻합니다. 각 사일로에는 동일한 내용물만 저장됩니다.
즉, 사일로화는 각 조직 혹은 부서가 서로의 이익만 추구하여 서로 담을 쌓고 교류하지 않는 것을 말합니다.
이는 협업도 문제가 되지만, 부서별 데이터가 통합되지 않아서 회사 전체 데이터에 대한 인사이트를 얻기 힘든 문제가 발생합니다.
2. 시스템 자동화
개발자가 소스코드를 작성하는 것부터 실제 서비스에 적용되기까지 전 과정을 자동으로 하고, 품질검사 및 모니터링도 자동화하는 것을 뜻합니다. 이로 인해 시간 절약, 오류 예방, 서비스의 일관성 유지 등의 이점을 얻을 수 있습니다.
3. 측정
지속적인 서비스 개선을 위해선 측정은 매우 중요한 부분입니다. 때문에 DevOps 전반에 대한 측정 능력 및 방안이 필요하며, 측정된 데이터는 투명성, 접근성, 가시성을 필요로 합니다.
4. 공유
DevOps의 성공을 위해서는 조직 전반에 걸쳐 요구사항을 도출하고, 협업툴을 이용하여 중복 작업 제거 및 참여 의식을 가지도록 해야 합니다. 서비스 구조가 복잡하여 작업 공유가 안되면 작업 내용 및 변경사항 파악이 불가하여 장애 발생시 원인분석에 많은 시간을 투자하게 됩니다. 때문에 개발/운영 노하우를 공유하여 장애를 예방하고 조직 전체의 기술 역량을 높일 수 있도록 해야합니다. 이것이 바로 대시보드, 슬랙, 티켓팅시스템, 사내 Wiki 등을 활용하는 이유가 됩니다.