본문 바로가기
[Cloud & Infrastructure]/[Docker]

[DevOps] DevOps에 대해 알아보자

by 코드몽규 2022. 3. 3.
반응형

데브옵스 관련 도서를 읽고 내가 읽은 내용을 간단하게 정리하고 싶었다. 

 

데브옵스(DevOps)란 무엇일까?

 

아직 내 수준에서 감히 정의하고 정리할 수 있는 분야가 아니라고 생각한다.

 

그럼에도 모두가 볼 수 있는 블로그에 관련 내용을 정리하는 목적은 다음과 같다.

 

1. 최대한 객관적인 자료를 기준으로 정리하고 싶어서 

2. 내 생각이 매우 높은 확률로 틀릴 수 있기 때문에

(*다른 이들의 피드백의 필요성)


데브옵스란(DevOps)란?

  DevOps는 Dev(개발)와 Ops(운용)가 긴밀히 협조, 연계하여 비즈니스 측면의 가치를 높이는 근무 방식과 문화이다.
DevOps를 어떤 하나의 용어 또는 뜻이라고 생각하고 접근한다면 이해하기 매우 어려울 것이다. 왜냐하면 DevOps는 앞서 말했듯이 개발과 운영의 관계를 뜻하기도 하고 이를 통해 일하는 방법이 될 수 있으며 더 나아가 개발 프로세스 설계 등 조직의 구성, 문화를 모두 담고 있기 때문이다. 쉽게 말해 DevOps는 폭 넓은 배경을 기반으로 다양한 분야에서 활용되며 탄생한 개념이다. 이를 이해하기 위해서는 DevOps가 왜필요한지 어떤 탄생 배경을 갖고 있는지를 살펴보는 게 중요하다.

DevOps의 탄생배경

  • 애자일 개발에 의한 계속적인 개발로의 변화
  • 계속적인 개발로 인해 필요로 되는 운용 과제들

 

 서비스 개발에서 전통적인 개발 (폭포수 모델, 계획 기반 개발)과 애자일 개발 프로세스가 존재한다.

둘의 차이점은 무엇일까? 그림으로 쉽게 살펴보자.

 

 

  • waterfall (폭포수 모델)

 서비스 개발에 오랜 기간 이용되어 온 전통적인 개발 모델이다. 개발 공정을 분할하고 수행하여 이전 공정이 끝나지 않으면 다음 공정이 진행될 수 없는 개발 형태를 갖고 있다. 각 공정마다 확실하게 완료된 상태로 진행해감으로써 시스템 전체의 품질을 향상하는 방식이므로 매우 많은 시간이 필요하다.

 

  • agile (애자일 모델)

 애자일이란 '민첩함, 기민한, 날렵함, 좋은 것을 빠르고 낭비 없게 만드는 것 ' 에 대한 뜻이며 이를 중점으로 두고 소프트웨어 개발을 하기 위한 방법에 대한 이론이다. 즉, 특정한 방법론이 아니라 개발을 효율적으로 진행하는 계속적 개발 방식의 프로세스를 뜻 한다.

 

 

애자일 방식의 개발로 인해 개발과 운용의 서로 간의 영역의 벽이 허물어졌고,

이를 관리하기 위한 운용 과제가 생겨났다.

운용과제 해결을 위해 여러 토의를 했으며 이로 인해 중요한 개념이 탄생한다.

바로 '인프라는 코드이다(Infrastructure is code)'이다.

이는 Dev와 Ops는 (개발과 운용을)을 같은 장소에서 동일한 것으로 본다라는 개념이다. 

 

쉽게 정리하자면, 

 

1. 전통적인 서비스 개발에서 애자일 서비스개발 방식으로 전환

2. 애자일 서비스의 지속으로 개발과 운용의 경계가 허물어짐

3. 그로 인해 운용 과제가 생겨났으며 이를 해결하기 위한 수단으로 devops개념이 생김


DevOps 프로세스


프로비저닝 (Provisioning)

운용 과제 해결을 위한 수단인 DevOps의 인프라 코드화는

서버와 스토리지, 네트워크 등 인프라에 대한 설정을 수행하는 인프라 구성 관리 (provisoning)에 의해 발전함.

 

쉽게 말해, 프로비저닝은 IT 인프라를 설정하는 프로세스이다. 이러한 프로비저닝에는 서버, 네트워크, 사용자 프로비저닝, 서비스 프로비저닝등 다양한 유형이 있다.

 

과거에는 이러한 IT인프라 프로비저닝은 서버의 하드웨어 구성부터 수동으로 하나하나씩 맞춰가면서 작업을 진행했지만

 

오늘날에는 인프라가 소프트웨어화 되어 있는 경우가 많으며 

가상화와 컨테이너 덕분에 프로비저닝 프로세스 속도는 높이고 하드웨어적 관리를 진행할 필요가 없어지게 됐다.

 

즉, 과거에는 프로비저닝 프로세스를 구축하기 위해 하드웨어서부터 차근차근 준비해야 한다면 이제는 그러한 과정들이 엄청나게 간소화되고 자동화되었다는 것이다.

 


DevOps의 연계 도구를 형성하는 요소

(*데브옵스를 도와주는 여러 도구들이 어떤 바탕을 두고 사용되는가 정도의 느낌만 얻어가자)

 

  • 추상화: 모든 리소스를 추상화하여 어떠한 플랫폼의 차이도 흡수하고, 전문성과 복잡성을 절감하는 것
  • 자동화: 추상화된 리소스 이용의 자동화를 가능하게 하고, 전문성이나 개발과 운용을 하는 인적 부담을 줄여주는 것
  • 공통화: 공통의 버전 관리 시스템, 커뮤니케이션 도구를 이용하여 정보를 가시화하고 개발과 운용의 긴밀한 관계를 구축하는 것
  • 지속적인 통합: Devops의 개발/구축 방법을 통일화하여 개선 속도를 신장하는 것
  • 모니터링: 리소스 정보를 일원화하여 가시화하고 Devops가 긴밀하게 협력할 수 있는 관계를 구축하는 것

 


여기까지  devops가 무엇인지 왜 발전하게 되었는지 알아보는 시간을 가졌다. 

솔직히 아직까지도 데브옵스의 진정한 의미의 1/10도 이해를 하지 못한 것 같다 ㅎㅎ...

 

하지만 부족하더라도 이런 식으로 정리를 하고 넘어가는 것이 중요하다고 생각한다.

 

다음 포스팅에서는 개인의 입장에서 devops환경을 만들어보는 실습을 통해 조금 더 자세히 알아보겠다.

반응형

댓글