본문 바로가기

Infrastructure/DevOps

[DevOps] DevOps란

DevOps

이번 장에서는 DevOps란 무엇이며 어떠한 업무를 담당하는지에 대해서 알아보도록 한다.

이전 회사에 백엔드 개발자로 입사하여 근무하던 도중 DevOps팀의 팀장님이 인수인계를 받을 새로운 담당자가 오기 전에 퇴사를 하는 상황이 발생하였다. 결국 인프라 운영 경험이 있던 내가 해당 업무를 인수인계 받으면서 DevOps 업무를 진행하게 되었다. 정확히는 AWS 클라우드를 운영하는 업무를 담당하게 되었다. 이러한 경험을 바탕으로 최근 DevOps 엔지니어로 새로운 회사에 입사하게 되었는데… 주변에서 “DevOps 엔지니어가 뭐 하는 사람인데?” 라는 질문을 받을 때 마다 답변을 하기가 힘들었다. 곰곰히 생각해보니 필자는 DevOps를 단순하게 “인프라 운영과 개발을 동시에 하는 사람”으로 정의하고 있었다. 그러다보니 남들에게 자신의 업무를 설명하기 힘들게 되었고 이번에 여러 글을 참고하여 DevOps란 과연 무엇이고 어떠한 목적을 가지고 업무를 진행하는가에 대해서 정리해보고자 한다.

DevOps가 하는 업무와 목적은 회사마다 또는 정의하는 문서마다 내용이 다르다. 요즘 많은 회사에서 인프라 엔지니어를 DevOps 엔지니어로 칭하는 것처럼 보인다. 본 문서는 최대한 AWS에서 정의하는 내용을 기반으로 작성하고 마지막에 정리하는 방식으로 작성해보려 한다.


DevOps란

DevOps는 애플리케이션과 서비스를 빠른 속도로 제공할 수 있도록 조직의 역량을 향상시키는 문화 철학, 방식 및 도구의 조합입니다.
DevOps 모델에서는 개발팀과 운영팀이 더 이상 “사일로”에 묶여 있지 않습니다.
두 팀이 단일팀으로 병합되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 전체 애플리케이션 수명 주기에 걸쳐 작업하고 단일 기능에 한정되지 않는 광범위한 기술을 개발합니다.
이러한 팀에서는 DevOps 방식을 사용하여 속도가 느리고 수동으로 수행되던 프로세스를 자동화합니다. 엔지니어는 이전 같았으면 다른 팀의 도움이 필요했을 코드 배포 또는 인프라 프로비저닝과 같은 작업을 독립적으로 수행할 수 있으며, 따라서 팀의 작업 속도가 더욱 빨라집니다.

What is DevOps(AWS)

AWS에서 작성한 “데브옵스란 무엇인가” 문서를 살펴보면 결국 개발팀과 운영팀이 하나의 팀으로 병합되어 단일 기능에 한정되지 않고 애플리케이션의 수명 주기 모두에 관여할 수 있도록 해주는 모델을 데브옵스라고 정의하고 있다.


DevOps는 development(개발)와 operations(운영)가 합쳐진 단어이지만, 단순히 각각의 용어를 결합한 것 이상의 포괄적인 아이디어와 방식을 나타냅니다. DevOps에는 보안, 협업 방식, 데이터 분석을 비롯해 기타 여러 요소가 포함됩니다.
DevOps는 하나의 아이디어가 사용자에게 가치를 제공할 수 있도록 운영 환경에서 개발로부터 배포로 진행되는 프로세스의 속도를 높이는 접근 방식을 의미합니다. DevOps를 확립하면 셀프 서비스와 자동화를 통해 다양한 이점과 경쟁력을 얻을 수 있습니다. 대개 표준 개발 환경에서 코딩 작업을 하는 개발자는 IT 운영 담당자와 긴밀하게 협력하여 소프트웨어 빌드, 테스트, 출시 속도를 가속화할 수 있습니다.

DevOps란 무엇일까요(Red Hat)

