Staging: Production의 전 단계. 실제 유저에게 배포하기 전에 테스트용
Production: 실제 유저에게 배포되어 서비스되는 단계
Build: 인간이 읽을 수 있는 소스코드를 프로그램 실행 시 컴퓨터가 읽을 수 있게 필요한 모든 것(pre-processing, compiling, converting data files, running automated tests, packaging 등)을 준비하는 작업
compiling, 컴파일 프로세싱: 소스 코드 파일을 실행 코드로 변환
interpreted language compiled language 언어 종류 파이썬, 자바스크립트 Java, C/C++ 빌드 중 컴파일 과정 없다 있다 빌드 dependency, 라이브러리 설치가 대부분 직관적 확인 가능
CICD, Continuous Integration / Continuous Deployment
개발자들이 개발에 더 집중할 수 있도록, 테스트와 배포등 개발 외의 작업들은 모두 자동화를 시켜서 개발자의 생산성을 높여주는 것
개발자의 생산성 향상 효과
Unit Test, Integration Test, E2E Test등의 테스트 과정과 모든 배포 과정을 자동으로 실행되도록 하고, 문제가 생겼을때 자동으로 알려주는 시스템을 구축
배포 속도 향상, 빈도 증가
Continuous Integration 지속적인 통합
Continuous Deployment 지속적인 배포
CICD 시스템은 빌드, 테스트 그리고 배포를 자동화 함으로서 개발자들의 생산성을 높이고 배포를 더 빠르게 그리고 더 자주 할 수 있도록 한다.
Integration (통합)
개발자들이 작업한 코드가 통합되어서 하나로 합쳐지는 것
Git 환경에서 개발자들이 구현한 코드를 담고 있는 feature branch들이 develop branch에 merge되어 staging 서버에 배포(혹은 실제 서버에 배포 되지 않더라도 배포 될 수 있는 package나 artifact 형태로 생성)되는 것.
자동화하여, 개발자가 개발을 끝내고 커밋하는 순간 테스트와 머지까지 자동으로 신속하게 이루어지게 하는 것.
Continuous Deployment 지속적인 배포.
Continuous Integration의 다음 부분들이 자동화되는 것
CI 과정을 거쳐 develop 브랜치에 merge가 된 최신 코드들을 실제 유저들이 사용할 수 있도록 production 서버에 배포가 되어야 한다.
Production 서버의 배포 전에 많은 테스트들이 이루어져 한다.
Continuous Deployment는 위 과정들을 자동화하여, 개발자가 개발을 끝내고 커밋 및 푸쉬를 하면 그대로 모든 테스트를 자동으로 거치고 바로 production 배포까지 완료되는 것
Continuous Deployment
production 배포까지 모두 100% 자동으로 이루어짐
Continuous Delivery
production 배포는 사람의 승인을 거친 후에 이루어짐.
production 배포가 모두 자동화가 되기 위해서는 테스트의 자동화가 정말 구축이 잘 되어 있어야 한다.
촘촘한 테스트 자동화 시스템을 구축하기 위해서는 굉장히 많은 공수가 들어간다. 그래서 대부분 사람의 승인을 거친 후 production 배포되도록 CICD (Continuous Integration / Continuous Delivery) 시스템을 구축한다.