본문 바로가기

POST/Tech

개발자와 IT 및 비즈니스 리더를 위한 IT 주요 용어 입문서

“DevOps 구현의 주요 성과는 CI/CD 파이프라인입니다. CI/CD를 통해 고객에 대한 애플리케이션 제공 주기를 단축하며 사용자 개입을 최소화해 소프트웨어의 품질을 검증할 수 있습니다. CI/CD 파이프라인은 개발 및 운영 팀의 애자일 방식 협력을 통해 지원됩니다.”

위에서 나온 단어들의 뜻을 정확히 알고, 내용을 이해했나요? 앞뒤 이야기의 흐름만 보고 ‘대충’ 이해하고 고개를 끄덕인 경험은 없으신가요?

정확한 의미를 모른 채 위와 같은 기술과 개발 방식에 대해 논의를 하다 보면 크고 작은 혼동이 생길 수 있고 더 나아가 진행중인 프로젝트에 큰 혼란이 야기될 수 있습니다. 지금부터 개발자와 IT 및 비즈니스 리더를 위한 주요 용어 입문서를 확인해보고, 정확한 개념을 짚어보세요.

1. DevOps

DevOps는 개발(Development)과 운영(Operations)의 합성어로 소프트웨어 개발 방법론 중 하나로, 개발 담당자와 운영 담당자가 협력하여 개발을 진행하는 방식입니다. DevOps는 운영팀과 개발팀이 나눠져 있지 않고, 프로세스(개발, 배포, 운영) 단계를 하나의 팀이 관리한다는 것이 특징입니다.

DevOps를 확립하면 셀프 서비스와 자동화를 통해 다양한 이점과 경쟁력을 얻을 수 있습니다. DevOps 개발론 도입 전의 서비스 운영 방식 보다 시간 대비 효율성이 좋고, 코드를 자주 배포하기 때문에 리스트가 줄었으며 커뮤니케이션도 활발해집니다. 즉, 소프트웨어 빌드, 테스트, 출시 속도를 가속화할 수 있습니다.

IDC 연구 결과에 따르면 IT 리더의 85%가 DevOps 전략에 있어 현대적인 자동화가 매우 중요하다고 말합니다. 그 이유는 자동화를 도입할 경우 DevOps에 수반되는 지속적인 코드 변경을 인프라가 견딜 수 있고, 환경을 손쉽게 지속적으로 확장할 수 있다는 장점도 있기 때문입니다.

2. Agile

Agile의 사전적 의미는 ‘1. 날렵한, 민첩한 2. (생각이) 재빠른, 기민한’ 입니다. 소프트웨어에서 통용되는 애자일(Agile)이란, 신속한 반복 작업을 통해 실제 작동 가능한 소프트웨어를 개발하여 지속적으로 제공하기 위한 소프트웨어 개발 방식입니다. 작업 계획을 짧은 단위로 세우고 시제품을 만들어 나가는 사이클을 반복함으로써 고객의 요구 사항에 유연하고도 신속히 대응하는 방식입니다. 이와 반대되는 개념으로는 전통적 개발 방법론인 '워터폴(Waterfall) 방식' 입니다.

간혹 '애자일 방법론' 이라는 명칭으로 오해가 생기지만 엄밀히 따지자면 애자일은 일련의 규정이 아닌, 협업과 워크플로우를 바라보는 하나의 관점이며 가치 체계입니다.

Project Management Essentials의 창립 책임자인 Alan Zucker는 “애자일은 방법론이 아닌 사고 방식입니다. 협업, 시스템 사고 및 권한 부여의 원칙을 통합하는 작업 방식을 나타냅니다.” 라고 말했습니다.

애자일 프로세스를 추구하던 소프트웨어 세계의 거장들은 2001년에 ‘애자일 소프트웨어 개발을 위한 선언(Manifesto for Agile Software Development)’2이라는 선언문을 작성하고 원칙을 만들었습니다. 그 요지는 프로세스 자체보다는 팀원 간 상호작용, 문서보다는 동작하는 소프트웨어, 계약과 협상 보다는 고객과의 협력, 계획의 준수보다는 변화에 민첩한 대응에 더 큰 가치를 둔다는 것입니다. 즉, 계획의 완수가 아니라 고객에게 전달할 가치를 중시한다는 의미입니다.

3. CI/CD

CI/CD는 애플리케이션 개발 단계를 자동화해 보다 짧은 주기로 고객에게 애플리케이션을 제공하는 방법으로 기본적인 Agile 및 DevOps 원칙입니다. CI/CD의 기본 개념은 지속적인 통합, 지속적인 배포, 지속적인 서비스 제공입니다. CI/CD는 새로운 코드 통합으로 인해 개발 및 운영팀에 발생하는 문제 (일명 ‘인테그레이션 헬 (integration hell)’)을 해결하기 위한 솔루션입니다. 특히, CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 애플리케이션의 라이프사이클 전체에 걸쳐 지속적인 자동화와 모니터링을 제공합니다. 이런 구축 사례를 일반적으로 ‘CI/CD 파이프라인’이라고 부르며, 개발 및 운영팀의 애자일 방식 협력을 통해 지원됩니다.

(1) CI (Continuous Integration)

CI는 개발자를 위한 자동화 프로세스인 지속적인 통합 (Continuous Integration)을 의미합니다. CI를 성공적으로 구현하게 되면, 애플리케이션에 대한 새로운 코드 변경이 즉시 공유 리포지토리에 통합되기 때문에 여러 명의 개발자가 동시에 애플리케이션 개발과 코드 작업을 할 경우 발생할 수 있는 병합 충돌 문제를 해결해줍니다.

