CI/CD란 무엇인가? 알아보자

캡틴 노드랭크·2021년 9월 1일
0

잡담

목록 보기
2/3
post-thumbnail

CI/CD는 어떠한 스택이나 언어가 아닌 현업에서 사용하는 효율적인 개발 프로세스이다.

두 개의 공통점은 현대에서 컴퓨터의 성능 향상과 시장의 발전으로 빠르게 변화하고있다. 그렇기 때문에 다양한 개발사에서 시장과 고객의 요구에 빠르게 반응하고, 제품을 출시하고 업데이트를 할 것인가를 핵심 과제로 잡고있다.

세계적인 기업들이 개발 프로세스로 활용하는 것이 CI/CD이다.

Continuous Integration(지속적인 통합)

N명의 개발자가 Git과 같은 버전 관리 시스템을 사용할때, 각 개발자들은 기본 틀이 잡혀있는 코드를 clone 받은 이후에 각 기능 작업을 시작한다.

여러명의 개발자가 만약 동시에 저장소에 병합할 경우 반드시 충돌(Conflict)이 발생한다.

각 개발자들은 충돌 해결과정에 결국 많은 시간과 노력을 쏟게 될 것이고

결국, 미처 알지못한 버그가 축적된다거나 앱(app)을 사용하는 고객에게 업데이트를 신속하게 제공하기 어려워진다.

그렇기 때문에 보다 나은 방법을 찾아 나온 개발 방법론으로 CI 라는 개념이 탄생했다.

CI의 원칙중 대표적인 것으론 다음과같다.

  1. 코드 변경 사항을 주기적으로 빈번히 머지해야한다.
  • 최대한 작은 단위로 기능을 나누고, 개발 하고 통합한다.
  1. 통합을 위한 단계(build, test, merge)의 자동화
  • Merge true/false => Build true/false => Test true/false
  • 기능 개발 => 코드리뷰 => 병합(merge) => 빌드(build) (True/False) => True ? => 테스트(Test) (True/False) => True? => Release => 배포 단계 CD
  • 개발 생산성 향상과 버그 수정 용이, 코드 퀄리티 향상을 기대할 수 있음.
  • 안전성 높은 제품 제공

Continuous Delivery/Deployment(지속적 제공/배포)

지속적인 통합 CI 단계를 거쳐 제품이 Release 단계를 거쳐 Deploy하기 위해 제품이나 서비스가 정상적으로 고객에게 제공되는지 최종 검증 과정을 거친다.

검증 단계를 거친 이후에 최종적으로 배포하게 되는데, 이 검증의 자동화를 유무로 용어가 약간 갈린다.

용어 Tip

  • Release: 마지막 제품이 될 가능성이 있는 베타 버전, 상당한 버그가 나타나지 않으면 출시할 준비가 되었음을 의미한다.
  • Compile: 사용자가 작성한 코드를 컴퓨터가 이해할 수 있는 언어로 번역하는 일, 즉 컴퓨터가 이해할 수 있는 기계어로 변환하는 작업이다. 이러한 작업을 해주는 프로그램을 가르켜 complier라고 한다.
  • Build: 컴파일된 코드를 실제 실행할 수 있는 상태로 만드는 일
  • Deploy: 빌드가 완성된 실행 가능한 파일을 사용자가 접근할 수 있는 환경에 배치시키는 일
  • Hotfix: 제품 사용 중에 발생하는 버그의 수정이나 취약점 보완, 또는 성능 향상을 위해 긴급히 배포되는 응급 패치 프로그램.

CDelivery

지속적인 제공은 검증팀이 직접 버그 테스트를 거쳐 수동으로 배포하는 과정을 뜻한다.

CDeployment

CI를 거쳐 검증 단계를 자동화하여 최종적으로 사용자에게 배포하는 과정을 뜻한다.

어쩄든, 검수과정을 수동/자동을 거쳐 최종적으로 배포한다는건 같으니 둘이 비슷한 개념이라 생각한다.

CI/CD 파이프라인

CI/CD 관련 다양한 툴

각 CI/CD 툴 특징 알아보기 => CI/CD 27가지 도구

ref:드림코딩 엘리, AWS CI/CD, RED HAT, 개발 버전표기 대략적으로 이해하기, 기타 용어

profile
다시 처음부터 천천히... 급할필요가 없다.

0개의 댓글