Dev Ops.. Dev는 Development의 Dev 같은데 Ops?? Options인가?
단어부터 좀 낯선 이 친구.. 한 번 차근차근 알아보자
Dev Ops는 개발 방법 중 애자일과 관련이 있다. 이를 위해 에자일에 대해 잠깐 살펴보고 지나간다.
빠르게 변화하는 환경에서 유연한 개발을 위해 개발 프로세스를 반복하고 협업을 강조하는 방법론이다.
데브옵스(DevOps)는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.
오늘도 나에게 정보를 주는 위키백과의 개념이다. 여기서 내용을 몇개 뽑아본다.
즉 프로젝트를 만드는 개발이라는 면과 그렇게 개발된 프로젝트를 배포 및 관리 하는 운영이라는 면을 협업 및 통합을 강조하는 것이다.
이는 곧 개발팀과 운영팀의 작업을 결합하고 자동화하여 고품질의 애플리케이션 및 서비스 제공을 가속화하는 SW 개발 방법이다.
SW 개발방법? 필자는 이 개발 방법에 대해 공부한 적이 있다. 학교 강의 중 SW공학 과목에서 배웠는데 이런 것과 비슷한 것이 에자일 개발 방법이다.
애자일 개발 방법은 자기조직화 되어있는 팀에서 기획부터 배포까지의 단계를 짧게 반복 하며 프로젝트를 발전하는 것인데 하나의 팀에서 개발과 배포를 같이 반복적으로 하려면 개발을 맡은 사람과 배포 및운영을 맡은 사람이 유기적으로 소통이 되어야 원활한 진행이 가능하다. 이때 필요한 것이 바로 Dev Ops이다.
당연히 다른 개발 방법에서도 개발팀과 운영팀이 월활한 소통과 협업, 통합이 된다면 당연히 개발 속도를 올릴 수 있기 때문에 중요하다.
Dev Ops라는 단어 자체는 위에서 말한 것 처럼 하나의 방법론, 사람간의 문화에 가까운 단어였지만 최근에는 이와 같이 개발과 운영 모두 가능하여 개발팀과 운영팀의 중간에서 원활한 조율을 하는 개발자를 지칭하는 단어와 같이 쓰이기도 한다.
그렇다면 Dev Ops 문화를 위해 Dev Ops 엔지니어가 등장한 배경은 무엇일까? 우선 프로젝트가 진행되는 과정을 먼저 살펴본다.

프로젝트가 서비스 되는 과정은 위와 같은 사이클을 반복한다. 이를 보면 크게 두가지 면을 볼 수 있다.
이렇게 팀이 분명히 나눠져있다면 개발팀과 운영팀 사이에서 의견이 갈릴 수 있다.
개발팀에서는 빠른 배포로 더 많은 기능을 추가 하고 싶어 하지만 운영팀은 그만큼 테스트 해야 할 것이 많아지고 운영 관리가 힘들어진다.
또한 이런 잦은 배포는 서비스의 일시적 중단을 야기 할 수 있다.
이런 와중에 기술의 발전이 가속화 되며 클라우드 서버가 등장하였다.
클라우드 서버는 가상화 기술로 하드웨어 리소스 및 인프라를 제공하는 것이다.
이전에는 서버가 필요한 모든 곳에서 물리적 장치로 서버를 구현해야 했지만 클라우드 서비스의 등장으로 하나의 큰 시스템에서 여러개의 서버를 운영 가능하게 되었고 이 서버는 배포라는 것에 초점을 두었기 때문에 클라우드 서버를 이용하는 것은 배포를 하게 되는 것과 같은 환경이 되었다.
이런 기술의 발전과 더불어 위에서 언급한 팀간의 갈등을 해결하고자 크라우드 서버를 활용하게 된 것이 바로 클라우드 기반 Dev Ops이다.

클라우드 기반으로 구현된 프로젝트는 배포 서버와 테스트 및 릴리즈 서버를 구분 지어 개발이 가능하다. 그렇다면 위에서 말한 개발팀의 요구를 맞추기 힘들게 되는 운영팀의 힘든 점을 해소 할 수 있다.
이 이유를 설명하기 위해서는 CI/CD라는 개념이 필요하다. 이 개념은 다룰 내용이 조금 있기에 간단하게 적어본다.
CI(Continuous Integration, 지속적 통합)
CD(Continuous Delivery, 지속적 전달)
- CI에서 통합된 수정 사항들이 자동화된 테스트 환경을 거쳐 업로드 하여 따로 테스트를 진행하지 않고도 바로 배포 가능하도록 하는 것
- 특징
- 지속적 배포 = 지속적 통합 + 지속적 전달
- 코드의 변경 = 배포
- 프로비저닝
- 사용자의 요구에 맞게 시스템을 제공하는 것.
이런 CI/CD를 이용하기 수월한 환경인 클라우드는 개발팀과 운영팀의 거리를 가깝게, 혹은 사실상 없게 만들어 주었기에 Dev Ops 문화가 더욱 원활히 동작 할 수 있는 환경이 조성되었다.
다시 돌아가서..
이런 환경이 조성 되었으니 Dev Ops 엔지니어는 어떤 역
이렇게 개발팀과 운영팀이 가까워지고 단일화 되어 가며 개발의 과정과 운영의 과정을 모두 알고 있어 팀의 균형을 맞추며 개발 사이클 전체에 걸친 요구사항의 균형을 맞출 수 있고 이렇게 팀을 운영할 수 있는 사람의 필요성이 증가했고 이는 Dev Ops 엔지니어의 등장을 야기했다.
Dev Ops 문화는 프로세스의 통일 및 자동화가 핵심인데 이때 Dev Ops 엔지니어는 코드, 애플리케이션 유지 및 관리를 통합 하는데 중요한 역할을 한다.
에자일 개발 환경에서는 팀 내에서 개발자, 시스템 관리자, 프로그래머가 서로 베타적 성향을 띄어 서로 필수적인 정보를 제공하지 않을 수 있다.
이때 Dev Ops 엔지니어는 이런 팀원 간의 소통을 이끌어 내며 과정을 통합하고 경계를 없애 빠른 애플리케이션 변경에 필요한 작업과 안정성을 유지하는 태스크 간 격차를 해소한다.