DevOps 데브옵스란 무엇이고 어떤일을 할까 ? (CI/CD 파이프라인)

개발을하거나 개발공부를 하면서 한번쯤은 들어보거나 처음들어보는 사람도 있을겁니다.

저는 비전공자로 부트캠프로 개발공부를 시작하게 되었는데 그 부트캠프가 바로 DevOps 부트캠프였었습니다.

이 당시 개발 분야에 대한 지식도 전무했고, 단순히 요즘 뜨는 직군이고 클라우드의 중요성이 점점 확대 됨에따라,

DevOps 직군의 중요도는 점점 더 커질 것이라는 것에 지원하여 4개월동안 공부를 하였습니다.

비록 짧지만 4개월 동안 DevOps에 대해 많은 것을 배울 수 있었고 DevOps가 무엇인지 어떤일을 하는지 알리고자 이 글을 작성하게 되었습니다.

 

DevOps란 ?

DevOps는 개발(Development) 와 운영(Operation)이 합쳐져 탄생한 개발 방법론입니다.

이렇게 보면 개발과 운영을 다하는게 DevOps 인가? 생각할 수 있습니다.

결론부터 말하면 그렇지 않습니다.

DevOps의 탄생비화를 보면 개발팀과 운영팀의 생각 차이에 대해 인지하고 그 간극을 줄여보자는 데서 시작되었다고 합니다.

이런 비화에서 시작해서 더 나아가 소프트웨어 개발, 업무의 자동화 등 개발자의 생산성을 극대화 시키기 위한 조직입니다.

 

 

DevOps의 5가지 철학
  • 문화 - DevOps를 통해 하나의 문화를 만들어 나갑니다.

사람이 모여 팀이 존재하고 그 구성원간 의사소통이 중요합니다.

의사소통이 원할하게 이루어져야 좋은 문화가 만들어 질 수 있습니다.

 

  • 자동화 - 자동화를 통해 효울성과 빠른 속도를 지향합니다.

프로그래밍 언어와 도구를 통해 자동화를 하고 재사용 가능한 인프라를 만듭니다.

지속적 통합 및 배포를 통해서 변경에 따른 소요시간을 최소화합니다.

변경에 유연하고 탄력적인 서비스를 구축해야합니다.

어떠한 사고에 대해서도 예측하고 대응할 수 있어야합니다.

 

  • 측정 - 지표를 측정하여 지속적으로 개선해 나갑니다.

무엇인가 변경되고 변화되었으면 항상 측정을 통해 예측 불가능한 영역을 최대한 예측 가능한 영역으로 바꾸는 것입니다.

지속적으로 잘 나아가고 있는지 문제는 무엇이 있는지 항상 측정해야합니다.

 

  • 공유 - 공유를 통해 함께 발전해 나갑니다.

구성원 모두가 데이터를 접근할 수 있고 확인할 수 있어야합니다.

문제는 개인의 문제가 아니고 구성원 전체의 문제로 혼자가 아닌 팀과 함께 해결해야합니다.

혼자만이 발전해선 큰 결과를 얻을 수 없습니다. 공유를 통화 팀과 함께 발전해 큰 결과를 얻을 수 있습니다.

 

  • 축적 - 기록을 축적하여 자산을 만들어 나갑니다.

모든 일의 성공과 실패의 결과물들은 항상 축적되어야 합니다.

이런 말이 있습니다 " 실패는 성공의 어머니다 ". 실패가 있기에 성공이 있는 법입니다.

실패된 이유를 축적하거나 성공한 비결을 축적해 후에도 큰 도움이 될 수 있습니다.

 

 

결론적으로 위 철학을 바탕으로해 보면

DevOps는 어떤 요구사항을 효율적으로 만족시키기 위해, 일을 자동화하며 변경사항 지표들을 측정하고,

공유하며, 이 모든 결과물들을 지속적으로 축적해 나아가는 문화를 만들어가는 철학, 방법론, 기술인 것입니다.

 


DevOps의 이점

  • 속도

