DevOps 엔지니어의 역할
데브옵스 엔지니어의 미션은 개발팀과 운영팀 간의 협력을 촉진하여 소프트웨어 제공을 더욱 신속하고 안정적으로 할 수 있도록 하는 것입니다. 이를 위해 현대 데브옵스 엔지니어는 다양한 역할을 수행합니다. 하지만 제일 중요한 것은 개발자 와 운영자 간의 갈등과 각자의 고충을 온전히 이해하므로서 해결하고자 하는 주체의식을 갖는 것이 첫 번째 입니다.
개발자와 운영자의 이해관계 충돌
좋은 IT 서비스란 무엇일까요? 사용자가 사용하기에 유용하고 다양한 기능을 제공하고 동시에 안전하고 안정적인 서비스일 것입니다. 최근들어 스마트폰의 발달과 플랫폼 기반 사업이 각광 받으면서 IT 산업이 빠르게 성장하고 거의 제조업, 유통업 등 모든 산업 전반에 디지털화를 가속화하고 있습니다 (이를 DT (Digital Transformation), DX(Digital Acceleration)라고도 합니다). 이렇듯 IT가 안 건드리는 분야가 없을 정도로 다양한 곳으로 퍼져 나가기 때문에 그에 따른 새로운 애플리케이션의 개발이 필요해짐에 따라 개발자의 수요가 폭발적으로 늘어났던 것입니다.
이러한 배경으로 인해 개발자들은 점점 더 많아지고 다양해지는 요구사항에 따른 수요에 페이스를 맞추려 개발속도를 높여야 하는 것입니다. 하지만 운영자들의 입장은 다릅니다. 그들의 목표는 시스템, 애플리케이션을 최대한 안전하고 안정적으로 유지해야 합니다. 그래서 아이러니하게도 그들의 입장에서는 기능이나 구조가 바뀌지 않는 것이 가장 좋은 것입니다. 따라서 개발이 많아질수록 그에 따라 운영쪽에서 해야할 일도 많아지고 테스팅이라든지 배포라든지 신경써야 할 일도 많아집니다.
그렇다보니 두 개의 역할인 개발자와 운영팀 사이에는 갭이 존재할 수 있습니다. 개발자는 코드가 배포될 위치나 방법을 고려하지 않고 코딩하게 되고, 운영팀은 무엇을, 왜 배포하는지 또는 어떻게 애플리케이션이 작동하는지에 대한 이해가 부족한 채로 배포를 진행하게 됩니다. 이러한 갭으로 인해 개발자가 코딩을 완료했지만 운영팀의 배포 가이드가 충분하지 않은 경우가 있으며, 운영팀이 배포를 어려워 하거나, 문제가 많은 기능을 배포하려고 하는 경우가 있습니다. 이러한 오해와 이해관계의 불일치는 릴리스 기간을 몇 일에서 몇 주, 복잡하고 유지보수가 잘 되지 않은 프로젝트에서는 몇 달까지 늘릴 수 있습니다.
따라서 이러한 문제를 해결하는 것이 데브옵스 엔지니어의 근본적인 역할인 것입니다.
데브옵스 엔지니어의 역할
위와 같은 미션을 토대로 데브옵스 엔지니어가 수행하는 역할은 아래와 같이 세분화할 수 있습니다.
◼️ 개발자와 운영팀 간의 협력 촉진: 개발자와 운영팀 간의 협력을 촉진하여 효율적인 작업 흐름을 구축합니다.
◼️ CI/CD 파이프라인 구축: CI/CD 파이프라인을 구축하여 소프트웨어 개발과 배포를 자동화합니다.
◼️ 인프라스트럭처 자동화: 클라우드 인프라스트럭처를 사용하여 인프라스트럭처 자동화를 수행합니다.
◼️ 모니터링과 문제 해결: 애플리케이션과 인프라스트럭처의 모니터링을 수행하고, 장애나 문제를 빠르게 해결합니다.
◼️ 보안 및 컴플라이언스: 서비스의 보안 및 컴플라이언스를 준수하도록 서비스를 구성합니다.
◼️ 개발자 지원 및 교육: 개발자들이 클라우드 인프라스트럭처나 CI/CD 파이프라인을 사용하는 데에 필요한 도구와 기술에 대한 교육 및 지원을 제공합니다.
◼️ 개발자와 운영팀 간의 협력 촉진
| 개발자와 운영팀 간의 협력을 촉진하여 효율적인 작업 흐름을 구축합니다.
- 개발팀의 불편사항, 운영팀의 불편사항을 사전에 체크하고 개선할 점이 있는지 연구하고 분석합니다.
정기적인 미팅을 통해 자유롭게 이야기할 수 있는 문화 자체를 만드는 것도 중요합니다.
- 이슈 트래커, 형상 관리 시스템, 메신저 프로그램 등의 협업 도구를 도입하여 개발팀과 운영팀이 함께 일할 수 있는 환경을 만들어 줄 수 있습니다.
대표적인 툴로 이슈 트래커 같은 경우에 Jira, 메신저 프로그램의 경우 Slack 등이 있습니다.
◼️ CI/CD 파이프라인 구축
| CI/CD 파이프라인을 구축하여 소프트웨어 개발과 배포를 자동화합니다.
CI (Continuous Integration) + CD (Continuous Deployment) 의 합성어.
CI/CD 파이프라인은 소프트웨어 개발 프로세스에서 자동화된 빌드, 테스트, 배포 과정을 의미합니다.
이를 통해 개발자들은 자주 코드를 변경하고, 안정적으로 소프트웨어를 제공할 수 있게 됩니다.
보통 CI/CD 파이프라인은 다음과 같은 단계로 이루어집니다.
- 소스 코드 관리: 소프트웨어 개발에 사용되는 코드를 버전 관리 시스템(Git 등)에 저장합니다.
- 빌드: 소스 코드를 컴파일하고, 빌드된 파일을 생성합니다.
- 테스트: 빌드된 소프트웨어를 자동화된 테스트 환경에서 실행하여 오류를 탐지합니다.
- 배포: 빌드 및 테스트를 거친 소프트웨어를 배포 환경으로 이동시킵니다.
- 운영: 배포된 소프트웨어를 모니터링하고, 필요에 따라 버그 수정이나 업그레이드를 진행합니다.
- CI/CD 파이프라인은 이러한 단계를 자동화하여, 개발자가 새로운 코드를 더욱 빠르고 안정적으로 배포할 수 있게 도와줍니다.
이를 통해 개발팀과 운영팀 간의 의사소통이 원활하게 이루어지고, 품질 높은 소프트웨어를 더욱 빠르게 제공할 수 있습니다.
◼️ 인프라스트럭처 자동화
| 클라우드 인프라스트럭처를 사용하여 인프라스트럭처 자동화를 수행합니다.
- Infrastructure as Code (IaC): 인프라를 코드화하여 버전 관리와 함께 자동화된 구성 관리를 할 수 있습니다. 이를 통해 변경 사항을 추적하고 문제가 발생할 경우 쉽게 이전 상태로 롤백할 수 있습니다. IaC의 경우 대표적으로는 Terraform, Ansible 등의 Tool을 사용하고 AWS의 경우는 자체적인 서비스인 CloudFormation 을 제공합니다. 그 중에서도 Terraform 은 다양한 Provider를 지원하고 라이브러리가 고도화 되어있기 때문에 가장 IaC 툴로서 각광받으며 성장하고 있습니다.
- Configuration Management: 인프라 구성을 프로그래밍 방식으로 관리하여, 일관성과 안정성을 유지할 수 있습니다. 이를 통해 설정 변경을 중앙 집중화하고, 문제 발생 시 자동으로 복구할 수 있습니다.
- Orchestration: 다양한 인프라 컴포넌트들을 자동으로 조율하여 서비스를 제공하는 환경을 만들 수 있습니다. 이를 통해 서비스 제공에 필요한 리소스를 효율적으로 배치할 수 있으며, 특정 리소스가 장애가 발생했을 때 자동으로 대체할 수 있습니다. 컨테이너를 사용하는 현대 MSA 구조의 인프라인 경우 K8S를 통해 리소스 관리를 자동화할 수 있습니다.
◼️ 모니터링과 문제 해결
| 애플리케이션과 인프라스트럭처의 모니터링을 수행하고, 장애나 문제를 빠르게 해결합니다.
DevOps에서 모니터링은 매우 중요합니다. 모니터링을 통해 운영 중인 시스템과 애플리케이션의 상태를 지속적으로 추적하고, 이상 사항이나 장애가 발생한 경우 즉각적으로 대응할 수 있습니다. 이는 비즈니스 연속성을 유지하고 고객 만족도를 높이는 데 큰 도움이 됩니다.
DevOps에서 모니터링은 다음과 같은 중요한 이점을 제공합니다.
- 장애 예방: 모니터링을 통해 애플리케이션 및 시스템의 상태를 지속적으로 추적하면, 잠재적인 문제나 병목 현상을 식별하여 이를 예방할 수 있습니다.
- 신속한 대응: 모니터링을 통해 이상 사항이나 장애가 발생한 경우, 신속하게 대응하여 서비스 중단 시간을 최소화할 수 있습니다.
- 지속적인 개선: 모니터링을 통해 수집한 데이터를 분석하여 애플리케이션 및 시스템의 성능과 안정성을 지속적으로 개선할 수 있습니다.
- 프로액티브한 운영: 모니터링은 리액티브한 대응뿐만 아니라 프로액티브한 운영에도 도움이 됩니다. 모니터링 데이터를 기반으로 예측 분석을 수행하여 문제를 예방하고 성능을 개선할 수 있습니다.
- 투명한 운영: 모니터링을 통해 시스템 및 애플리케이션의 상태를 시각화하여 운영팀과 개발팀 간의 의사소통과 협업을 원할하게 만듭니다.
◼️ 보안 및 컴플라이언스:
| 서비스의 보안 및 컴플라이언스를 준수하도록 서비스를 구성합니다.
서비스를 안전하고 안정적으로 유지하기 위해서 보안은 뗄래야 뗄 수 없는 요소입니다. 데브옵스 엔지니어는 각 서비스의 특징에 맞게 끔 산업별 보안 심의 및 준수사항에 대한 지식을 보유하고 있어야 합니다. OS 취약점 분석, 망분리 요건 성립, 방화벽, 접근제어, 암호화 등 다양한 보안적 조치가 취해져 있는지 확인하고 준수해야합니다.
◼️ 개발자 지원 및 교육
| 개발자들이 클라우드 인프라스트럭처나 CI/CD 파이프라인을 사용하는 데에 필요한 도구와 기술에 대한 교육 및 지원을 제공합니다.
위에서 계속 살펴본 것 처럼 데브옵스 환경을 구축하기 위해서는 다양한 도구의 도움을 받아야 하고 새로운 지식을 필요로 합니다. 어떻게 보면 데브옵스는 Tool 빨이라고 해도 과언이 아닐 수 도 있습니다. 타이탄의 도구 처럼 어떤 툴을 프로젝트의 요구사항 및 아키텍처 상황에 따라 최적화 하여 쓰는 지에 따라 생산성이 확 달라질 수 있습니다. 따라서 새로운 도구를 사용하는 방법에 대해서 가이드 문서 작성 및 내부 Lesson 세션을 통해서 교육지원하는 역할도 필요합니다. 여기서 중요한건 기술 공유 문화가 형성이 될수 있도록 전사적인 노력이 필요하고 개발자들의 적극적인 참여가 필요합니다.