CI/CD 의 필요성

개발 후 운영을 하기까지 다음 그림의 프로세스가 반복해서 진행된다.

즉, 개발 프로세스(Dev)의 일종으로 개발을 하여 빌드를 하고 운영 프로세스(Ops)의 일종으로 릴리즈, 배포, 모니터링이 반복된다. 점점 이것을 짧은 쥐기로 반복하는 DevOps가 등장하면서 CI/CD가 중요해졌다.

CI - Continuous Integration

  • 정의: 지속적으로 퀄리티 컨트롤을 적용하는 프로세스를 실행하는 것

    어플리케이션 코드에 변경이 생기더라도 정기적인 빌드와 테스트를 통과하여 하나의 레포지토리에 관리가 되는 것

  • 예시:

    • SCM(Source Code Management): 깃헙 레포 하나로 소스코드를 머지하고 충도를 처리하는 과정
    • 테스트 코드를 통해서 유효성을 검증하는 과정
  • 장점:

    • 소스코드를 Ready-to-run 상태로 유지할 수 있다. 이 부분은 혼자 개발할 경우 장점을 느끼기 어렵지만 주로 여러명이서 협업하여 개발을 하기 때문에 중간에 합류한 그 누구도 빌드가 가능한 소스코드를 공유받을 수 있다.
    • 빌드가 가능한 소스코드를 받으면 합류한 사람과의 소통비용이 감소해 생산성이 올라간다.
    • 미루었다가 병합하는 과정을 거치는 것보다 짧은 주기로 바로바로 빌드 가능한 상태로 업데이트하는 것이 시간 효율적이며 소스코드의 퀄리티도 유지된다.

CD - Continuous Delivery & Continuous Deployment

  • Continuous Delivery - CI 과정 후 유효성 검증이 끝난 코드를 레포지토리에 올리는 것을 자동화 (즉, 프로덕션 레벨로 배포할 수 있는 소스코드를 자동으로 올리는 것)
  • Continous Deployment - 위 소스코드를 프로덕션 레벨로 릴리즈 하는 것. 쉽게 말해서 수정한 어플리케이션이 몇분 이내로 재배포되어 자동 실행될 수 있도록 하는 것.
  • 장점:
    • 개발 → 배포 과정이 간단하여 사용자 피드백을 빠르게 받을 수 있다. 즉, 장애 대응을 빠르게 할 수 있다.
    • 여러 서버를 사용하는 경우 자동화 되어 있지 않으면 개별 서버에서 각각 실행을 해야하기 때문에 배포에 소요되는 시간이 굉장히 길다.

CI/CD 툴

  • Jenkins - 직접 설치해서 서버 운용해야하고 자바 분야에서 자주 사용된다.
  • Circle CI
  • Travis CI

참고링크