요약
- 기존 문제점
- 개발(Dev)과 운영(Ops)이 분리되어 있음
- 1) 분리되어있어 서로 책임을 떠넘김
- 2) 운영 중 발생한 요구사항에 대한 소통이 원활하지 못함
- 3) 그런 상황에서 비즈니스 요구사항에 따른 변경사항이 자주 배포되면서 개발과 운영 사이 마찰이 커짐
- 해결 방안
- 애자일 : 기획과 개발을 합치자 -> 위 3)을 해결
- DevOps : 개발과 운영을 합치자 -> 위 2)까지 해결
- 배경
- 요구 기술이 상이한 두 영역이 합쳐질 수 있는 이유
- 1) 인터넷 발전 : 필요한 자료와 강의를 쉽게 접할 수 있음
- 2) 오픈소스의 발전 : 전세계 개발자들이 함께 이야기하고 일할 수 있는 구조
- 3) 좋은 도구들 : 개발/빌드/배포/모니터링 등 자동화 가능
- 4) 클라우드 등장 : 직접 인프라를 구성할 필요가 사라짐
- 종합
- 개발시 필요한 모듈을 오픈소스로 조합하고, 여러 좋은 도구로 쉽게 자동화하며, 클라우드로 인프라 구축을 쉽게 할 수 있게됨
- DevOps란
- 개발과 운영(+테스트)이 하나의 조직으로 운영되는 문화
- 테스트는 TDD, CI로 개발 과정의 일부에 있음 - 엔지니어가 직접 프로그래밍/빌드/배포/서비스 실행하며 사용자와 상호작용하며 서비스를 개선하는 과정/문화
- 개발과 운영(+테스트)이 하나의 조직으로 운영되는 문화
정의
- 애플리케이션 개발의 품질과 속도를 개선하고, 신규 또는 수정된 소프트웨어 기능/제품의 릴리즈 주기 단축을 장려하는 철학+프레임워크
- 애플리케이션 개발팀(Dev)과 해당 IT 운영팀(Ops)의 원활하고 지속적인 커뮤니케이션, 협업, 통합, 가시성, 투명성을 장려
- Dev와 Ops 간의 긴밀한 관계는 DevOps 라이프 사이클의 모든 단계에 걸쳐 지속
- 초기 소프트웨어 계획
- 코딩/구축/테스트/릴리즈 단계
- 구축/운영/지속적인 모니터링
- 기능
- 추가 개선, 테스트, 구축에 대한 지속적인 고객 피드백 루프를 추진하는 원동력
- 필요한 기능 변경, 추가 기능을 빠르고 지속적으로 릴리즈
- DevOps 툴로 목표(CAMS)의 모든 영역을 지원
- 개발/운영 워크플로우의 효율/협업 개선 -> 통합/개발/테스트/구축/모니터링과 관련된 기존의 작업을 자동화
- DevOps 목표 (CAMS)
- 문화
- 자동화
- 측정
- 공유
중요한 이유
- 개발팀과 운영팀의 커뮤니케이션/협업 장벽을 허물어 고객 만족과 더 빠른 가치 제공이 핵심 가치
- 비즈니스 혁신 추진 / 프로세스 개선을 주도하도록 설계
- 고객에게 빠르고 안전하게 서비스를 제공할 수 있는 환경 제공
- 더 자주 릴리즈/기능/업데이트 -> 새로운 기능이 고객에게 빠르게 제공
- 문제점/버그를 신속하게 식별하여 해결
DevOps 방법
- 스크럼 (Scrum)
- 개발 및 QA 프로젝트를 가속화하는 협력 방법 정의
- 칸반
- 진행중인 소프트웨어 프로젝트 작업 상태(WIP)를 칸반 보드로 추적
- Toyota 공장에서 얻은 효율
- 애자일
- Waterfall 개발 방법 대신 짧은 소프트웨어 개발 라이프사이클을 사용
- 요구사항을 빠르게 대응
- 요구사항을 사용자 사례로 문서화하여 매일 아침 회의를 수행
- 지속적인 고객 피드백을 포함
DevOps 툴체인
- DevOps 친화적인 툴의 목표
- 소프트웨어 전송 워크플로우(파이프라인)의 다양한 단계를 간소화/단축/자동화
- 자동화, 협업, 개발-운영 팀간의 통합에 대한 DevOps 원칙을 손쉽게 준수할 수 있도록 도움
- DevOps 라이프사이클 단계에서 사용되는 툴의 예
- 계획
- 비즈니스 가치 및 요구사항을 정의
- 알려진 문제를 추적하고 프로젝트 관리를 수행
- Jira / Git
- 코딩
- 소프트웨어 설계 및 소프트웨어 코드 생성
- Github / GitLab / Bitbucket / Stash
- 구축
- 소프트웨어 빌드 및 버전 관리
- 자동화된 툴로 코드를 컴파일/패키징 후 제품 릴리즈
- 소스 코드 저장소 또는 패키지 저장소 사용
- 저장소는 제품 릴리즈에 필요한 패키지 인프라 역할 - Docker / Ansible / Puppet / Chef / Gradle / Maven / Jfrog Artifactory
- 테스트
- 최적의 코드 품질 보장을 위한 지속적인 수동/자동 테스트 수행
- JUnit / Codeception / Selenium / Vagant / TestNG / BlazeMeter
- 배포
- 제품 릴리즈를 운영 단계로 관리/조정/예약/자동화에 도움
- Puppet / Chef / Ansible / Jenkins / Kubernetes / OpenShift / OpenStack / Docker / Jira
- 운영
- 운영 중인 소프트웨어 관리
- Anabilities / Puppet / PowerShell / Chef / Salt / Otter
- 모니터링
- 운영 환경의 특정 소프트웨어 릴리즈에서 발생하는 문제 정보를 식별/수집
- New Relic / Datadog / Grafana / Wireshark / Splunk / Nagios / Slack
- 계획
DevOps 사례
- 지속적인 개선 및 자동화 개념을 반영
- 많은 사례가 하나 이상의 개발 주기 단계에 중점을 둠
- 사례
- 지속적인 개발 (Continuous Development)
- DevOps 라이프사이클의 계획 및 코딩 단계에 걸쳐 적용
- 버전 제어 메커니즘이 관련
- 지속적인 테스트 (Continuous Test)
- 코드 작성/업데이트 시간동안 자동화되어 사전 예약된 지속적인 코드 테스트 포함
- 이로 인해 코드를 더 빠르게 운영 환경에 제공
- 지속적인 통합 (Continuous Integration)
- 다른 테스트 및 개발 툴과 함께 개발중인 코드의 운영 준비 상태를 추적
- 테스트와 개발 간의 신속한 피드백으로 코드 문제를 신속하게 파악/해결하는 작업을 포함
- 지속적인 제공 (Continuous Delivery)
- 테스트 후 사전 운영/스테이징 환경으로 코드 변경을 제공하는 작업을 자동화
- 제공 후 코드 변경을 운영 환경으로 승격할 수 있음
- 지속적인 구축 (Continuous Deployment)
- 지속적인 제공과 마찬가지로 신규/변경 코드를 운영 단계로 자동 릴리즈
- 이를 수행하는 회사는 코드/기능 변경을 하루에 여러 번 릴리즈할 수 있음
- Docker, Kubernetes 등 컨테이너 기술을 사용하면 서로 다른 구축 플랫폼/환경에서 코드 일관성을 유지한 지속적인 구축을 지원할 수 있음
- 지속적인 모니터링
- 작동 중인 코드와 이를 지원하는 기본 인프라에 대한 지속적인 모니터링과 관련
- 피드백 루프를 통해 버그/문제를 보고하여 다시 개발 단계로 되돌아감
- 코드형 인프라
- 다양한 DevOps 단계에서 소프트웨어 릴리즈에 대한 인프라 프로비저닝 자동화에 사용
- 개발자는 기존 개발 툴 내에서 인프라 "코드"를 추가
- Docker, Kubernetes, OpenShift 등에서 필요에 따라 스토리지 볼륨 생성이 가능 - 운영팀은 환경 구성을 모니터링, 변경 사항을 추적, 구성 롤백을 간소화할 수 있음
- 지속적인 개발 (Continuous Development)
https://www.netapp.com/ko/devops-solutions/what-is-devops/
데브옵스(DevOps)란? | NetApp
NetApp과 함께 애플리케이션 개발, 소프트웨어 기능 개선 또는 제품 릴리즈 주기 단축을 위한 프레임워크 데브옵스(DevOps)에 대해 자세히 알아보세요.
www.netapp.com
개발과 운영의 조화 - Devops #1/2
기존 개발 체계의 문제점 전통적인 개발 운영 체계 일반적인 개발 운영 체계는 다음과 같다. 개발팀에 의해서 개발이 끝나면, 시스템은 테스트를 거쳐서 운영팀에 이관되고, 운영팀은 해당 시스
bcho.tistory.com
개발과 운영의 조화 - Devops #2/2
1편 글 링크 - http://bcho.tistory.com/815 Devops의 정의 이러한 개념들을 적극적으로 적용한 기업들이 Netflix, Flicker와 같은 인터넷 서비스 기업이다. 기존 개발 프로세스에 비해서 훨씬 빠르게 고객의
bcho.tistory.com
'데이터 엔지니어링 > SRE' 카테고리의 다른 글
[SRE] SRE란 (Site Reliability Engineering) (0) | 2022.05.22 |
---|