DevOps는 development(개발)와 operations(운영)가 합쳐진 단어이며
신속한 애플리케이션과 서비스를 고객에게 제공하기 위한 것이 목적입니다.
이 목적을 달성하기 위해 조직 역량을 개선시키려는 방식 및 도구의 조합 또는
문화철학이라고도 합니다
이런 신속한 서비스 제공은 고객에게 신뢰를 주며 시장에서 좀 더 효과적으로 경쟁할 수 있습니다
미국 인터넷 기업 Flicker의 경우에는 하루에 10번 정도 Deploy를 한다고 합니다.
일반적인 인터넷 서비스 회사가 한달에 한번 업데이트 빨라야 일주일에 한번 정도라고 한다면
경쟁자체가 달라질 수 있다는 것입니다
DevOps를 설명하기 전에 기존 조직의 환경과 조건을 보자면
전통적인 IT조직은 개발팀과 운영팀이 나뉘어 개발팀은 운영팀에 결과물을 넘기면 끝이고
운영팀에서는 개발팀의 결과물을 올려서 문제가 있는지 확인하고 문제가 있으면 다시
개발팀에게 요청하여 결과물을 다시 받아서 올리고 하는 절차를 거치게 됩니다
개발팀과 운영팀의 역할이 완전히 서로 격리가 된 채로 협업 아닌 협업을 하고 있었던 것입니다
여기에 보안팀과 품질보증팀하고도 통합되려면 전체적인 애프리케이션 배포수명 주기는 상당히
지연될 수 밖에서 없는 구조였던 것입니다.
물리적으로 개발팀과 운영팀을 합친다고 신속한 DevOps가 갑자기 만들어지는 것은 아닙니다
팀을 합치거나 DevOps 조직을 만들거나 하는 것은 조직에 따라 결정하면 되는 것입니다
그러나 물리적인 조직 개편이 성공적인 DevOps의 결과로 이어지는 것은 더더욱 아닙니다
현업에서는 이러한 DevOps 방식으로 개발팀과 운영팀을 합쳐서 실제로 구성하는 조직도 있습니다.
개발자의 생산성과 운영의 안정성을 모두 한팀내에서 원할하게 소통하고 서로간의 필요한 효율성을 높이고
서비스의 품질을 개선하기 위해 노력하는 것입니다.
그러나 물리적인 팀의 구조를 따를 필요는 없습니다.
별도 조직이면서도 DevOps엔지니어를 도입하여 두팀간의 긴밀한 협업을 여러 자동화방식으로 풀어갈 수도
있으며, 품질보증팀과 보안팀과의 관계도 연결하는 관리도 자동화로 가능합니다.
때로는 엔지니어가, 프로그래밍(개발)하고, 빌드하고, 직접 시스템에 배포 및 서비스를 실행하고,
사용자와 끊임 없이 Interaction하면서 서비스를 개선하다는 설명도 있으나
아무리 작은 조직이라도 이렇게 한다는 것은 너무 혹사(?)하는 것이 아닐까 생각되기도 합니다.
다음의 몇가지 설명으로 이러한 DevOps를 성공적으로 이끌 수 있는 요소를 설명하면서
DevOps에 대해 더 이해를 해보도록 하겠습니다
첫째는 배포자동화 도구입니다
바로 여기에 DevOps방식(배포 자동화 등)을 사용하여 속도가 느리고 수동으로 진행하던 프로세스를
자동화합니다. 여기에는 빠르게 운영하는데 도움이 되는 기술 도구등을 사용합니다.
배포 이외에 보안과 관련된 규정 준수와 관리 기술, 정책등을 포함하기도 합니다
둘째는 기업의 기술문화 입니다
DevOps를 문화철학이라고 하는 이유는 개발팀과 운영팀과의 주인의식과 책임과 같은 문화를 정착시켜서
서로간의 많은 책임을 공유하고 실제 워크플로우를 합치기도 하며 시간을 절약하기도 합니다
셋째는 효율적인 CI/CD 입니다.
이와 같은 DevOps에는 인프라 관리와 프로비저닝을 수동프로세스가 아닌 코드를 통해 인프라를 관리하는
IaC (Infrastructure as Code)라는 개념도 포함합니다.
이것은 개발자에게 제공되는 개발환경, 테스트환경, 운영환경을 반복 가능하고 효율적으로 관리할 수 있습니다
DevOps는 CI(Continuous Integration), CD(Continuous Delivery) 를 가능하게 하는데요
CI는 배포이전까지의 단계인 공유 레파지토리인 Git이나 SVN에 빌드나 테스트,병합등으로 최종 릴리즈까지 통합하는 것을
자동화하는 것을 의미하며
궁극적으로는 버그를 신속하게 찾아 해결하고 스프트웨어 품질을 개선하며
새로운 업데이트의 검증 및 릴리즈의 시간을 단축하는 것에 있습니다
CD는 CI에서 릴리즈된 최종 결과물을 고객의 운영(Production)환경까지 릴리즈 되는 것을 의미하며
언제든지 복구등이 가능한 버전을 유지하는 것도 여기에서의 역할 이라고 할 수 있습니다
즉 CI/CD는 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하는 방식입니다.
다섯째는 모니터링과 로깅입니다
DevOps는 배포 사후 관리인 모니터링과 로깅을 통해 실시간으로 성능에 대한 정보도 얻을 수 있어야 하겠습니다
여섯째는 마이크로 서비스(MSA) 입니다.
DevOps에서 주도적으로 운영환경이 전통적인 방식이라면
이것을 마이크로서비스(MSA,Microservice Architecture)로 변경하게 되면
서비스를 주도적이며 업데이터를 좀 더 빠르게 릴리즈 할 수 있습니다
요약해 보겠습니다.
DevOps 정의는
신속한 애플리케이션과 서비스를 고객에게 제공하기 위한 것이 목적이며
Dev(개발)과 Ops(운영)간에 나뉘어진 장벽을 깨고 서로간의 협업을 중시하며
기존 소프트웨어 프로세스들 간의 관계(개발, 운영, 품질, 보안등)를 효율적인 자동화로
개선시키려는 방식 및 도구의 조합 그리고 문화철학 또는 협업철학 입니다
댓글