Continuous Deployment

근래 잠들어서 못일어 난다던지.. 계속 블로깅이 밀린다던지 큰일이다.


1. 개발 프로세스

… -> 요구분석 -> 시스템 명세 -> 설계 -> 구현 -> 테스트 -> 배포 -> 유지보수 -> …

소프트웨어 개발 생명주기(SDLC, Software Development Life Cycle)

  • 요구분석 및 시스템 명세 작성: 문제분석 단계, 개발할 소프트웨어의 기능과 제약조건, 목표 등을 사용자와 함께 정확히 정의하는 단계이다. 개발하는 소프트웨어의 성격을 정확이 이해하여 개발 방법과 필요한 자원 및 예산 예측 후 요구명세를 작성한다.
  • 설계: 요구분석 및 시스템 명세 작성에 정의한 기능을 실제로 수행하기 위한 방법을 논리적으로 결정한다. 시스템, 프로그램, UI설계로 나뉜다. 시스템 구조설계는 시스템을 구성하는 내부 프로그램이나 모듈 간의 관계와 구조를 설계하고, 프로그램 설계는 프로그램 내의 각 모듈에서 처리 절차나 알고리즘을 설계한다.
  • 구현: 설계 단계에서 논리적으로 결정한 문제 해결 방법을 프로그래밍언어로 작성한다.
    • 구조화 프로그래밍: 조건문, 반복문을 사용하여 프로그램을 작성하고, 순차구조, 선택구조, 반복구조의 세가지 제어구조로 표현하며, 구조가 명확하여 정확성 검증과 테스트, 유지보수가 쉬운 장점이 있다.
    • 모듈러 프로그래밍: 프로그램을 작은 단위의 모듈로 나누어 계층 관계로 구성하는 프로그래밍 기법으로 모듈별로 개발과 테스트, 유지보수가 가능하며, 모듈의 재사용 가능하다는 장점이 있다.
  • 테스트: 개발한 시스템이 요구사항을 만족하는지, 실행 결과가 예상한 결과와 정확하게 맞는지 검사하고 평가하는 과정이다.
  • 배포 및 유지보수: 시스템이 인수되고 설치된 후 일어나는 모든 활동이다. 커스터마이징, 구현, 테스트 등 소프트웨어 생명주기에서 가장 긴 시간을 차지한다.
    • 수정형 유지보수: 사용중 발견한 프로그램의 오류 수정 작업을 진행
    • 적응형 유지보수: 시스템과 관련한 환경적 변화에 적응하기 위한 재조정 작업
    • 완전형 유지보수: 시스템의 성능을 향상하기 위한 개선작업을 한다.
    • 예방형 유지보수: 앞으로 발생할지 모를 변경사항을 수용하기 위한 대비작업을 수행한다.

1.1. 폭포수형 개발 방식

요구분석 -> 설계 -> 개발 -> 테스트 -> 유지보수

  • 실제 배포 후 유저 전달까지 시간이 오래걸린다.
  • 뷰가 어느정도 나온 후 확인이 가능하여 버그나 수정사항을 대처하기위해서는 처음으로 돌아가기에 비용이 많이든다.
  • 출시 시점에 신뢰성 및 안정성 보장이 힘들다.

다양한 테스트를 통해 안정성 개선한다.

  • 시스템 테스트: 최종 요구사항 만족 확인, 만족못할시 요구분석단계로 돌아감
  • 알파 테스트: 개발된 시스템을 현장에서 비공개 테스트
  • 베타 테스트: 고객의 실제 사용환경에서 테스트
  • 등등

1.2. 애자일 방식

스프린트라는 짧은 주기의 개발 사이클을 계속해 반복한다.

요구분석 -> (디자인 -> 개발 -> 테스트 -> …) -> 배포 -> 요구분석 -> …

서비스형 소프트웨어(Saas: Software as a Service)를 개발하는 데에 적합하다.

1.3. SaaS

클라우드 서비스의 하나로 서비스를 접속할 시에 새버전을 즉시 사용할 수 있는 서비스이다. app, server, virtualized, storage, networing 모드 프로비저쪽에서 관리하여 고객이할 부분이 없다.

2. CI/CD

  • CI: Continuous Intergration, 지속적 통합, 개발자를 위한 자동화 프로세스이다.
  • CD: Continuous Delivery: 지속적인 배포(Continuous Deployment), 파이프라인의 추가 단계에 대한 자동화, 얼마나 많은 자동화가 이루어지는가?

2.1. 단계

… -> Plan -> Code -> Build -> Test -> Release -> Deploy -> Operate -> …

2.2. CI

Code - Build -Test 단계에서 할수있다.

  • code: 개발자가 코드를 원격 저장소에 올리는 단계
  • build: 원격 저장소에서 코드를 가져와 유닛 테스트 후 빌드하는 단계
  • test: 코드 빌드 결과물이 다른 컴포넌트와 통합되는지 확인

2.3. CD

Release - Deploy - Operate 단계

  • release: 배포 가능한 소프트웨어 패키지를 작성
  • deploy: 프로비저닝을 실행, 서비스를 사용자에게 노출, 실질적 배포
  • operate: 서비스 현황을 파악, 문제 감지

3. 배포 자동화

한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 말한다.

  • 수동적, 반복적인 배포 과정을 자동화 함으로 시간이 절약된다.
  • 사람의 실수를 방지한다.

3.1. CI/CD 파이프라인

인간개발자 -> code 올림 -> 원격 저장소(code) -> 테스트/빌드 서버(build, test, release) -> 통과시 배포서버로 전달 -> 배포서버(Deploy) -> …

3.1.1. 기본 단계와 수행작업

  • 파이프라인: 소스 코드의 관리부터 실제 서비스로의 배포과정을 연결하는 구조
    1. Source stage: 소스코드 변동사항 감지 다음으로 전달
    2. Build stage: 전달받은 코드 컴파일, 빌드, 테스트하여 가공
    3. Deploy stage: build에서 온 결과물 실제 서비스에 반영

3.1.2. 구성요소 및 장점

  • 빌드: sw 컴파일
  • 테스트: 호환성 및 오류 검사
  • 릴리스: 버전 제어 저장소 app update
  • 배포: 개발에서 프로덕션 환경으로 변환
  • 규정 준수 및 유효성 검사

실제 빌드는 실패 credentials, 인증이 안된다고 나옴 ^^

실패실패인증안됨권한없음^^


참조

뱅크샐러드: 갈아넣었어요
redhat: 갈아 넣을거에요
redhat: 돈좀 태워봅시다