DevOps, Development and Operations

3 분 소요


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

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

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

엔지니어가 프로그래밍하고, 빌드하고, 직접 시스템에 배포 및 서비스를 RUN한다.
그리고 사용자와 끊임없이 interaction 하면서 서비스를 개선해 나가는 일련의 과정이자 문화이다.

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

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

이런 것들이 저를 괴롭히는 동안 운영 요원들은 현장 사람들과 대화하고 현상에 대한 분석을 통해 문제를 일으키는 시스템 모듈을 하나, 둘씩 고쳐나갔습니다. 고객과의 비즈니스적 의사소통을 통해 프로그램을 개선해나가는 과정의 중요성을 새삼 깨닫게 되는 경험이었습니다.

DevOps 특징

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

Devops 팀의 개발 싸이클

  1. 사용자의 NEEDS 분석. VOC 수집
  2. 사용자 스토리 작성 (요구 사항 작성)
  3. 사용자 스토리에 대한 SCOPE 정의 및 우선순위 지정
  4. Stakeholder에 대한 리포팅 및 관리 (내부 영업, 보고 등)
  5. 다른 프로젝트와 연관성(DEPENDENCY) 관리
  6. 필요의 경우 솔루션 (오픈소스 또는 상용) 평가 및 도입
  7. 개발
  8. TESTING
  9. RELEASE
  10. Security 관리, Compliance 관리 (개인 정보 보호, 국가별 법적 사항 확인 등)
  11. 서비스 운영, 모니터링
  12. 고객 지원 (Customer Support)

Devops 팀 개발자의 필요 역량

코딩 능력은 필수

Devops 엔지니어는 기본적으로 개발자이기 때문에, 개발을 위한 기본적인 코딩 능력을 요구합니다. 만약 운영이나 시스템 쪽에 치우친 엔지니어라면 자동화를 만들 수 있는 스크립트 작성 능력 등은 필수입니다.

다른 사람과 잘 협업하고 커뮤니케이션할 수 있는 능력

Devops는 큰 틀에서 협업 문화입니다. 시작 자체가 개발과 운영간의 소통 문제를 해결하고자 한 것이기 때문입니다. 다른 팀원의 의견을 존중하고 문제를 함께 해결해나갈 수 있는 오픈 마인드 기반의 커뮤니케이션 능력이 매우 중요합니다.

프로세스를 이해하고 때로는 그 프로세스를 재정의할 수 있는 능력

Devops는 언뜻 보기에는 정형화된 프로세스가 없어 보일 수 있지만, 테스트 자동화, 배포, 그리고 요구 사항에 대한 수집 및 정의 등은 모두 프로세스입니다. 해당 팀의 모델이나 서비스의 성격에 따라서 만들어 나가야 합니다. 그래서 프로세스를 이해하고 준수하며, 같이 만들어 나갈 수 있는 능력을 가져야 합니다.

OPINION

개발 프로젝트에 대한 사이클을 한번 겪고, 운영 프로세스에 대해 익숙해지는 중에 DevOps 개념에 대한 글을 정리하다보니 예전보다 성장한 저의 모습이 느껴집니다. 예전에 DevOps 개념만 정리한 글과는 달리 다시 되짚어보는 현재 포스트에는 저의 경험이 녹아 있습니다. 이전엔 공감하지 못했던 내용들도 지금 읽어보니 저의 경험들이 떠오를 정도로 DevOps라는 용어가 친숙해졌습니다.

DevOps를 한마디로 정의를 내려보려합니다.

DevOps는 하나의 일하는 문화이며, 일하는 사람들간의 의사소통을 통해 시스템 운영과 개발이 원할히 이루어질 수 있도록 하는 것입니다.

REFERENCE

카테고리:

업데이트:

댓글남기기