CI / CD

박영준·2023년 8월 21일
0

CS

목록 보기
9/16

CI / CD 에 대한 설명은 개발자 면접에서 자주 나오는 질문 중의 하나!


1. CI

1) 정의

  • "Continuous Integration", 지속적인 통합

  • "빌드와 테스트 자동화"

  • 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합하는 것

  • 변경 사항을 정기적으로 commit하여, 모든 사람에게 동일 작업 기반을 제공

    • commit할 때마다 빌드와 일련의 자동 테스트가 이루어져 동작을 확인하고, 변경으로 인해 문제가 생기는 부분이 없도록 보장

2) 사용 조건

(1) 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경

  • 지속적으로 서비스하는/현재 개발 중인 어플리케이션은 기능 추가 시마다 commit 등을 날려 레포지토리에 버전 업데이트를 한다.

    • 이때, 다수의 개발자가 한 팀으로 작업할 경우, 이 공유 레포지토리에 수많은 commit들이 쌓이게 된다.
    • 매번 기능별로 빌드/테스트/병합(Merge)까지 하는 것은 상당히 번거롭다.
  • 여기서 CI 의 자동화된 빌드 & 테스트는 원천 소스코드의 충돌 등... 을 방어해줄 수 있다.

(2) MSA (Micro Service Archietecture) 환경

  • 기존의 어플리케이션 : 모든 기능을 포함하는 하나의 거대한 서비스
    MSA : 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태

  • MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에, 기능 추가가 매우 빈번하게 발생

    • 이때, CI의 적용은 기능 충돌 방지 등...을 제공할 수 있다.

3) 필요성

  • 버그의 신속한 발견/해결

  • 소프트웨어의 품질 개선

  • 새로운 업데이트의 검증

  • 배포 시간 단축

2. CD

1) 정의

  • "Continuous Delivery & Continuous Deployment", 지속적 서비스 제공 혹은 지속적 배포

    • Continuous Delivery

      • 공유 레포지토리로 자동 배포하는 것
    • Continuous Deployment

      • Production 레벨까지 자동으로 deploy 하는 것
      • 코드 변경이 파이프라인의 이전 단계를 모두 성공적으로 통과하면, 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포
      • 품질 저하 없이 최대한 빨리 사용자에게 새로운 기능을 제공 가능
      • 간단한 코드 변경이 정기적으로 master에 commit
      • 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격
      • 문제가 발견되지 않으면 최종적으로 배포
  • "배포 자동화"

  • CI : 새로운 소스코드의 빌드, 테스트, 병합까지를 의미
    CD : 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 배포되는 것을 의미

  • 예시

    • MSA와 같은 환경에서 Agile 방법론이 적용될 경우,
      • 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공받을 필요가 있다.
      • 이때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support 하는 것이 CD

2) 필요성

  • 배포에 이르기까지의 노력을 최소한으로 단축

3. CI / CD 툴

  • Jenkins

  • Travis CI

  • Bamboo

  • ...


참고: CI/CD란 무엇인가 (Feat. DevOps 엔지니어)
참고: CI/CD 기본개념과 가장 많이 쓰이는 도구 5가지
참고: [CI/CD] CI/CD란? - 지속적 통합(Continuous Integration)/지속적 배포(Continuous Deployment) 기본개념

profile
개발자로 거듭나기!

0개의 댓글