CI/CD는 어떠한 스택이나 언어가 아닌 현업에서 사용하는 효율적인 개발 프로세스이다.
두 개의 공통점은 현대에서 컴퓨터의 성능 향상과 시장의 발전으로 빠르게 변화하고있다. 그렇기 때문에 다양한 개발사에서 시장과 고객의 요구에 빠르게 반응하고, 제품을 출시하고 업데이트를 할 것인가를 핵심 과제로 잡고있다.
세계적인 기업들이 개발 프로세스로 활용하는 것이 CI/CD
이다.
N명의 개발자가 Git
과 같은 버전 관리 시스템을 사용할때, 각 개발자들은 기본 틀이 잡혀있는 코드를 clone
받은 이후에 각 기능 작업을 시작한다.
여러명의 개발자가 만약 동시에 저장소에 병합할 경우 반드시 충돌(Conflict)이 발생한다.
각 개발자들은 충돌 해결과정에 결국 많은 시간과 노력을 쏟게 될 것이고
결국, 미처 알지못한 버그가 축적된다거나 앱(app)을 사용하는 고객에게 업데이트를 신속하게 제공하기 어려워진다.
그렇기 때문에 보다 나은 방법을 찾아 나온 개발 방법론으로 CI
라는 개념이 탄생했다.
CI의 원칙중 대표적인 것으론 다음과같다.
true/false
=> Build true/false
=> Test true/false
지속적인 통합 CI 단계를 거쳐 제품이 Release 단계를 거쳐 Deploy하기 위해 제품이나 서비스가 정상적으로 고객에게 제공되는지 최종 검증 과정을 거친다.
검증 단계를 거친 이후에 최종적으로 배포하게 되는데, 이 검증의 자동화를 유무로 용어가 약간 갈린다.
용어 Tip
- Release: 마지막 제품이 될 가능성이 있는 베타 버전, 상당한 버그가 나타나지 않으면 출시할 준비가 되었음을 의미한다.
- Compile: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일, 즉 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 complier라고 한다.
- Build: 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 일
- Deploy: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
- Hotfix: 제품 사용 중에 발생하는 버그의 수정이나 취약점 보완, 또는 성능 향상을 위해 긴급히 배포되는 응급 패치 프로그램.
지속적인 제공은 검증팀이 직접 버그 테스트를 거쳐 수동으로 배포하는 과정을 뜻한다.
CI를 거쳐 검증 단계를 자동화하여 최종적으로 사용자에게 배포하는 과정을 뜻한다.
어쩄든, 검수과정을 수동/자동을 거쳐 최종적으로 배포한다는건 같으니 둘이 비슷한 개념이라 생각한다.
각 CI/CD 툴 특징 알아보기 => CI/CD 27가지 도구
ref:드림코딩 엘리, AWS CI/CD, RED HAT, 개발 버전표기 대략적으로 이해하기, 기타 용어