Dev Ops

양치는 하셨나요·2024년 9월 12일
0
post-thumbnail

Dev Ops.. Dev는 Development의 Dev 같은데 Ops?? Options인가?
단어부터 좀 낯선 이 친구.. 한 번 차근차근 알아보자

사전 개념

Dev Ops는 개발 방법 중 애자일과 관련이 있다. 이를 위해 에자일에 대해 잠깐 살펴보고 지나간다.

애자일 소프트웨어 개발

개념

빠르게 변화하는 환경에서 유연한 개발을 위해 개발 프로세스를 반복하고 협업을 강조하는 방법론이다.

특징

  • 반복적인 개발
    짧은 개발 주기를 가지고 작은 단위의 작업을 반복한다. 주기(이터레이션 or 스프린트)는 소프트웨어의 기능을 개발하고 테스트하는 단위로 구성된다.
    → 초기에 가치 있는 기능 제공과 지속적인 개선 및 변경을 통해 SW를 발전시킨다.
  • 협업과 자기조직화
    애자일을 수행하는 팀은 다양한 역할로 이루어져 있으며, 각 구성원 은 협력 및 소통으로 문제를 해결한다. 팀은 자기조직화되어 작업을 계획, 우선순위를 정하며 문제 해결에 필요한 결정을 한다.
    → 팀 내부 의 소통과 협업이 강화되고, 업무 효율성과 창의성 증가를 야기한다.
  • 우선순위와 가치 중심
    팀은 사용자의 요구와 가치를 우선시한다. 가장 중요한 요구사항부터 작업을 시작하고, 지속적인 고객 피드백을 수용하여 제품을 개선하고 제공한다.
    → 사용자의 요구를 빠르게 반영하고, 가치 있는 소프트웨어를 제공하여 고객 만족도를 높인다.
  • 변화에 대한 수용
    애자일 방법론은 변화 수용 및 대응을 목표로 한다. 요구사항이나 환경이 변경되면, 팀은 유연하게 계획을 조정하고 개발 방향을 변경할 수 있다.
    → 변화에 대한 빠른 대응이 가능하며, 소프트웨어의 신속한 개선과 시장의 변화에 대응 가능하다.
  • 지속적인 테스트와 통합
    팀은 품질을 유지하기 위해 지속적인 테스트와 코드 통합을 수행한다. 단위 테스트와 자동화된 테스트 도구로 버그를 조기에 발견, 수정한다.
    → 소프트웨어의 안정성과 신뢰성을 높이고, 품질 관리를 지속적으로 수행할 수 있다.

Dev Ops

개념

데브옵스(DevOps)는 소프트웨어의 개발(Development)과 운영(Operations)의 합성어로서, 소프트웨어 개발자와 정보기술 전문가 간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다. 데브옵스는 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이며 조직이 소프트웨어 제품과 서비스를 빠른 시간에 개발 및 배포하는 것을 목적으로 한다.

오늘도 나에게 정보를 주는 위키백과의 개념이다. 여기서 내용을 몇개 뽑아본다.

  • Development + Operations의 합성어이다.
  • 개발자와 정보 기술 전문가간의 소통, 협업 및 통합을 강조하는 개발 환경이나 문화를 말한다.
  • 소프트웨어 개발조직과 운영조직간의 상호 의존적 대응이다.
  • 조직이 SW 제품과 서비스를 빠른시간에 개발 및 배포하는 것을 목적으로 한다.

즉 프로젝트를 만드는 개발이라는 면과 그렇게 개발된 프로젝트를 배포 및 관리 하는 운영이라는 면을 협업 및 통합을 강조하는 것이다.

이는 곧 개발팀과 운영팀의 작업을 결합하고 자동화하여 고품질의 애플리케이션 및 서비스 제공을 가속화하는 SW 개발 방법이다.

SW 개발방법? 필자는 이 개발 방법에 대해 공부한 적이 있다. 학교 강의 중 SW공학 과목에서 배웠는데 이런 것과 비슷한 것이 에자일 개발 방법이다.

애자일 개발 방법은 자기조직화 되어있는 팀에서 기획부터 배포까지의 단계를 짧게 반복 하며 프로젝트를 발전하는 것인데 하나의 팀에서 개발과 배포를 같이 반복적으로 하려면 개발을 맡은 사람과 배포 및운영을 맡은 사람이 유기적으로 소통이 되어야 원활한 진행이 가능하다. 이때 필요한 것이 바로 Dev Ops이다.

당연히 다른 개발 방법에서도 개발팀과 운영팀이 월활한 소통과 협업, 통합이 된다면 당연히 개발 속도를 올릴 수 있기 때문에 중요하다.

Dev Ops 엔지니어

Dev Ops라는 단어 자체는 위에서 말한 것 처럼 하나의 방법론, 사람간의 문화에 가까운 단어였지만 최근에는 이와 같이 개발과 운영 모두 가능하여 개발팀과 운영팀의 중간에서 원활한 조율을 하는 개발자를 지칭하는 단어와 같이 쓰이기도 한다.

Dev Ops 엔지니어 배경

