CI/CD

CI/CD가 무엇인지 알아보기

이력서에 사이드 프로젝트에서 CI/CD 문서화를 작성해서 면접에서 CI/CD에 대해서 질문을 받았는데… 🫠 개념에 대해서는 바로 떠오르지 않아서 정리 해보았습니다.
(사이드 프로젝트에서 문서화한 CI/CD(Github Action, EC2, S3) 입니다. 😁 )

CI/CD

애플리케이션 개발 단계부터 배포 때까지 이 모든 단계들을 자동화를 통해 조금 더 효율적이고 빠르 사용자에게 빈번이 배포할 수 있도록 만드는 것을 말합니다.

CI (Continuous Integration)

  • 지속정인 통합 (Continuous Integration)
  • 버그 수정이나 새로 만드는 기능들이 메인 레파지토리에 주기적으로 빌드되고 테스트되어 머지 되는것을 말합니다.
    1. Grady Booch에 의해 처음 사용되어 지게 되다가 나중에는 extreme programming 개발 방법론에서 채택 됨

CI는 2가지를 포인트로 잡고 가는 것이 좋습니다. 이를 아래와 같이 소개합니다.

1. 코드 변경사항을 주기적으로 빈번하게 머지해야 한다.

이유는 개발자 둘이서 오래동안 가지고 있다가 한번에 머지를 하려고 하면 충돌을 잡는데 시간을 더 소모하기 때문입니다.
그렇기 때문에 이 기능들을 어떻게 작은 단위로 나눠서 반영하거나 배포할 수 있을지 논의하여 최대한 작은 단위로 개발해 나가는 것이 중요합니다.

2. 통합을 위한 단계 (빌드, 테스트, 머지)의 자동화

  • Merge, Build, Test (머지된 코드들이 빌드가 잘 되는지, 그리고 다른 버그를 초래하지는 않았는지 테스트 또한 중요합니다.)
  • 개발자들은 하루에도 몇 번씩 코드의 변경사항을 메인 레파지토리에 머지를 한다고 합니다. 🤔
    사전에 코드 리뷰는 당연하겠지만, 머지가 되면 스크립트를 통해 빌드와 테스트가 잘 됬는지 확인합니다.
    (잘 되면 Green 사인이 나오면 무사히 통과가 되어 배포되어 반영이 됩니다. 잘 안되면? Red 사인이 뜨며 문제가 생긴 개발자에게 알려줍니다.)

장점은 무엇이 있을까요?

  • 개발 생산성을 향상
    주기적으로 머지 함으로써 충돌을 피하면서 개발 생산성을 향상 시킬수 있습니다.
  • 문제점을 빠르게 발견 → 버그 수정 용이
    모든 코드가 자동으로 빌드되고 테스트 되기 때문에 코드의 결함이나 문제점이 빠르게 발견 됩니다.
    그리고 이렇게 발견되는 결함은 빠르게 수정할 수 있습니다. 왜냐하면 주기적으로 머지를 하기 위해 코드의 변경사항이 작기 때문에 문제를 수저알 때도 조금 더 고립된 작은 된위의 문제를 확인할 수 있기 때문입니다.
  • 코드 퀄리티 향상 👍
    CI를 잘 운영하기 위해서는 모든 개발자들이 자신이 작성하는 코드들에 한해서는 모두 Unit test 꼭 포함해야 되기 때문입니다.
    CI를 사용하면, 우리 프로젝트의 대부분의 소스 코드들이 자동으로 테스트가 될 수 있도록 만들기 때문에 조금 더 안정성 있는 개발을 할 수 있습니다.

CD (Continuous Delivery, Deployment)

어떻게면 자동화해서 배포를 관리할 수 있을지를 고민하는 단계입니다.

  • 지속적인 제공 (Continuous Delivery) CI(Build, Test) → CD(배포 준비 : 개발자나 검증팀이 배포 해도 되겠다고 판단되면 수동적으로 배포 → DEPLOY RELEASE)
  • 지속적인 배포 (Continuous Deployment) CI → 자동으로 DEPLOY RELEASE!!

회사마다 어느 정도의 얼마만큼의 자동화를 하느냐가 달라지기 때문에 CI/CD는 회사마다 팀마다 달라질 수 있습니다.

CODE > BUILD > TEST > RELEASE > DEPLOY(수동 or 자동)

CI/CD의 다양한 툴

  • ✨ Jenkins
  • ✨ Buildkite
  • GitHub Actions
  • GitLab CI/CD
  • Bitbucket Pipelines
  • circleci …

🧐 다른 글들도 찾아 보았지만, 드림코딩님 영상 하나로 끝난것 같다.

추가 사항

라인의 데이터 기반으로 지속적인 CI/CD 개선 환경 만들기 에서는 CI/CD에 데이터 시각화를 소개하는 글입니다.
이 글에서는 CI/CD 소스코드 정보와 빌드 정보 및 패키지 크기 등을 데이터 시각화해서 사용하는 방법을 보여주는데,
개인적으로 하기에는 뭔가.. 힘들 것 같고(기본에 더 충실하는게 더 좋을듯?), 후에 회사에 입사하게 됬을 때 한번 고려해볼 사항인것 같습니다.

🔖 참고 사이트


© 2021. All rights reserved.

Powered by Hydejack v9.1.6