DevOps(Development and Operations)

2 분 소요


0. 들어가면서

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

DevOps 관련된 글 중에 조대협님의 블로그::개발과 운영의 조화 포스트에 공감되는 부분이 많아 이를 참고하여 저의 경험을 글로 써보았습니다.

신규 시스템 개발을 위한 프로젝트에 주니어 개발자로 입사했었고, 현재는 프로젝트가 마무리 된 상태입니다. 개발팀은 운영팀으로 전환되었고, 저는 시스템을 운영하며 지내고 있습니다.

개발 프로젝트 초기에 기존 시스템 운영팀과 제가 있었던 개발팀과 서로 교류는 없었습니다. 프로젝트 중간 단계에선 운영팀의 비즈니스 노하우를 토대로 현재 운영되는 시스템과 신규 시스템의 간극을 좁히기 위한 협업을 수행하였습니다. 막바지에 이르러서는 가동 전 테스트, 시스템 가동, 안정화 과정을 운영팀과 함께 헤쳐나가면서 2년 6개월간의 긴 여정을 좋은 결과로 마무리하였습니다. 이전엔 공감되지 않았던 DevOps라는 단어가 프로젝트 마무리 단계서부터 저에게 대단히 크게 공감되었습니다.

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

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

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

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

1. DevOps 특징

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

2. Devops 팀의 개발 싸이클

  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 개발자의 필요 역량

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

REFERENCE

카테고리:

업데이트:

댓글남기기