개발자가 코드를 수정하고 빌드와 테스트를 하고 배포까지 반복하게되면 공통부분에 상당히 많은 부분이 소요가 됩니다.
이러한 기능을 자동화 한다면 개발에 집중하고 핵심 로직에 대한 고민을 할 수 있습니다.
실무에서 일하며 일일히 빌드와 테스트, 배포과정을 개발자가 직접한다는 것은 리소스낭비이고 심한 경우에는 업무의 대부분을 빌드와 테스트, 배포에 투자해야 할 수도 있습니다.
Continuous Integration 의 약자로 지속적 통합이라는 뜻입니다. 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.
변경사항을 정기적으로 커밋하여 모든 사람들에게 동일 작업 기반을 제공하는 것으로 시작됩니다.
Continuous Delivery의 약자로 지속적인 서비스 제공을 의미합니다. 배포 자동화 과정을 진행합니다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포가 된다.
입증된 지속적 통합 및 지속적인 전달 단계를 기반으로 하고 단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포됩니다.
젠킨스
오늘날 시장에서 널리 사용되는 CI/CD 도구 중 하나인 Jenkins는 중앙 빌드 및 지속적인 통합 프로세스가 가능하며, Windows, macOS 및 기타 Unix 계열 운영 체제용 패키지가 포함된 독립형 Java 기반 프로그램이다. 수백개의 플러그인을 사용할 수 있는 Jenkins는 소프트웨어 개발 프로젝트의 빌드 파이프라인 구성, Build 자동화의 확립, 배포 및 테스트 자동화 등을 지원한다.
AWS 프리티어에서 함께 사용하기엔 메모리 부족이 있다고 한다.
실무에서는 별도의 젠킨스 서버를 구축해서 빌드 파일(jar) 전송을 해서 자동화 과정을 거친다고 한다.
홈페이지: https://jenkins.io/
- EC2, ECS , Lambda 등 배포대상은 여러가지 존재한다.
- 에이전트 라는 프로그램을 설치하여 EC2가 사용하게 해준다.
- 지원하는 저장소는 S3, GitHub , Bitbucket 등이있다.
- public 저장소의 경우 무료로 사용 가능하며 private 저장소는 월마다 제공되는 무료 사용량 초과 시에 요금이 부과된다. 무료 계정을 기준으로 500MB의 스토리지와 월마다 2,000분의 실행시간이 제공된다.
일단, CI/CD환경은 메모리 스와핑을 통해 젠킨스와 서버를 함께 AWS 프리티어에 적용해보고
만약 서버에 무리가 가게되면 프리티어 증설 혹은 github actions 로 하는 것이 좋을 듯하다.
https://seosh817.tistory.com/104
https://tecoble.techcourse.co.kr/post/2021-08-14-ci-cd/
https://www.youtube.com/watch?v=0Emq5FypiMM&list=WL&index=9
AWS codeDeploy: https://galid1.tistory.com/745
Github actions:
https://meetup.nhncloud.com/posts/286
https://www.daleseo.com/github-actions-basics/