• DevOps란
    • DevOps는 개발(Dev)과 운영(Ops)의 합성어로, 개발부터 운영까지 전 과정에서 통합적인 접근 방식을 추구하는 문화, 운동, 또는 관행을 의미
    • 버전 관리 시스템을 통한 자원관리
    • 인프라구축/운영, 인프라스트럭처코드
    • 지속적인 통합(CI), 지속적인 배포(CD)
    • 컨테이너 사용 및 관리
  • DevOps의 핵심 기술
    • 버전 관리 시스템(Version Control Systems, VCS)
      • Git/GitHub
        • 소스 코드의 버전 관리를 위해 가장 널리 사용되는 시스템
        • GitHub는 Git 기반의 온라인 호스팅 서비스로, 코드 공유, 협업, 리뷰 등 개발 프로세스의 다양한 측면을 지원
      • SVN
        • SVN은 Apache Software Foundation에서 개발한 오픈 소스 프로젝트로 중앙 집중형 버전 관리 시스템
    • 인프라 구축 및 운영
      • 레거시 인프라
        • 전통적인 데이터 센터 기반의 물리적 서버와 네트워크 장비로 구성된 인프라
        • 조직이 자체적으로 서버, 스토리지, 네트워크 장비 등을 구매하고, 직접 설치, 구성, 유지 관리하는 방식
      • 클라우드 인프라(Cloud Infrastructure)
        • AWS, AZURE, GCP등의 클라우드 서비스 제공자가 제공하는 인프라를 이용하는 방식
        • 이중 AWS는 클라우드 서비스의 선두 주자로서, 가장 광범위한 서비스와 리전 네트워크를 제공
        • 컴퓨팅, 스토리지, 데이터베이스, 네트워크, 머신 러닝 등 다양한 서비스를 제공
        • AWS의 방대한 사용자 커뮤니티와 문서, 그리고 다양한 서드파티 도구들이 제공
      • 인프라스트럭처 코드(Infrastructure as Code, IaC)
        • Terraform, Ansible 등을 통해 서버, 네트워크, 기타 인프라스트럭처를 코드로 관리하고 자동화
        • 인프라 구성의 일관성을 보장하고, 변경 사항의 추적 및 관리를 용이하게 함
    • 지속적인 통합(Continuous Integration, CI) 및 지속적인 배포(Continuous Deployment, CD)
      • CI

        • 소스 코드 변경 사항을 인지하여 자동으로 빌드와 테스트를 수행하고 통합하는 과정을 자동화
      • CD

        • CI 과정을 통해 검증된 코드를 운영 환경에 배포하는 것을 자동화
        • 수동 배포 과정에서 발생할 수 있는 인간의 오류를 줄이고, 빠르게 소프트웨어를 고객에게 제공
      • Jenkins, GitHub Actions가 대표적인 CI/CD를 위한 툴

        Untitled

        • Jenkins는 오랜 역사의 안정성을 가지고 커뮤니티와 기업에서 광범위하게 사용되어왔고, 수많은 플러그인을 통해 쉽게 CI/CD 파이프라인 구축
        • github actions는 GitHub 저장소와 완벽하게 통합되어 있어, 별도의 설정 없이 GitHub의 이벤트(예: 푸시, 풀 리퀘스트 등)에 따라 자동으로 작업을 수행하는 각종 편의 제공
    • 컨테이너
      • 컨테이너는 소프트웨어가 실행되기 위해 필요한 라이브러리, 종속성, 설정 파일 등을 모두 포함하여 격리된 공간에서 실행할 수 있도록 해주는 가벼운, 독립적인 실행 환경

      • 애플리케이션과 그 환경을 컨테이너로 패키징하여, 다양한 환경에서도 일관된 동작을 보장

      • 주요특징

        • 격리성
          • 컨테이너는 호스트 시스템에서 분리된 자체 환경에서 실행. 다른 컨테이너와 독립적으로 실행되며, 서로 간섭하지 않음
        • 경량화
          • 가상 머신과 달리 컨테이너는 전체 운영 체제를 포함하지 않고, 필요한 라이브러리와 파일만 포함하기 때문에 매우 가볍고 빠르게 시작
        • 일관성, 이식성
          • 컨테이너에 포함된 모든 구성 요소는 고정되어 있기 때문에, 어디서 실행하더라도 동일한 동작을 보장
          • 개발 환경과 배포 환경 간의 차이를 줄여주기 때문에, 컨테이너를 이용하면 애플리케이션을 더 쉽게 이식
      • Docker

        Untitled

        • 도커(Docker)**는 컨테이너를 만들고 관리하는 데 사용하는 가장 인기 있는 오픈 소스 플랫폼
        • 도커는 컨테이너 기반의 가상화를 쉽게 구현할 수 있도록 도와주는 도구와 서비스의 모음
    • 컨테이너 오케스트레이션(Orchestration)
      • Kubernetes(k8s)

        Untitled

        • 키잡이(helmsman)나 파일럿을 뜻하는 그리스어에서 유래한 용어
        • 컨테이너화된 애플리케이션의 배포, 확장, 관리를 자동화
        • 복잡한 마이크로서비스 아키텍처를 효율적으로 운영할 수 있게 지원
        • 직접 설치 및 운영하기에는 복잡한 아키텍처로서 대부분의 클라우드 서비스업체에서 쿠버네티스 서비스 제공. 예를 들어)aws의 eks
      • eks 외에도 클라우드 서비스 업체마다 간편화된 컨테이너 오케스트레이션 서비스 존재