데이터 엔지니어링/SRE

[SRE] DevOps란

pythaac 2022. 5. 8. 23:16

요약

  • 기존 문제점
    • 개발(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 원칙을 손쉽게 준수할 수 있도록 도움

https://medium.com/edureka/nagios-tutorial-e63e2a744cc8

  • 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 등에서 필요에 따라 스토리지 볼륨 생성이 가능
      • 운영팀은 환경 구성을 모니터링, 변경 사항을 추적, 구성 롤백을 간소화할 수 있음

 

 

 

https://www.netapp.com/ko/devops-solutions/what-is-devops/

 

데브옵스(DevOps)란? | NetApp

NetApp과 함께 애플리케이션 개발, 소프트웨어 기능 개선 또는 제품 릴리즈 주기 단축을 위한 프레임워크 데브옵스(DevOps)에 대해 자세히 알아보세요.

www.netapp.com

https://bcho.tistory.com/815

 

개발과 운영의 조화 - Devops #1/2

기존 개발 체계의 문제점 전통적인 개발 운영 체계 일반적인 개발 운영 체계는 다음과 같다. 개발팀에 의해서 개발이 끝나면, 시스템은 테스트를 거쳐서 운영팀에 이관되고, 운영팀은 해당 시스

bcho.tistory.com

https://bcho.tistory.com/817

 

개발과 운영의 조화 - 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