작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하고, 좀 더 효율적으로 비즈니스 성과를 창출할 수 있습니다.

예를 들어 MSA와 지속적 전달을 사용하면 팀에서 서비스를 주도적으로 운영하여 업데이트를 좀 더 빠르게 릴리스할 수 있습니다.

 

릴리스의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선할 수 있습니다.

새로운 기능의 릴리스와 버그 수정 속도가 빨라질수록 고객의 요구에 더 빠르게 대응하여 경쟁 우위를 강화할 수 있습니다. 

지속적 통합과 지속적 전달은 빌드에서 배포까지 소프트웨어 릴리스 프로세스를 자동화하는 방식입니다.

 

최종 사용자에게 지속적으로 긍정적인 경험을 제공하는 한편 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장합니다. 

지속적 통합 및 지속적 전달과 같은 방식을 사용하여 각 변경 사항이 제대로 작동하며 안전한지 테스트합니다. 

모니터링과 로깅 방식을 통해 실시간으로 성능에 대한 정보를 얻을 수 있습니다.

 

규모에 따라 인프라와 개발 프로세스를 운영 및 관리합니다.

자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리할 수 있습니다. 

 

주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축합니다.

개발자와 운영팀은 긴밀하게 협력하고, 많은 책임을 공유하며, 워크플로를 결합합니다.

이를 통해 비효율성을 줄이고 시간을 절약합니다

(예: 개발자와 운영팀 간의 인도 기간 단축, 실행되는 환경을 고려한 코드 작성 등)

 

제어를 유지하고 규정을 준수하면서 신속하게 진행할 수 있습니다.

자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 그대로 유지하면서 DevOps 모델을 도입할 수 있습니다.

 


DevOps가 하는 업무들

제가 경험해본 일들만 기술되어 있어

DevOps가 하는 모든 업무가 포함되있지 않을 수 있습니다.

 

  • 네트워크

가상 네트워크 및 Ops 상 물리 네트워크 구성한다. 프록시 / VPN 서버 운영을 바탕으로 임직원들이 사설 네트워크를 사용할 수 있도록 한다. 또한 DNS 서버를 운영해 회사와 관련된 도메인을 관리한다.

 

  • 오케스트레이션

워크로드가 많을 경우 쿠버네틱스/ECS/Nomad와 같은 오케스트레이션 시스템 구축 및 운영을 하여 실제 서비스를 안정적으로 운영하도록 한다. 

 

  • 모니터링

모니터링 오픈소스로 대표적인 프로메테우스, 그라파나 같은 모니터링 프로그램을 이용해 필요한 로그를 확인하고 예측불가한 상황에 대비한다.

 

  • CI/CD 파이프라인

  • 지속적 통합 ( CI )

개발을 하면서 지속적으로 코드에 대한 통합을 진행함으로써 품질을 유지하자는 것 
개발자를 위한 자동화 프로세스(개발자간의 코드 충돌을 방지하기 위한 목적) 
정기적인 빌드 및 테스트(유닛테스트 및 통합테스트)를 거쳐 공유 레포지터리에 병합되는 과정 
전체 애플리케이션을 구성하는 서로 다른 모듈에 이르기까지 모든 것에 대한 테스트를 수행 
자동화된 테스트에서 기존 코드와 신규 코드 간의 충돌이 발견되면 CI를 통해 이러한 버그를 빠르게 수정 가능

 

  • 지속적 배포 ( CD )

 CI 프로세스를 통해 개발중에 지속적으로 빌드와 유닛 및 통합 테스트를 진행하고, 테스트를 통과한 코드를 테스트서버와 운영서버에 자동으로 배포
운영팀이 보다 빠르고 손쉽게 애플리케이션을 Production으로 배포 가능 
Production 환경으로 배포할 준비가 되어 있는 코드베이스를 확보하는 것이 목표

 

  • 클라우드 운영

AWS 나 GCP 같은 클라우드 서비스를 이용해 개발자들이 이용할 수 있는 개발 환경을 제공하고 운영한다.

 


참고자료
https://aws.amazon.com/ko/devops/what-is-devops/