[CICD] CI/CD란?
CI란
코드 배포 전에 변경 사항이 자동으로 빌드되고 테스트되어 저장소에 통합되는 과정.
이를 통해 빌드 결과와 테스트 결과를 즉시 확인할 수 있음.
CD란
CI에서 생성된 안정적인 코드를 서버에 자동으로 배포하는 로직.
이 과정을 통해 코드는 빠르고 안정적으로 스테이징이나 프로덕션 환경에 반영됨.
프로젝트에서 CI/CD를 구축하면서 질문을 받았었다
CI/CD를 하면서 왜 효율성이 올라갔는지? 였다
일단 CI/CD를 하면서 하기전과 후를 비교해보자
CI CD란
- 지속적 통합(CI)
개발자들이 작성한 코드를 커밋하면, 각 커밋마다 자동으로 빌드와 테스트가 실행되는 프로세스이다.
문제가 발생하면 즉시 확인할 수 있도록 자동화된 테스트와 빌드 과정을 제공한다. - 지속적 제공(CD)
CI 과정을 확장하여 안정적인 코드 변경 사항을 스테이징 또는 프로덕션 환경으로 자동으로 배포하는 과정.
쉽게 말해서 CI/CD는 테스트, 통합, 배포의 과정을 자동화하는것을 의미한다.
CI/CD를 하지 않는다면 아래의 방식으로 배포를 한다.
- 새로운 기능에 대한 코드를 작성.
- Commit을 찍고 Github에 반영.
- 브랜치에 Merge 후 배포.
- 배포 시 컴퓨터 서버(예: AWS EC2)에 접속하여 새로운 코드를 다운로드하고 실행.
이 과정을 코드 수정 시마다 반복하기는 매우 번거롭고 비효율적이다.
그리고 다른사람들의 코드또한 지속적으로 들어오는데 테스트는 어떻게하지?
따라서 이러한 반복 작업을 자동화하고 효율적으로 처리하기 위해 CI/CD를 배우고 구축하는 것이 중요하다.
CI/CD를 구축할 수 있는 툴에는 여러가지가 있다
- Github Actions
- Jenkins
- Circle CI
- Travis CI
이 중에서 GitHub Actions와 Jenkins를 사용하여 CI/CD를 구축하는 방법을 중심으로 공부하고 기록해 나갈 예정이다.
Github Actions의 장점은 다음과 같다.
- Github 레파지토리와 강력하게 통합되어 있어서, Github의 모든 이벤트에 대응함.
- 워크플로우를 YAML파일로 정의하여 버전 관리가 용이하며 수정 및 공유가 간편함.
- 별도의 클라우드 설치 필요없음.
- 다양한 액션을 GitHub Marketplace에서 제공해줌.
Github Actions의 단점은 다음과 같다.
- Jenkins에 비해 실행속도가 느림
Jenkins의 장점은 다음과 같다.
- 유연성 : 플러그인과 커스터마이징 가능성이 매우 높아 다양한 요구사항에 대응 가능.
- 독립적 실행: 자체 서버에서 실행되므로 외부 의존성이 적음.
- 대규모 시스템에 적합: 여러 서버나 복잡한 시스템을 통합하고 관리하기에 적합.
Jenkins의 단점은 다음과 같다.
- 설정 및 유지관리의 어려움: 별도의 서버 설치가 필요하여 초기 설정에 시간이 걸림
- 비용 문제: 서버를 24시간 가동해야함
- 플러그인 의존성 문제: 플러그인의 업데이트와 호환성 유지가 번거로움
이라고 한다.
솔직히 조사하고 적었지만 한번 둘다 써보면서 저 장점과 단점이 맞는지 확인해봐야할것같다.
왜 둘다 써보느냐?
2022년 jetbrains 조사결과 Github Actions와 Jenkins를 둘다 사용하는 결과가 많았기에 사용해볼 예정이다
참고자료
https://circleci.com/docs/about-circleci/#what-is-ci-cd
CircleCI overview - CircleCI
An overview of CircleCI, continuous integration and continuous delivery
circleci.com
비전공자도 이해할 수 있는 CI/CD 입문·실전 강의 | JSCODE 박재성 - 인프런
JSCODE 박재성 | 비전공자 입장에서도 쉽게 이해할 수 있고, 실전에서 바로 적용 가능한 CI/CD 입문 강의를 만들어봤습니다!, 🤬 에라이, 못 해먹겠네!비전공자로 개발을 시작해 여러 회사에서 CTO로
www.inflearn.com
https://aws.amazon.com/ko/devops/continuous-integration/
CI란 무엇입니까? - 지속적 통합 설명 - AWS
테스트를 좀 더 빈번하게 수행함으로써, 팀에서는 이후에 더 큰 문제로 발전하기 전에 버그를 조기에 발견하고 해결할 수 있습니다.
aws.amazon.com