개념
CI/CD (Continuous Integration/Continuous Delivery)
- 자동화하여 애플리케이션을 더욱 짧은 주기로 고객에게 제공하는 방법
- CI/CD의 기본 목적은 지속적인 통합, 지속적인 서비스 제공, 지속적인 배포
- CI/CD의 목적을 이해하기 위해서는 코드 배포의 과정을 먼저 이해할 필요가 있다.
코드 배포의 과정
프로그래밍의 목적은 결국 사용자에게 우리의 코드를 결과물로써 보여주는 것이다. 그렇다면 그 과정은 어떠할까?
1. 컴파일
컴파일이란 우리가 만든 프로그래밍 언어를 기계가 이해할 수 있는 언어로 번역하는 과정이다.
프로그래머가 사용하는 C, java 등의 언어는 기계가 이해할 수 없다. 이러한 언어는 컴파일러가 기계가 이해할 수 있게 도와준다. 이러한 과정을 컴파일이라고 한다.
2. 빌드
컴파일된 기계 언어를 사용자에게 다시 보여주기 위한 과정이다.
빌드라는 과정을 기계가 거치면 완성된 상품, 즉 소프트웨어가 나온다.
java에는 maven, gradle 등의 빌드 도구가 있다. 이러한 빌드 도구는 컴파일의 역할도 수행해준다. 그리고 최종적으로 빌드를 진행하면 컴파일된 소스코드를 .jar, .war과 같은 산출물로 변환시켜준다.
3. 배포
최종적으로 만들어진 산출물을 각각의 서버에서 동작하도록 가공해 사용자들에게 공개하는 것이 배포이다.
코드 배포 과정에서 CI/CD의 필요성
사용자들에게 프로젝트를 배포했는데 오류가 생긴 상황을 가정해보자.
개발자들은 빠르게 문제를 파악하고, 수정하는 과정을 거쳐야 한다. 수정 이후에는 다시 컴파일, 빌드, 배포의 과정을 거쳐 수정된 코드를 검증할 필요가 있다.
이때 이 과정은 많은 시간이 소요되고, 중간에 실수할 가능성도 높다.
이를 위해 생긴 개념이 CI/CD이다.
CI (Continuous Integration)
CI는 지속적 통합이라는 뜻으로, 여러 명이 하나의 코드에 대해 수정을 진행해도 지속적으로 통합하며 관리할 수 있음을 의미한다.
- CI가 없으면, 위의 예시처럼 개발을 끝내고 배포가 되어야만 코드에 오류가 있는지 파악할 수 있다.
- CI를 적용하면, 개발자는 자신이 구현해야 할 코드만 구현하면 된다. 코드 작성 후, main 브렌치와 통합해 오류를 바로 파악할 수 있다.
- 그 이유는 개발자가 구현한 부분을 병합할 때마다 빌드와 테스트가 실행되도록 자동화 시켜놓았기 때문이다. 실행 결과 우리는 어떠한 부분이 문제인지 배포 전에 파악할 수 있게 된다.
결론적으로 버그를 신속하게 찾아 파악할 수 있어, 시간을 단축할 수 있다는 장점이 있다.
CD(Continuous Deployment)
CD는 지속적인 배포라는 뜻으로, 소프트웨어가 항상 신뢰 가능한 수준에서 배포될 수 있도록 관리하자는 뜻인 지속적 제공(Continuous Delivery)로 사용되기도 한다.
우리는 CI를 거친 코드를 신뢰하고 바로 배포할 수 있다. 이때,
- 지속적 제공(Continuous Delivery)은 빌드와 테스트까지 성공적으로 진행된 소스코드를 github와 같은 저장소에 업로드하는 것을 의미한다.
- 지속적 배포(Continuous Deployment)는 저장소 뿐만 아니라 사용자가 사용하는 환경까지 안정적으로 릴리즈하는 것을 의미한다.
CI/CD 구축
CI와 CD 환경을 지원해주는 여러 툴이 존재한다. 이러한 툴들은 팀이 개발, 배포, 테스트를 자동화하도록 지원해 준다.
가장 널리 알려진 오픈소스 툴에는 Jenkins 자동화 서버와 Tekton Pipelines가 있다.
'Spring > 스프링부트와 AWS로 혼자구현하는 웹 서비스' 카테고리의 다른 글
섹션10. 24시간 365일 중단 없는 서비스를 만들자. (0) | 2023.02.24 |
---|---|
섹션9. 코드가 푸시되면 자동으로 배포해 보자 - Travis CI 배포 자동화 (0) | 2023.02.12 |
섹션8. EC2 서버에 프로젝트를 배포해 보자. (0) | 2023.02.06 |
섹션7. AWS RDS (1) | 2023.02.05 |
섹션 6. AWS 서버 환경을 만들어보자 - AWS EC2 (0) | 2023.01.30 |