오늘 뭐했냐/개발에 대한 주저리

23.10.10 ci/cd 다시 정리

스스로에게 2023. 10. 14. 13:25

기존에 정리한 것은 내용이 부족한 부분이 많아 다시 찾아보고 거기서 생긴 의문을 다시 추가했다.

 

지속적 통합 (Continuous Integration, CI):

  • 목적: 코드 변경사항을 정기적으로 통합하여 소프트웨어 품질을 향상시키고, 개발 과정에서 발생할 수 있는 문제를 조기에 발견하고 해결합니다.
  • 과정: 개발자들이 자신의 변경사항을 공유 코드 저장소(예: Git)에 자주(일반적으로 하루에 여러 번) 푸시(push)합니다. 코드가 저장소에 푸시될 때마다, 자동화된 빌드 및 테스트가 실행되어 코드 변경사항이 나머지 시스템과 잘 통합되는지 검증합니다.
  • 이점: 버그를 빠르게 찾아내고 해결할 수 있으며, 소프트웨어의 품질을 지속적으로 유지할 수 있습니다.

지속적 배포 (Continuous Deployment) 또는 지속적 전달 (Continuous Delivery):

  • 목적: 소프트웨어의 변경사항을 자동으로 테스트하고 배포 프로세스를 자동화하여, 소프트웨어를 보다 빠르고 안정적으로 고객에게 전달합니다.
  • 과정:
    • 지속적 전달 (Continuous Delivery): 변경사항이 자동으로 테스트되고, 프로덕션 환경으로의 배포 준비가 완료됩니다. 프로덕션 배포는 수동으로 승인된 후 진행됩니다.
    • 지속적 배포 (Continuous Deployment): 모든 변경사항이 테스트를 통과하면 자동으로 프로덕션 환경에 배포됩니다. 이 과정에서 수동 승인은 필요하지 않습니다.
  • 이점: 신속한 피드백과 빠른 제품 반복이 가능하며, 배포 프로세스의 효율성과 안정성이 향상됩니다.

 

 

1. CI에서 테스트를 하는데 CD에서 하는 테스트는 뭐가 다르지?

 CI에서 테스트는 기존 코드와 통합되었을 때 문제가 없는지 확인 한다.  CD에서 테스트는 실제 환경에서 작동할 때 문제가 없을지와  성능이나 보안 등에 대해서 추가적인 테스트를 한다. 

 

2. 새로운 기능을 만들 때마다 새로운 테스트가 필요할텐데?
 개발자가 미리 만들 기능에 대해서 이렇게 작동해야한다는 테스트를 준비해야하고 이것을 파이프라인에 추가한다. 따라서 미리 테스트를 만들고 개발을 하는 TDD가 보완하는 방법이 될 수 있다. 하지만 반드시 TDD를 하지 않고 개발 후 혹은 중간에 테스트를 추가해도 문제는 없다.

 

큰 기업에서는 테스트만 하는 사람이 있다는데 2번의 이유로 분업화한 것 같다.