• 데브옵스(DevOps)란 무엇인가?

    2021. 5. 9.

    by. Jacob Lee

    728x90

     


     

    DevOps란?

    DevOps애플리케이션과 서비스를 빠른 속도로 제공할 수 있는 있도록 조직의 역량을 향상하는 문화 철학, 방식 및 도구의 조합이다. 기존의 소프트웨어 개발 및 인프라 관리 프로세스를 사용하는 조직보다 제품을 더 빠르게 혁신하고 개선할 수 있다. 이러한 빠른 속도를 통해 조직은 고객을 더 잘 지원하고 시장에서 좀 더 효과적으로 경쟁할 수 있다.

     

    Image from AWS

     

    DevOps의 작동 방식

    DevOps 모델에서는 더 이상 개발팀과 운영팀이 나누어져 각자의 일을 하는 것이 않고 두 팀이 단일팀으로 병합되어 엔지니어가 개발에서 테스트, 배포, 운영에 이르기까지 관여한다. 

    또한 팀에서 DevOps 방식을 사용하면 속도가 느리고 수동으로 실행되던 프로세스를 자동화한다.

    더 나아가, 애플리케이션을 안정적으로 빠르게 운영하고 개선하는데 도움이 되는 기술 스택과 도구를 사용한다.
    즉, 다른 팀의 도움 없이 코드 배포 또는 인프라 프로비저닝과 같은 작업을 팀 안에서 독립적으로 수행할 수 있게 되고, 팀의 작업 속도는 빨라진다.

     

    요즘에는 DevOps 팀에서 보안을 중점으로 두는 경우 부르는 DevSecOps라는 개념도 나타났다.

     

    DevOps의 장점

    • 빠른 작업 속도
    • 프로세스 자동화로 인한 신속한 제공
    • 지속적 통합과 지속적 전달을 통한 안정성 확보
    • 자동화와 일관성으로 인한 효율적인 확장
    • 워크플로우 결합으로 인한 팀 간의 협업 강화
    • 코드형 정책을 사용한 보안

     


     

    DevOps에는 어떤 방식이 있을까?

    DevOps의 모범 사례는 다음과 같다.

    • 지속적 통합 (CI)
    • 지속적 전달 (CD)
    • 마이크로 서비스 (MSA)
    • 코드형 인프라 (Infrastructure as Code)
    • 모니터링 및 로깅
    • 커뮤니케이션 및 협업

     

    CI란 무엇인가?

    CI는 Continuous Integration의 줄임말로, 지속적인 통합을 의미한다. CI를 성공적으로 구현할 경우, 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 repository에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.

     

    CD란 무엇인가?

    CD는 지속적인 서비스 제공 (Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미하며, 두 용어는 상호 교환적으로 사용된다.

    • 지속적인 제공이란 개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 repository에 자동으로 업로드되는 것을 뜻하며, 운영팀은 이 repository에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있다. 이는 개발팀과 비즈니스팀 간의 가시성과 커뮤니케이션 부족 문제를 해결해 준다. 또한 지속적인 제공은 최소한의 노력으로 새로운 코드를 배포하는 것을 목표로 한다.
    • 지속적인 배포란 개발자의 변경 사항을 repository에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 release 하는 것을 의미한다. 이는 애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 과부하 문제를 해결한다.

     

    Microservices Architecture란?

    마이크로서비스는 애플리케이션 구축을 위한 아키텍처 기반의 접근 방식이다. 마이크로서비스를 전통적인 monolithic 접근 방식과 구별 짓는 기준은, 애플리케이션을 핵심 기능으로 세분화하는 방식을 사용하는가이다. 마이크로서비스에서는 각 기능을 서비스라고 부르고, 독립적으로 구축하고 배포할 수 있다. 이렇게 함으로 개별 서비스가 다른 서비스에 부정적 영향을 주지 않으면서 작동(또는 장애가 발생)할 수 있다.

    쉽게 비유하면, 어떤 쇼핑몰에 접속했을 때 보이는 검색창, 추천 내역, 장바구니, 이 모든 것이 하나의 서비스이다. 즉, 마이크로서비스란 애플리케이션의 핵심 기능이면서 다른 서비스들과 독립적으로 작동한다. 애플리케이션 핵심 기능을 유연하게 결합할 뿐 아니라, 불가피한 장애, 향후 확장 여부 및 새로운 기능 통합에 대비할 수 있도록 서비스 간 커뮤니케이션 및 개발팀의 구조를 조정하는 practice이다.

     

    코드형 인프라란 무엇인가?

    '프로그래밍형 인프라'라고도 불리는 코드형 인프라 (Infrastructure as Code, IaC)는 수동 프로세스가 아닌 코드를 통해 인프라를 관리하고 프로비저닝을 하는 것을 뜻한다.

     

    코드형 인프라를 사용하면 인프라 사양을 담은 구성 파일이 생성하게 되는데, 그러므로 구성을 편집하고 배포하기가 더 쉬워진다. 또한 매번 동일한 환경을 프로비저닝 하도록 보장까지 해준다.

     

    즉, 코드로 인프라를 배포한다는 것은 인프라를 모듈식 구성 요소로 분할하고 자동화를 통해 다양한 방식으로 결합할 수 있다는 뜻이다,

     

    코드형 인프라는 어떤 장점을 가지고 있는가?

    • 빠른 속도와 편리함
    • 수동 구성이 아닌 자동화로 일관성 있는 구성
    • 실제 인프라에 적용하기 전 테스트 실행으로 위험 최소화
    • 구성하고 싶은 인프라를 코드를 제출 - 업무효율 극대화
    • 반복적인 작업을 자동화하고 인프라 구성 프로세스를 최적화 함으로 생산성 증가

     

    대표적인 제품으로 Terraform, Ansible, Puppet 등이 있다.

     

    모니터링 및 로깅

    회사 조직은 지표와 로그를 모니터링함으로써 애플리케이션 및 인프라 성능이 제품의 최종 사용자 경험에 어떤 영향을 미치는지 확인한다.

    더 나아가서, 조직은 애플리케이션과 인프라에서 생성되는 데이터 및 로그를 분석함으로써 변경 또는 업데이트가 유저에게 어떤 영향을 미치는지 확인하고 , 문제의 근본 원인 또는 갑작스러운 변화에 대한 통찰력을 확보하게 된다.

     

    대표적인 제품으로 Logstash와 Loggly가 있다.

     

    커뮤니케이션 및 협업

    조직에서 커뮤니케이션과 협업이 증가하는 것도 DevOps의 문화적 측면 중 하나이다.
    DevOps의 도구 및 소프트웨어 프로세스를 자동화 함으로써 개발 및 운영의 워크플로우가 합쳐지게 되고 여기서 협업이 일어나게 된다.

    협업이 일어나기 때문에 조직은 커뮤니케이션할 방법을 마련하게 되고 정보를 공유하는 문화적 표준을 확립한다.

     

     

    Reference

    728x90

    댓글