IWished
article thumbnail

개발 프로세스

서비스를 사용자에게 전달하는 방법(DevOps의 영역은?)

  • 새로운 서비스를 기획
  • 개발자가 코드 작성
  • 어디든 전달 가능하도록 서비스 포장
  • 서비스가 잘 작동하는지 테스트
  • 버전 넘버를 붙이고 베타 서비스 시작
  • 정식 버전 배포
  • 트래픽 모니터링

전통적인 소프트웨어 전달 방식 / 클라우드 서비스의 전달 방식

전통적인 소프트웨어 전달 방식

  • 출시 기한을 정해놓고 소프트웨어를 완성: 폭포수(Waterfall) 모델
    • 장점
      • 한 번 설치하면 (보통은) 평생 쓸 수 있다.
      • 따라서, 구독 요금제를 사용하지 않아도 된다.
    • 단점
      • 사용자가 항상 최신 상태로 업데이트 해야 함
        • 따라서 버그 수정(patch)을 사용자에게 전달하기 매우 어려움
          • 최근에는 운영체제 또는 애플리케이션 자체에서 자동 업데이트를 지원하는 경우도 있다.

클라우드 서비스의 전달 방식(SaaS)

  • 고객의 요구에 민첩하게 대응하여 지속적 전달: 애자일(Agile) 모델
    • 장점
      • 항상 최신의 소프트웨어를 제공/사용할 수 있다.
      • 서비스 제공자가 사용자들을 모니터링 하기에 용이하다.
      • 클라우드 사업자와 서비스 운영자가 운영 책임을 나누어 갖는다.
    • 단점
      • 인터넷 접속 반드시 필요
      • 사용 비용이 발생할 수 있다.
      • 운영 비용이 발생할 수 있다.
      • 고가용성 유지를 위한 운영 비용이 꾸준히 발생한다.
        • 가용성(Availability) : 얼마나 사용 가능한지를 측정
      • 유지 보수의 책임이 오래 길게 지속된다.
        → 서비스를 멈추기 어려움
클라우드 사업자는 누구인가?
웹 서비스 운영의 주체와 클라우드 사업자는 별개
웹 서비스 운영자는 운영을 위해 “인터넷 공간”을 대여해야만 함
  ○ 단순한 웹사이트 운영은 웹 호스팅 서비스
  ○ 보다 복잡한 인프라를 사용하고자 할 때는 클라우드 사업자

On-Premises, IaaS, PaaS, SaaS

  • On-Premises : 사업자가 집이나 서버실 같은 곳에서 직접 서버를 돌리는 것
    • 물리적인 장치, 하드웨어를 모두 직접 구매해야 한다.
    • 직접 OS를 설치하고 네트워크 환경을 직접적으로 구성해야 한다.
    • 모든 것들을 사용자가 다 준비해야 하기 때문에 매우 큰 시간과 돈이 소비된다.
  • IaaS(Infrastructure as a Service) : Infrastructure 레벨을 제공하는 서비스, 사용자가 OS를 직접 올리고 상위 계층을 구성한다.
    • IaaS 기업이 준비해놓은 환경에서 자원과 구성을 선택할 수 있다.
    • 적은 OS가 지원되고 고객은 OS와 애플리케이션을 직접 관리해야 한다.
    • 관리 측면에서 개발자와 인프라 관리자의 역할을 분담시킬 수 있다.
      • ex) AWS EC2
  • PaaS(Platform as a Service) : 개발자가 응용 프로그램을 작성할 수 있도록 플랫폼 및 환경을 제공하는 모델
    • 운영 팀이 인프라를 모니터링 할 필요가 없다.
    • 사용자는 OS, Server 하드웨어, Network 등등을 고려할 필요가 없고 애플리케이션 자체에만 집중할 수 있어 개발자가 빠르게 애플리케이션을 개발하고 서비스 가능하게 할 수 있다.
  • SaaS(Software as a Service) : 설치할 필요도 없이 클라우드를 통해 제공되는 SW
    • 모든 것을 기업(클라우드)에서 제공함으로 사용자는 별도의 설치나 부담이 필요 없이 SW를 사용할 수 있다.
    • SaaS는 소비 관점에서 제공되는 IT 방식의 서비스로 정리 할 수 있어 구독의 방식으로 돈을 벌거나 트래픽 기반으로 돈을 벌 수 있다.

CI/CD 파이프라인

CI/CD는?

  • 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법이다.
  • 기본 개념은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포이다.
  • 새로운 코드 통합으로 인해 개발 및 운영 팀에 발생하는 문제를 해결하기 위한 솔루션이다.
특히 CI/CD는 애플리케이션의 통합 및 테스트 단계에서부터 제공 및 배포에 이르는 과정을 전체에 걸쳐 지속적인 자동화와 지속적인 모니터링을 제공한다.
이러한 구축 사례를 일반적으로 CI/CD 파이프라인 이라 부르며, 개발 및 운영팀의 애자일 방식 협력을 통해 DevOps 또는 SRE 방식으로 지원된다.

CI (Continuous Integration) : 지속적 통합

Code : 개발자가 코드를 코드 저장소에 Push한다.

Build : 코드 저장소로부터 코드를 가져와서 유닛 테스트 후 빌드한다.

Test : 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인한다.

  • 버그를 일찍 발견할 수 있다.
  • 테스트가 완료된 코드에 대해 빠른 전달이 가능하다.
  • 지속적인 배포가 가능해진다.

CD (Continuous Deployment) : 지속적 전달

Release : 배포 가능한 소프트웨어 패키지를 작성한다.

Deploy : 프로비저닝을 진행하고, 서비스를 사용자에게 노출한다.

Operate : 서비스에 생길 수 있는 현황을 파악하고 문제를 감지한다.

  • 지속적 제공 프로세스를 실현하기 위해서는 개발 파이프라인에 CI가 먼저 구축되어야 한다.
  • 코드 변경 사항 병합부터 서비스에 적합한 빌드 제공에 이르는 모든 단계에 테스트 자동화와 코드 릴리스 자동화가 포함된다.
  • 운영팀이 더욱 빠르고 손쉽게 애플리케이션을 배포할 수 있게 된다.