[Dev] CI/CD란? 사용이유, 툴

Coodori·2023년 3월 15일
0

CherishU

목록 보기
2/29

환경을 만들어야하는 이유

개발자가 코드를 수정하고 빌드와 테스트를 하고 배포까지 반복하게되면 공통부분에 상당히 많은 부분이 소요가 됩니다.
이러한 기능을 자동화 한다면 개발에 집중하고 핵심 로직에 대한 고민을 할 수 있습니다.

실무에서 일하며 일일히 빌드와 테스트, 배포과정을 개발자가 직접한다는 것은 리소스낭비이고 심한 경우에는 업무의 대부분을 빌드와 테스트, 배포에 투자해야 할 수도 있습니다.

CI란?

Continuous Integration 의 약자로 지속적 통합이라는 뜻입니다. 애플리케이션에 대한 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 리포지토리에 통합되므로 여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작업을 할 경우 서로 충돌할 수 있는 문제를 해결할 수 있습니다.

변경사항을 정기적으로 커밋하여 모든 사람들에게 동일 작업 기반을 제공하는 것으로 시작됩니다.

CI 순서

  1. 개발자가 구현한 코드를 기존 코드와 병합한다.
  2. 병합된 코드가 올바르게 동작하고 빌드되는지 검증한다.
  3. 테스트 결과 문제가 있다면 수정하고 다시 1로 돌아간다. 문제가 없다면 배포를 진행한다.

CI가 필요한 상황

  • 여러 개발자가 형상관리 툴을 사용하며 기능 추가시 마다 commit 등을 날려 버전 업데이틀 할때 (즉, conflict의 가능성이 높을 때)
  • 버그 수정을 용이하게 해야할 때

CD란?

Continuous Delivery의 약자로 지속적인 서비스 제공을 의미합니다. 배포 자동화 과정을 진행합니다. 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포가 된다.

입증된 지속적 통합 및 지속적인 전달 단계를 기반으로 하고 단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포됩니다.

CI/CD Tool

  1. 젠킨스

    • 오늘날 시장에서 널리 사용되는 CI/CD 도구 중 하나인 Jenkins는 중앙 빌드 및 지속적인 통합 프로세스가 가능하며, Windows, macOS 및 기타 Unix 계열 운영 체제용 패키지가 포함된 독립형 Java 기반 프로그램이다. 수백개의 플러그인을 사용할 수 있는 Jenkins는 소프트웨어 개발 프로젝트의 빌드 파이프라인 구성, Build 자동화의 확립, 배포 및 테스트 자동화 등을 지원한다.

    • AWS 프리티어에서 함께 사용하기엔 메모리 부족이 있다고 한다.

    • 실무에서는 별도의 젠킨스 서버를 구축해서 빌드 파일(jar) 전송을 해서 자동화 과정을 거친다고 한다.

    • 홈페이지: https://jenkins.io/

  1. 서클CI
    • CircleCI는 코드 구축, 테스트에서 배포에 이르기까지 사용자의 파이프라인 전반에 걸쳐 신속한 소프트웨어 개발 및 게시를 지원하는 CI/CD 자동화 도구이다. CircleCI를 GitHub, GitHub Enterprise 및 Bitbucket과 통합하여 사용할 수 있다는 장점이 있다.

  1. AWS codeDeploy
 - EC2, ECS , Lambda 등 배포대상은 여러가지 존재한다.
 - 에이전트 라는 프로그램을 설치하여 EC2가 사용하게 해준다.
 - 지원하는 저장소는 S3, GitHub , Bitbucket 등이있다.
 

  1. github actions
    • 비교적 최근에 추가된 Git 서비스이다.
    • 자동으로 코드 저장소에서 어떤 이벤트가 발생했을때 특정 작업이 일어나게하거나 어떤 작업들을 반복해서 실행이 가능하다.
    • 빌드 및 배포, 데이터 수집 자동화 가능하다.
    • 일반 개발자들도 어렵지 않게 CI/CD 설정이 가능하다.
    • 요금과 제한
      • public 저장소의 경우 무료로 사용 가능하며 private 저장소는 월마다 제공되는 무료 사용량 초과 시에 요금이 부과된다. 무료 계정을 기준으로 500MB의 스토리지와 월마다 2,000분의 실행시간이 제공된다.

생각의 결론

일단, CI/CD환경은 메모리 스와핑을 통해 젠킨스와 서버를 함께 AWS 프리티어에 적용해보고
만약 서버에 무리가 가게되면 프리티어 증설 혹은 github actions 로 하는 것이 좋을 듯하다.

Reference

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/

profile
https://coodori.notion.site/0b6587977c104158be520995523b7640

0개의 댓글