1. DevOps의 의미
DevOps는 Development와 Operations의 합성어이며, 기존의 개발 업무와 운영 업무로 나뉘어진 두 역할 사이의 커뮤니케이션, 협업, 통합을 강조하는 개념이다.
이러한 용어가 탄생하게된 배경은 이렇다.
"회사에서 개발을 하다보면 프로젝트를 빌드하고 배포하고 테스트하는 운영 업무까지 함께 해야 한다. 보통 회사에서는 이 두개의 일(개발/운영)을 하는 조직을 나눠서 관리하는데 하나의 서비스를 두 개의 조직에서 관리하다보면 비효율적인 부분도 있고 의사소통에도 문제가 발생할 수 있다.
시스템간 연결이 복잡해지고 기술과 요구 사항이 지속적으로 변화하고 있는 시점에서 시스템 운영에 대한 서로 간의 소통이 매우 어렵게 되고 있다. 서로 간의 업무와 정보가 손쉽게 공유되지 않아 처리 속도도 매우 느리며, 심하게는 서로 화합하지 못하고 서로를 탓하기만 하는 경우도 빈번하게 발생된다.
그렇기 때문에 두 역할 간의 커뮤니케이션, 협업, 통합을 강조하여 서로 간의 차이를 줄여주는 DevOps라는 소프트웨어 개발 방법론이 생기게 되었다.
개발자들과 운영자들을 서로 잘 융합시키고 의사소통이 원활하게 하기위한 개발 방법론이 바로 DevOps이다.
+ 어플리케이션 개발의 품질과 속도를 개선시키고 신규 수정된 SW 기능이나 제품의 릴리즈 주기 단축을 장려하는 새로운 철학이자 프레임워크이다.
2. DevOps의 등장배경
최근 IT 트렌드의 핵심요소는 속도이다.
페이스북은 'Move fast and Break Things'를 새로운 모토로 내세우고 있으며, 구글 또한 중요 철학 중 하나로 빠른 속도를 내세우고 있다.
기존에 주로 사용하던 폭포수(waterfall) 모델 방법론은 단계별로 명확한 구현을 원칙으로 진행된다.
그러나 실제적으로는 각 단계를 완벽히 마무리한 후 다음 단계를 진행하는 것은 많은 어려움이 따를뿐더러 오랜 시간이 소요된다.
이에 따라 일정한 주기를 가지고 끊임없이 Prototype을 만들어내며 그때그때 필요한 요소를 진행하는 애자일 프로세스가 새로운 모델 방법론으로 대두되면서 등장하게 되었다.
3. DevOps 모델을 도입하기 위한 방법 (문화 철학)
DevOps로 전환하기 위해서는 문화와 사고방식의 변화가 필요하다.
간단히 말해서 DevOps는 기존에 사일로에 묶여 있던 개발과 운영이라는 두 팀간의 장벽을 없애 준다. 일부 조직에서는 개발팀과 운영팀이 나뉘지 않고 엔지니어가 두 업무를 모두 수행할 수 있다.
DevOps에서는 두 팀이 함께 작업하여 개발자의 생산성과 운영의 안정성을 모두 최적화한다. 두 팀은 자주 소통하고, 효율성을 높이고, 고객에게 제공하는 서비스의 품질을 향상하기 위해 최선을 다한다.
4. DevOps 엔지니어란?
데브옵스 철학을 실천한다는 것은 개발 및 운영 팀 전체를 아무 구분 없이 데브옵스 직원 무리로 뭉뜽그려 대체한다는 의미가 아니다. 데브옵스 팀에도 다양한 직원이 저마다 다른 기술을 보유한다.
프로그래머도 있고, 시스템 관리자, DBA도 있고 모두 함께 일한다.
기업에서 데브옵스 엔지니어라는 용어를 사용할 때 그 의미는 이러한 모든 역할을 연결하는 과정을 돕는 인력이다.
그렇기 때문에 데브옵스 엔지니어를 "코딩 방법을 아는 시스템 관리자"로 보는 시각도 있고, "시스템 관리자 스킬을 갖춘 개발자"로 보는 시각도 있다. 어떤 면에서 두 가지 정의 모두 타당하다.
데브옵스 엔지니어의 주된 역할은 지속적 전달과 지속적 통합 워크플로우를 도입하는 것이고, 이를 위해서는 데브옵스 툴에 대한 이해와 여러 프로그래밍 언어에 관한 지식이 필요하다.
또한 데브옵스 엔지니어는 소프트웨어 개발 라이프 사이클을 이해하고 소프트웨어 엔지니어링 툴과 프로세스를 도입해 전통적인 운영 과제를 해결하는 사람이다. 그렇기 때문에 핵심은 개발과 운영, 양쪽에서 모두 충분한 지식과 경험을 보유해서 이 둘이 어떻게 함께 작업할 수 있는지를 이해하고 더불어 전문 팀원들이 서로 소통하고 각자의 격벽을 넘어 바깥 세계를 이해하도록 돕는 "소프트"한 인적 스킬도 갖춰야 한다.
5. DevOps 엔지니어 스킬
데브옵스 엔지니어가 되고자 하는 사람이 이해해야 하는 주요 기술과 플랫폼은 다음과 같이 분류된다.
- 기초 : 리눅스 관리, 파이썬, AWS 또는 다른 클라우드 플랫폼
- 구성 : 테라폼(Terraform) 또는 앤서블(ansible)
- 버전관리 : 깃(Git)과 깃허브(GitHub)
- 패키징 : 도커(Docker)
- 배포 : 젠킨스(Jenkins)
- 실행 : 아마존 ECS와 쿠버네티스
- 모니터링 : ELK 스택
6. DevOps 엔지니어의 역할과 책임
일반적인 데브옵스 엔지니어의 업무는 다음과 같다.
- 서버 측 기능에 대한 사양 및 문서 작성
- CI/CD 관리
- CI/CD 스크립트 작성
- 성능 평가 및 모니터링
- IT 인프라 유지보수 및 관리(H/W, S/W, Network, Storage, 가상 및 원격 자산, 클라우드 데이터 스토리지 포괄)
[ 참고 자료 ]
- https://aws.amazon.com/ko/devops/what-is-devops/
- https://simsimjae.medium.com/devops%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80-c50f4d86666b
'IT 용어정리' 카테고리의 다른 글
[APP] JAR/WAR/EAR의 차이 (2) | 2021.11.26 |
---|---|
[미들웨어] 3-Tier와 N-Tier 정리 (0) | 2021.08.23 |
[용어정리] TPS와 Working Thread 산정 방법 (0) | 2021.08.04 |