DevOps(Development and Operations)

2 분 소요


0. 들어가면서

개발과 운영이 분리되면서 오는 문제점을 해결하기 위해서 개발과 운영을 하나의 조직으로 합쳐서 팀을 운영하는 문화이자 방법론이다.

조대협님의 블로그::개발과 운영의 조화 포스트를 읽으면서 공감되는 부분이 많아 이를 바탕으로 나의 경험을 글로 정리했다. 18년 신규 시스템 개발 프로젝트에 주니어 개발자로 입사했다. 현재는 프로젝트가 마무리 된 상태로 개발 팀이 운영 팀으로 전환되고, 시스템을 운영하며 지내고 있다. 개발 프로젝트 초기에 기존 시스템 운영 팀과 내가 있었던 개발 팀은 서로 교류가 없었다. 프로젝트 중간 단계에선 운영 팀의 비즈니스 노하우를 토대로 현재 운영되는 시스템과 신규 시스템의 간극을 좁히기 위해 협업을 수행했다. 막바지에 이르러서는 가동 전 테스트, 시스템 가동, 안정화 과정을 운영 팀과 함께 헤쳐나가면서 2년 6개월간의 긴 여정을 좋은 결과로 마무리했다. 이전엔 공감되지 않았던 DevOps라는 단어가 프로젝트 마무리 단계서부터 크게 공감되었다.

엔지니어가 코드를 작성하고, 빌드하고, 직접 시스템에 배포 및 서비스를 실행시킨다.
사용자와 끊임없이 인터랙션(interaction)하면서 서비스를 개선해 나가는 일련의 과정이자 문화이다.

프로젝트 중간 단계로 접어들면서 운영 팀과 함께 협업하는 처음 시점에 나는 오만했다. 새로운 아키텍처, 새로운 기술들에 익숙해진 나는 운영 팀은 기술력이 낮은 조직이라 생각했다. 시스템 가동과 동시에 내 생각은 멍청했다는 것이 밝혀졌다. 신규 시스템은 가동 시점에 크게 불안정하였고, 현장의 불평과 불만은 끊이지 않았다. 이때 운영 팀의 운영 노하우, 비즈니스 전문성이 빛을 발했다. 현장에서 원하는 건 IT 지식이 뛰어난 사람이 아닌 비즈니스적인 대화가 통하는 사람이었다.

익숙하지 않은 현장 용어
현장에서 발생되는 현상에 대해서만 설명하는 사용자
다른 시스템과의 인터페이스를 통한 업무 수행시 찾기 힘든 문제의 원인

이런 것들이 나를 괴롭히는 동안 운영 팀원들은 현장 사람들과 대화하고, 문제를 일으키는 시스템 모듈들을 고치기 위해 현상을 분석했다. 사용자들과 비즈니스 도메인에 관련된 의사 소통이 시스템을 개선을 위해 중요하다는 것을 깨닫는 값진 경험이었다.

1. Characteristic of DevOps Team

데브옵스 팀은 다음과 같은 특징들을 가진다.

  • Cross Functional Team
    • 하나의 팀에 각각 다른 역할을 할 수 있는 팀원들로 모아 전체 엔드-투-엔드(end-to-end) 서비스를 운용할 수 있도록 한다.
    • 뛰어난 개발자이자 비즈니스 전문성까지 갖추고 있는 인원들만 있다면 좋겠지만 현실은 그렇지 않다.
  • Widely Shared Metris
    • 팀 전체가 기준으로 삼을 수 있는 서비스에 대한 공통적인 지표(metric)가 필요하다.
  • Automating Repetitive Tasks
    • 반복적인 작업을 툴을 이용해서 자동화한다.
    • CI/CD 툴을 통해 빌드, 테스트에서 배포까지의 과정을 자동화하여 관리한다.
  • Post Mortems
    • 장애나 이슈가 있을때 처리 후에 그 내용을 전체 팀과 공유해야 한다.
  • Regular Release
    • 시스템은 정기적으로 배포되어야 한다.
    • 정기적인 배포는 많은 협력이 필요한 작업이다.
    • 이 과정은 개발, 테스트 그리고 배포 과정을 거쳐야 한다.
    • 배포가 끝나면 DevOps 팀은 다음 릴리즈를 준비해야 한다.

2. Devops Team’s Development Cycle

데브옵스 팀은 다음과 같은 개발 사이클을 가진다.

  1. 사용자의 니즈(needs)와 VOC(Voice Of Customer) 수집과 분석
  2. 사용자 스토리 작성(요구 사항 작성)
  3. 사용자 스토리에 대한 스코프(scope) 정의 및 우선순위 지정
  4. 스테이크홀더(stakeholder)에 대한 리포팅 및 관리 (내부 영업, 보고 등)
  5. 다른 프로젝트와 연관성 관리
  6. 필요의 경우 솔루션 (오픈소스 또는 상용) 평가 및 도입
  7. 개발
  8. 테스트
  9. 릴리즈(release)
  10. 보안 관리, 컴플라이언스(compliance) 관리 (개인 정보 보호, 국가별 법적 사항 확인 등)
  11. 서비스 운영, 모니터링
  12. 고객 지원 (Customer Support)

3. Devops Team’s Devlopers

데브옵스 팀 개발자의 역량은 다음과 같다.

  • 코딩 능력은 필수
    • Devops 엔지니어는 기본적으로 개발자이기 때문에, 개발을 위한 기본적인 코딩 능력을 요구한다.
    • 만약 시스템 운영에 치우친 엔지니어라면 자동화를 위한 스크립트 작성 능력은 필수이다.
  • 다른 사람과 잘 협업하고 커뮤니케이션할 수 있는 능력
    • Devops는 큰 틀에서 협업 문화이다.
    • 시작 자체가 개발과 운영간의 소통 문제를 해결하고자 한 것이기 때문이다.
    • 다른 팀원의 의견을 존중하고 문제를 함께 해결해나갈 수 있는 오픈 마인드 기반의 커뮤니케이션 능력이 매우 중요한다.
  • 프로세스를 이해하고 때로는 그 프로세스를 재정의할 수 있는 능력
    • Devops는 언뜻 보기에는 정형화된 프로세스가 없어 보일 수 있다.
    • 테스트 자동화, 배포, 그리고 요구 사항에 대한 수집 및 정의 등은 모두 프로세스이다.
    • 프로세스를 이해하고 준수하며, 같이 만들어 나갈 수 있는 능력을 가져야 한다.

REFERENCE

카테고리:

업데이트:

댓글남기기