그렇다면 Dev Ops 문화를 위해 Dev Ops 엔지니어가 등장한 배경은 무엇일까? 우선 프로젝트가 진행되는 과정을 먼저 살펴본다.

프로젝트가 서비스 되는 과정은 위와 같은 사이클을 반복한다. 이를 보면 크게 두가지 면을 볼 수 있다.

  • 공통: 계획
  • 개발: 개발, 빌드
  • 운영: 테스트, 릴리즈, 운영

이렇게 팀이 분명히 나눠져있다면 개발팀과 운영팀 사이에서 의견이 갈릴 수 있다.
개발팀에서는 빠른 배포로 더 많은 기능을 추가 하고 싶어 하지만 운영팀은 그만큼 테스트 해야 할 것이 많아지고 운영 관리가 힘들어진다.
또한 이런 잦은 배포는 서비스의 일시적 중단을 야기 할 수 있다.

클라우드

이런 와중에 기술의 발전이 가속화 되며 클라우드 서버가 등장하였다.

클라우드 서버는 가상화 기술로 하드웨어 리소스 및 인프라를 제공하는 것이다.

이전에는 서버가 필요한 모든 곳에서 물리적 장치로 서버를 구현해야 했지만 클라우드 서비스의 등장으로 하나의 큰 시스템에서 여러개의 서버를 운영 가능하게 되었고 이 서버는 배포라는 것에 초점을 두었기 때문에 클라우드 서버를 이용하는 것은 배포를 하게 되는 것과 같은 환경이 되었다.

이런 기술의 발전과 더불어 위에서 언급한 팀간의 갈등을 해결하고자 크라우드 서버를 활용하게 된 것이 바로 클라우드 기반 Dev Ops이다.

클라우드 기반 Dev Ops

클라우드 기반으로 구현된 프로젝트는 배포 서버와 테스트 및 릴리즈 서버를 구분 지어 개발이 가능하다. 그렇다면 위에서 말한 개발팀의 요구를 맞추기 힘들게 되는 운영팀의 힘든 점을 해소 할 수 있다.

이 이유를 설명하기 위해서는 CI/CD라는 개념이 필요하다. 이 개념은 다룰 내용이 조금 있기에 간단하게 적어본다.

  • CI / CD
    • CI(Continuous Integration, 지속적 통합)

      • 코드의 수정 사항을 레포지토리에 자동으로 자주 통합하는 것
      • 필요성
        • 버그를 빨리 찾을 수 있다.
        • 완료된 코드에 대한 빠른 전달이 가능하다.
        • 지속적 배포가 가능하다.
    • CD(Continuous Delivery, 지속적 전달)
      - CI에서 통합된 수정 사항들이 자동화된 테스트 환경을 거쳐 업로드 하여 따로 테스트를 진행하지 않고도 바로 배포 가능하도록 하는 것
      - 특징
      - 지속적 배포 = 지속적 통합 + 지속적 전달
      - 코드의 변경 = 배포
      - 프로비저닝
      - 사용자의 요구에 맞게 시스템을 제공하는 것.

      이런 CI/CD를 이용하기 수월한 환경인 클라우드는 개발팀과 운영팀의 거리를 가깝게, 혹은 사실상 없게 만들어 주었기에 Dev Ops 문화가 더욱 원활히 동작 할 수 있는 환경이 조성되었다.

다시 돌아가서..

이런 환경이 조성 되었으니 Dev Ops 엔지니어는 어떤 역

Dev Ops 엔지니어의 역할

이렇게 개발팀과 운영팀이 가까워지고 단일화 되어 가며 개발의 과정과 운영의 과정을 모두 알고 있어 팀의 균형을 맞추며 개발 사이클 전체에 걸친 요구사항의 균형을 맞출 수 있고 이렇게 팀을 운영할 수 있는 사람의 필요성이 증가했고 이는 Dev Ops 엔지니어의 등장을 야기했다.

Dev Ops 문화는 프로세스의 통일 및 자동화가 핵심인데 이때 Dev Ops 엔지니어는 코드, 애플리케이션 유지 및 관리를 통합 하는데 중요한 역할을 한다.

에자일 개발 환경에서는 팀 내에서 개발자, 시스템 관리자, 프로그래머가 서로 베타적 성향을 띄어 서로 필수적인 정보를 제공하지 않을 수 있다.

이때 Dev Ops 엔지니어는 이런 팀원 간의 소통을 이끌어 내며 과정을 통합하고 경계를 없애 빠른 애플리케이션 변경에 필요한 작업과 안정성을 유지하는 태스크 간 격차를 해소한다.

결론

  • Dev Ops는 프로젝트를 계획, 개발, 배포, 운영 함에 있어 각 팀들이 서로 유기적으로 엮이고 통합되어 원활한 프로젝트 진행을 이끌어 낼 수 있는 개발 방법 혹은 문화이다.
  • Dev Ops 엔지니어는 이런 Dev Ops 문화를 이끌어낼 수 있도록 팀들 사이에서 의견을 조율하고 정보를 주고 받을 수 있게 하여 빠르고 안정적인 발전을 이끌어 내는 사람이다.
profile
프로그래밍을 잘하고 싶어요..

0개의 댓글