프로그래머스 데브코스 웹 풀사이클 17주차 - 2

웹 개발 파이프라인 구축

코드 개발 => CI(빌드 => 테스트 => 코드 병합) => 코드 리포지토리에 자동으로 릴리스 => 프로덕션 환경에 자동으로 배포
배포/인도 자동화의 중요성
전통적 인도 프로세스

한계점
- 느린 인도 기간 : 개발 요구사항이 정의된 때로부터 제품 전달이 완료되기까지 긴 시간 소요
- 느린 피드백 주기 : 개발팀의 효율성 향상에 걸림돌로 적용
- 자동화 미비 : 릴리스 회수가 적으므로 자동화 필요 감소 -> 릴리스 기간 예측 어려워짐
- 핫픽스 위험성 : 긴급한 코드 변경에 대하여 충분한 테스트가 이루어질 수 없는 위험
- 개발문화 건전성 제한 : 팀 스트레스, 의사소통 부족, 책임의 분산, 낮은 업무 만족도 등..
해결책 : CD
- 변경 내용이 단지 코드 한줄이라고 할 때
이를 배포하는 데 어느 정도 시간이 소요되는가?
이 배포 작업을 반복해서 안정적으로 수행할 수 있는가?
- 해결안 : 프로세스의 각 단계를 자동화
빠른 제품 인도
짧은 피드백 주기
위험도가 낮은 릴리스 : 반복과 롤백
유연한 릴리스 정책 결정 가능
자동 배포 파이프라인
- 코드의 통합, 테스트, 배포는 매우 중요한 단계들이다.
각 단계를 유지하면서 동시에 자동화 하는 것이 필요, 또한 지속적 모니터링도 필수
코드변경 => 지속적 통합 => 자동 인수 테스트 => 구성 관리
CI(Continuous Integration) : 지속적 통합
코드가 올바르게 빌드 및 통합되는지를 자동으로 확인
- 리포지토리에서 코드를 체크아웃
- 빌드를 수행하고 단위테스트 (테스트 커버리지 리포트 생성)
- 코드 품질을 검증 (정적 분석을 통한 규칙 검사/코딩 규약 등의 준수 여부 검사)
개발팀에 1차적인 피드백 제공
자동 인수 테스트
인수 테스트
- 제품이 릴리스할 준비가 되었는지를 "사용자 요구사항에 견주어" 확인
- 전통적으로 QA팀의 역할
- 통합 테스트, 인수 테스트, 비기능적 분석 등을 포함
CD 파이프라인에 통합
- 품질 점검을 나중에 하는 것이 아니라 개발 중에 제품에 내재시키자는 것
- 개발자가 구현을 마치는 즉시 고객이 원하는 제품인지를 검증
- 소프트웨어의 인도 결정을 자동화
구성 관리
구성 관리(configuration management)
- 소프트웨어와 환경 변화를 추적하고 제어
- 전통적으로 운영팀의 역할
- 필수 도구 준비와 설치
- 응용의 배포와 관련한 다양한 서비스 인스턴스와 배포 버전 관리
CD 파이프라인에 통합
- 프로덕션 환경의 응용을 자동으로 구성 및 배포
- 구성 관리 도구를 이용해 구성 관리 파일을 버전 관리 시스템에 저장 및 변경 이력 추적
CD를 위한 기술적 전제조건
- 자동 빌드, 테스트, 패키징, 배포
- 신속한 파이프라인 실행
- 신속한 장애 복구
- 무중단 배포
- 트렁크 기반 개발
