JUINTINATION
CI/CD(지속적 통합/지속적 배포)란? 본문
어느새 지금 읽고 있는 책의 마지막 목차를 지나고 있다. 그래서 마지막 실습을 진행하기 전에 CI/CD가 무엇인지에 대해 간단하게 먼저 정리해 보고 넘어가 보려고 한다.
CI/CD
- CI: 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다.
- CI를 성공적으로 구현할 경우에 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리에 통합되므로, 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있다.
- CD: 지속적인 서비스 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)를 의미한다.
- 두 가지 의미 모두 파이프라인의 추가 단계에 대한 자동화를 뜻하지만, 때로는 얼마나 많은 자동화가 이루어지고 있는지를 설명하기 위해 별도로 사용되기도 한다.
A 로컬 컴퓨터의 프로젝트와 B 로컬 프로젝트의 통합을 한다고 가정했을 때, 안전한 코드인지 프로젝트 테스트 과정을 거치는 검증 과정이 필요하다. 검증이 성공적으로 끝나면 빌드를 진행해야 하며, 이후에 빌드 된 실행 파일을 실제 서버에 올려 서비스해야 한다. 이러한 CI/CD를 구현하는 방법에는 크게 2가지가 있다.
폴링(polling) 기법
간헐적인 시간을 두고 계속해서 request 요청을 통해 코드의 변화가 있는지 물어보는 것을 폴링(polling) 기법이라고 하며, 대표적으로 폴링 기법을 사용하는 CI/CD 도구에는 Travis가 있다.
- 중간에 서버를 하나 만든 다음, 깃허브와 같은 형상관리 툴에 계속해서 request 요청으로 코드가 push 되었는지 물어본다.
- 코드의 변화가 감지되면 코드를 다운받는다.
- 해당 코드의 단위 테스트와 통합 테스트를 진행한다.
- 테스트에 성공하면 빌드한다.
- 빌드가 끝나면 배포할 서버로 코드를 전달한다.
폴링 기법을 사용하여 중간 서버를 만들 수도 있지만, 이는 계속해서 request 요청을 하며 물어봐야 하니까 서버 입장에서 힘들 수 있다. 그래서 다음과 같이 깃허브에서도 제공해 주는 웹훅 서비스를 많이 사용한다.
웹훅(Webhook) 기법
폴링 기법과 하는 일은 똑같지만, 깃허브의 특정 Repository에 코드가 push 되면 자동으로 특정 브랜치에 소스코드가 업로드 되었을 때 업로드되었다는 이벤트를 전달해 주는 역할을 하는 hook을 날려준다. 이때 hook을 받으면 똑같이 코드를 테스트 서버로 내려받고 테스트에 필요한 프로그램을 설치한 뒤 테스트를 하고 프로젝트를 빌드하여 AWS에 전달해준다. 대표적으로 웹훅 기법을 사용하는 도구에는 Jenkins가 있다.
결론
간단하게 CI/CD가 무엇인지와 이를 구현하는 방법 2가지를 정리해보았다. 사실 마지막에 GitHub Actions에 대해서도 정리해보려고 했는데 이에 대한 설명은 깃허브 공식 문서에 잘 나와 있어서 참고하면 될 것 같다. 물론 이 글의 내용도 책에 있는 내용을 그냥 정리한 것 뿐이지만.. 아무튼 다음에는 GitHub Actions를 이용한 CI/CD 관련 실습을 할 예정이니 관련 내용도 정리할 수 있으면 해보도록 하겠다.
'Amazon Web Services' 카테고리의 다른 글
AWS 엘라스틱빈스톡 413 Request Entity Too Large 오류 (0) | 2024.07.29 |
---|---|
GitHub Actions를 활용한 CI/CD 배포 (0) | 2024.07.19 |
AWS 엘라스틱빈스톡과 RDS(MariaDB) 연동하기 (1) | 2024.07.18 |
AWS 엘라스틱빈스톡 내부 구성 직접 확인하기 (0) | 2024.07.16 |
AWS 엘라스틱빈스톡 프로젝트 배포 (1) | 2024.07.16 |