Red Hat에서 작성한 “데브옵스란 무엇일까요" 문서를 한 문장으로 정리해보면 “개발자와 IT 운영 담당자가 협력하여 소프트웨어의 출시 속도를 증진시키는 것"으로 정의가 된다.


AWS와 Red Hat의 글을 읽어보면 결국 DevOps는 애플리케이션을 운영하기 위한 하나의 방법론 인 것을 알 수 있다. 그렇다면 “왜 많은 기업들에서 DevOps팀, DevOps엔지니어 라는 표현을 쓰는 것일까?”라는 의문이 해결되지 않아서 또 다른 문서를 찾아보았다.

DevOps는 소프트웨어 개발팀과 IT팀간의 프로세스를 자동화하고 통합하는 일련의 관행, 도구 및 문화적 철학입니다. DevOps로의 전환은 2007년경에 소프트웨어 개발 및 IT 운영 커뮤니티에서 코드를 작성한 개발자가 코드를 배포하고 지원하는 운영팀과 별개로 일했던 소프트웨어 개발 모델에 대한 우려를 제기하면서 시작되었습니다.
DevOps팀에는 소프트웨어 배포의 속도 및 품질을 높이기 위해 제품 수명 주기 전반에 걸쳐 공동 작업을 수행하는 개발자와 IT 운영자가 포함됩니다. 이것은 새로운 업무 방식이며 문화적 변화로, 협력하는 팀과 조직에 상당한 영향을 미칩니다.
DevOps 모델에서 개발팀 및 운영팀은 더 이상 “사일로화"되지 않습니다. 때로는 이 두 팀이 단일 팀으로 합쳐져 엔지니어가 개발 및 테스트에서 배포 및 운영에 이르는 전체 애플리케이션 수명 주기에 걸쳐 작업하며 다양한 분야의 기술을 보유하게 됩니다.
DevOps팀은 도구를 사용하여 프로세스를 자동화하고 가속화하므로 안정성을 높일 수 있습니다. DevOps 도구 체인으로 팀은 지속적 통합, 지속적 배포, 자동화 및 공동 작업을 비롯한 중요한 DevOps 기본 사항을 해결할 수 있습니다.

DevOps란(Atlassian)

다른 정의에는 DevOps를 하나의 방식으로만 정의하였지만 드디어 구체적으로 DevOps팀 이라는 단어가 등장하였다. Atlassian의 문서에 따르면 DevOps팀에는 개발자와 IT 운영자가 포함되어 프로세스를 자동화하고 가속화한다고 적혀있다.

많은 기업들에서 인프라를 운영하는 팀을 DevOps팀이라고 정하고 구인공고를 올려두었다. 이러한 부분때문에 DevOps팀을 인프라 운영팀, 클라우드 운영팀으로 착각하고 있지만 정확히는 개발팀과 운영팀의 경계를 허물고 하나로 합쳐진 팀이라고 할 수 있다. 이 말은 DevOps팀에는 개발자도 있고 IT 운영자도 있다는 말이 된다.

지금까지 “데브옵스란 무엇인가”에 대해서 알아보았다. 많은 문서들을 참고해서 정리해보았는데 우리 주변의 많은 기업들이 사용하는 의미와는 조금은 다른 의미를 가지고 있다는 것을 알 수 있다. 또한 데브옵스 엔지니어라는 표현도 조금은 이상한 표현이라는 것을 알게 되었다. 특히 같은 데브옵스 엔지니어라 하더라도 회사에 따라서 담당하는 업무가 다를 수 있다. 결국, 적어도 글을 적고 있는 현시점에 대한민국의 데브옵스 엔지니어는 개발과 운영을 전부 담당해야 하는 힘든? 직무라고 할 수 있다.


