배포 자동화
배포 자동화란 한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 의미한다.
배포 자동화를 통해 다음과 같은 이점을 얻을 수 있다.
- 수동적이고 반복적인 배포 과정을 자동화함으로써 시간을 절약할 수 있다.
- 휴먼 에러를 방지할 수 있다. (사람이 수동적으로 배포 과정을 진행하는 중에 생기는 실수)
파이프라인
배포에서 파이프라인이란 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 의미한다.
파이프라인은 전체 배포 과정을 여러 단계(Stages)로 분리하고 각 단계마다 주어진 작업(Actions)들을 수행한다.
파이프 라인을 여러 단계로 분리할 때, 대표적으로 쓰이는 세 가지 단계가 존재한다.
- Source 단계: 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
- Biuild 단계: Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다. 또한 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.
- Deploy 단계: Build 단계에서 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.
지속적 통합 (CI)
CI는 지속적 통합(continuous integration)의 약자로, 팀 구성원이 각자의 작업을 자주 통합하는 소프트웨어 개발 방식이다. CI는 아래와 같이 크게 세 가지 단계로 나뉜다.
- Code: 개발자가 코드를 코드 저장소에 Push한다.
- Build: 코드 저장소로부터 코드를 가져와서 (유닛 테스트 후) 빌드한다.
- (Test): 코드 빌드의 결과물이 다른 컴포넌트와 잘 통합되는지 확인한다.
지속적 통합으로 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선할 수 있다.
이전에는 각자 개발자가 작성한 코드를 합치고 난 후, 모두 모여서 빌드를 시작하고 나서야 문제점을 파악할 수 있었다. 지속적 통합이 적용된 개발팀은 코드를 머지하기 전, 이미 빌드 오류나 테스트 오류를 확인하여 훨씬 더 효율적인 개발을 할 수 있게 된다.
지속적 배포 (CD)
지속적 배포는 크게 3가지 과정으로 나눌 수 있다.
- Release: 릴리즈 단계에서는 빌드까지 모두 준비가 되었고, 어떤 기능이 개발되었는지 비즈니스 관계자들과 이야기를 나누는 단계이다. 어떤 기능을 넣을지, 해당 릴리즈는 배포를 할지 말지 결정하는 단계로 여러 의사결정이 이루어진다.
- Deploy: 실제 배포한다.
- Operation: 배포된 소프트웨어를 실제 운용하는 과정이다. 해당 과정에서 고객의 피드백을 충분히 받아 기획에 반영한다.