CI를 적용하기 이전에는 개발을 끝낸 뒤에 배포가 되어야만 코드에 오류가 없는지, 제대로 동작하는지를 검증하며 코드 품질을 관리할 수 있었습니다. 하지만 CI를 적용하게 되면 각자의 개발자가 자신이 구현해야 할 기능을 구현하면 됩니다. 개발자가 구현한 부분을 병합할 때 마다 자동화된 빌드와 테스트가 트리거 되어 실행되기 때문에 그 결과를 통해 배포 이전에 문제를 확인하고 해결할 수 있습니다. 결과적으로 버그를 신속히 찾아 해결할 수 있고 소프트웨어 품질을 개선하며 업데이트 검증 및 릴리즈에 소요되는 시간을 단축할 수 있습니다.

(2) CD (Continuous Deployment / Continuous Delivery)

CD는 지속적인 배포(Continuous Deployment) 또는 지속적인 제공(Continuous Delivery)을 의미합니다. 이 두 용어는 상호 교환적으로 사용됩니다.

지속적인 배포(Continuous Deployment)란, 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리즈하는 것을 의미합니다. 지속적인 배포는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부화 문제를 해결하며 파이프라인의 다음 단계를 자동화함으로써 지속적인 제공(Continuous Delivery)이 가진 장점을 활용할 수 있게 됩니다.

지속적인 제공(Continuous Delivery)이란, 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리 (컨테이너 레지스트리 혹은 GitHub)에 자동으로 업로드 되는 것을 뜻합니다. 지속적인 제공을 통해 운영팀은 리포지토리에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있으며 이는 개발팀과 비즈니스팀 간의 가시성과 커뮤니케이션의 부재에서 발생하는 문제를 해결해줍니다. 지속적인 제공(Continuous Delivery)은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 합니다.

4. 소프트웨어 개발 수명 주기 (SDLC)

소프트웨어 개발 수명주기는 애플리케이션을 구축하고 실행하기 위해 여러 단계로 구성된 소프트웨어 프로젝트에서 따라야하는 반복적인 프로세스입니다. SDLC는 각 단계에서 소프트웨어 개발을 분석할 수 있는 프로세스를 측정하고 개선할 때 도움이 됩니다.

(1) SDLC의 5단계

소프트웨어 개발 수명주기는 일반적으로 1)요구 사항, 2)설계, 3)구현, 4)검증 및 5)유지까지5단계로 구성된 5가지 개발 단계를 나타냅니다. 초기 요구사항 분석 단계에서는 고객으로부터 가능한 많은 정보를 수집합니다. 그리고수집된 정보를 바탕으로 회사는 완제품이 준수할 기준을 정합니다. 두 번째 디자인 단계에서 개발자는 프로젝트에적합한 프로그래밍 언어와 데이터베이스를 결정합니다. 향후 단계에서 발생하는 오류의 50%는 처음 두 단계에서 발생하기 때문에 이 두 단계에서 많은 시간을 투자하면 추후 유지 관리 단계에서 수정하는데에 발생하는 비용의 최대 300%를 절약할 수 있습니다.

세 번째 단계는 구축단계라고도 부르는 구현입니다. 개발자는 실제 소프트웨어를 코딩하고 빌드하면서 테스트 또는 검증도 수행합니다. 마지막 단계에서는 고객이 요청한 변경 사항에 따라 제품을 수정하고 유지 관리를 합니다.

(2) SDLC 모델 유형

① Waterfall Model

개발의 순차적인 흐름을 보여줍니다. 이전 단계가 완료될 때까지 다음 단계가 시작되지 않기 때문에 각 단계가 겹치지 않습니다.

② V Model

V Model은 검증 및 검증 모델이라고도 합니다. Waterfall Model과 유사하지만 V Model은 테스트에 더 중점을 둡니다. 각 단계에서 고유한 테스트 단계와 결과물이 포함되는 것입니다.

③ Incremental Model

Incremental Model은 요구 사항이 소프트웨어 개발 주기의 여러 독립형 모듈로 분할되는 소프트웨어 개발 프로세스입니다. 이 모델은 수명 주기의 초기에 제품을 빠르게 생성하는 데 도움이 되지만 기존 프로그램을 통합해야 하는 몇 가지 단점이 있습니다. 모든 요구 사항이 수명 주기의 최전선에 설정되어 있지 않기 때문에 이는 시스템 아키텍처에 문제가 될 수 있습니다.

출처

DevOps

https://glossary.cncf.io/devops/

https://enterprisersproject.com/cheat-sheet-devops-glossary?intcmp=70160000000h0aXAAQ.

Agile

https://www.redhat.com/ko/devops/what-is-agile-methodology

https://m.post.naver.com/viewer/postView.nhn?memberNo=36647560&volumeNo=18903174

CI/CD

https://www.redhat.com/ko/topics/devops/what-is-ci-cd

https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/

SDLC

https://www.servicenow.kr/products/devops/what-is-sdlc.html

https://joycekwon.medium.com/what-is-software-development-lifecycle-sdlc-523fd09340a6

https://www.javatpoint.com/software-engineering-incremental-model

Automation, DevOps, and the Demands of a Multicloud Word.

https://www.redhat.com/cms/managed-files/cm-idc-automation-devops-demands-multicloud-world-f10589-201803-en.pdf

애자일 소프트웨어 개발 선언

http://agilemanifesto.org/iso/ko/manifesto.html