DevOps 관행

  • 지속적인 통합(Continuous Integration): 코드 변경을 소프트웨어 프로젝트에 통합하는 작업을 자동화하는 관행이다. 링크
  • 지속적인 배포(Continuous Delivery or Continuous Deployment): 지속적인 배포는 코드 변경 사항을 테스트/프로덕션 환경에 자동으로 배포하여 지속적 통합을 확대한다. 링크
  • 자동화: 팀이 높은 품질 소프트웨어를 개발하고 배포하는 프로세스를 훨씬 빠르게 진행하도록 지원한다. 자동화를 통해 코드 변경 사항을 소스 코드 리포지토리에 푸시하는 간단한 작업으로 빌드, 테스트 및 배포 프로세스를 트리거하여 이 단계에 소요되는 시간을 대폭 줄일 수 있다. 링크
  • IaC(Infrastructure as Code): 단순히 인프라 구성을 스크립팅하는 것뿐만 아니라 소스 제어, 코드 검토, 테스트 등을 사용하여 인프라 정의를 실제 코드처럼 다루는 것이다. 링크
  • 마이크로서비스: 애플리케이션을 서로 독립적으로 배포 및 운영할 수 있는 소규모의 서비스 모음으로 구축하는 아키텍처 기법이다. 링크
  • 모니터링: DevOps 팀은 계획, 개발, 통합 및 테스트, 배포, 운영부터 전체 개발 수명 주기를 모니터링하여 고객 경험의 수준이 낮아지면 신속하고 자동으로 대응할 수 있다. 링크

DevOps 장점

  • 속도: 작업 속도가 빨라지므로 고객을 위해 더 빠르게 혁신하고, 시장 변화에 더 잘 적응하면서 효율적으로 비즈니스 성과를 창출할 수 있다.
  • 신속한 제공: 릴리즈의 빈도와 속도를 개선하여 제품을 더 빠르게 혁신하고 개선할 수 있다. 새로운 기능의 릴리즈와 버그 수정 속도가 빨라질수록 고객의 요구에 더 빠르게 대응하여 경쟁 우위를 강화할 수 있다.
  • 안정성: 최종 사용자에게 지속적으로 긍정적인 경험을 제공하는 한편 더욱 빠르게 안정적으로 제공할 수 있도록 애플리케이션 업데이트와 인프라 변경의 품질을 보장한다. CI와 CD와 같은 방식을 사용하여 각 변경 사항이 제대로 작동하며 안전한지 테스트한다.
  • 확장: 규모에 따라 인프라와 개발 프로세스를 운영 및 관리합니다. 자동화와 일관성이 지원되므로 위험을 줄이면서 복잡한 시스템 또는 변화하는 시스템을 효율적으로 관리할 수 있습니다.
  • 협업 강화: 주인의식 및 책임과 같은 가치를 강조하는 DevOps 문화 모델에서 좀 더 효과적인 팀을 구축합니다. 개발자와 운영팀은 긴밀하게 협력하고, 많은 책임을 공유하며, 워크플로우를 결합한다.
  • 보안: 제어를 유지하고 규정을 준수하면서 신속하게 진행할 수 있다. 자동화된 규정 준수 정책, 세분화된 제어 및 구성 관리 기술을 사용함으로써 보안을 유지하면서 DevOps 모델을 도입할 수 있다.

지금 우리가 개발하고 운영하는 소프트웨어는 비즈니스의 모든 부분에서 핵심적인 구성 요소가 되었다. 기업은 온라인 서비스 또는 애플리케이션으로 제공되는 소프트웨어를 통해 온갖 종류의 디바이스에서 고객과 상호 작용한다. 데브옵스는 소프트웨어를 사용하여 물류, 통신, 운영 등과 같은 가치 체인의 모든 부분을 혁신함으로써 운영 효율성을 향상시킨다.


지금까지 1년 넘게 데브옵스 엔지니어로 일을 하면서 자신이 무엇을 이루고자 일을 하고 있는지 생각 한 번 안해보다가 드디어 “DevOps란 무엇인가”에 대해서 정리를 해보는 시간을 가지게 되었다. 이 글을 읽는 데브옵스 엔지니어들은 “데브옵스 엔지니어는 무슨 일을 하는데?” 라는 질문에 명쾌하게 답변할 수 있기를 바란다.


참고한 문서

'Infrastructure > DevOps' 카테고리의 다른 글

[DevOps] GitOps란  (0) 2022.09.15