본문 바로가기

BackEnd/AWS

DevOps란?

반응형


DevOps

 


정의

DevOps = Development(개발) + Operations(운영) 의 합성어
소통, 협업, 통합 및 자동화를 강조하는 소프트웨어 개발 방법론



정확한 정의가 존재하지 않는 추상적 개념이지만 소프트웨어를 알맞은 시기에 출시하기 위해 개발과 운영이 상호의존적으로 대응해야 한다는 의미입니다. 즉, 개발과 운영의 경계를 허물고 통합하고자 하는 문화 혹은 철학이라고 할 수 있습니다.


DevOps가 필요한 이유

소프트웨어 개발은 아래와 같은 라이프사이클(생애주기)을 갖고 있습니다.

SDLC(Software Development Lifecycle)

각 단계별로 많은 커뮤니케이션이 필요합니다. 설계자가 설계한 내용을 개발자가 이해해야 하고, 개발자가 만든 소프트웨어를 테스터가 테스트 한 후 그에 맞는 피드백을 전달하는 등의 소통이 적지 않습니다.

DevOps는 이러한 커뮤니케이션을 원활하게 하도록 하기 위해 필요합니다. DevOps는 개발자가 소프트웨어의 생애주기 중 여러 단계에 직접 참여하는 것이 소통에서 생기는 문제점들을 해결할 수 있음을 제시합니다.

Netflix(넷플릭스)에서 제시한 모델

넷플릭스는 개발자가 직접 소프트웨어 생애주기의 전체에 참여하는 모델을 제시했습니다.

출처: https://netflixtechblog.com/full-cycle-developers-at-netflix-a08c31f83249


DevOps는 어떻게 하는 것인가?

DevOps는 패러다임이고 문화이기 때문에 방법을 제시하지 않습니다.
"개발과 운영의 벽을 허물어 더 빨리 자주 배포하자!" 는 목표를 갖고 있습니다.
이러한 목표를 달성하기 위해서 여러 조직에서 실천방법을 제시하고 있습니다.

조직별 DevOps 실천 방법

1) AWS


지속적 통합(Continuous Integration)
개발자가 만든 변경사항에 대해서 빌드 및 테스트를 진행해본 후 중앙코드 저장소에 통합을 함으로써 빠르게 버그를 발견하고 제품의 품질을 보장할 수 있게 하는 소프트웨어 개발 방법입니다.

지속적 배포(Continuous Delivery)
개발 결과물을 자동으로 개발환경이나 운영환경으로 배포하는 자동화된 파이프라인을 구축합니다.

마이크로서비스(Micro-services)
규모가 큰 서비스를 여러 마이크로 서비스로 나눠 빌드타임과 배포타임을 단축시킵니다.

IaC(Infrastructure as Code)
서비스를 배포함에 있어서 인프라에도 변경사항이 있을 수 있습니다. 이러한 인프라에도 자동화시켜 빠르게 적용하기 위해서는 인프라 또한 자동화된 관리가 필요하게 됩니다. 따라서 Infrastructure를 Code로 관리하라는 것입니다.

모니터링과 로깅(Monitoring & Logging)
개발자들에게 제품의 메트릭과 로그데이터를 중앙에서 확인할 수 있는 환경을 제공하게 되면 개발자들이 직접 운영에 참여함으로써 제품에 문제가 발생했을 시에 빠른 문제해결이 가능하도록 합니다.

소통 및 협업(Communication & Collaboration)
사내에서 사용하는 slack과 같은 메신저시스템이나 jira같은 시스템 등을 활용하는 것도 굉장히 중요한 활동입니다.

2) Flicker

변화에 대응하기 위한 도구

자동화된 인프라(Automated Infrastructure)
버전관리공유(Shared Version Control)
쉬운 빌드 및 배포(One-step Build and Deploy)
기능 활성화 스위치(Feature Flag)
메신저 봇(IRC and IM Robot

변화에 대응하기 위한 문화

존중(Respect)
신뢰(Trust)
실패에 대한 긍정적인 자세(Healthy Attitude about Failure)
비난하지 않기(Avoiding Blame)

 


 

반응형