Code States/TIL

[0420] 지속적 통합 - 지속적 통합

ki1111m2 2023. 4. 20. 17:12

학습 목표

  • 지속적 통합의 필요성을 설명할 수 있다.
    • 지속적 통합 개념이 나오게 된 배경을 이해할 수 있다.
    • 지속적 통합의 장점을 설명할 수 있다.
    • 지속적 통합의 원칙을 이해할 수 있다.
  • 빌드/테스트의 개념을 이해할 수 있다.
    • 테스트 주도 개발(TDD)에 대한 정의와 필요성을 설명할 수 있다.
    • 테스트 주도 개발(TDD) 사이클을 설명할 수 있다.
    • 테스트의 종류 (단위 테스트, 통합 테스트, E2E 테스트)를 설명할 수 있다.
  • 릴리스의 개념을 이해할 수 있다.
  • CI 도구(여기서는 GitHub Action)를 이용하여 지속적 통합이 이루어지는 과정을 직접 구현할 수 있다
  • 다양한 CI 도구의 차이점을 이해할 수 있다.
  • 코드와 환경 변수를 분리해야 하는 이유를 설명할 수 있다.

  • 장점
    • 버그를 일찍 발견할 수 있다.
    • 빌드 및 테스트와 같이 사람이 해야 할 일들을 자동화할 수 있다.
    • 테스트가 완료된 코드에 대해 빠른 전달이 가능하다.
    • 지속적인 배포가 가능해진다.
    • 개발자의 생산성을 향상할 수 있다.
  • 원칙
    • 단일 소스 레파지토리를 유지해야 함
      • 프로젝트에서 제품을 빌드하기 위해 함께 조정해야 하는 수많은 파일이 포함되기 때문
      • 모든 파일이 단일 소스 레파지토리가 아닌 곳에 흩어져 있다면 추적하는 것이 힘들어짐
    • 빌드를 자동화해야 함
      • 사람이 명령을 입력하거나 대화 상자를 클릭하는 것은 시간 낭비
      • 수동으로 진행된다면 실수가 발생할 수 있음
    • 셀프 테스팅 빌드를 만들어야 함
      • 빌드 프로세스에 자동화된 테스트를 포함함으로써 버그를 더빠르고 효율적으로 파악할 수 있음
      • 테스트 주도 개발(TDD)을 통해 손상된 빌드를 즉시 확인, 수정할 수 있음
    • 매일 메인라인에 커밋을 해야 함
      • 메인라인: master 브랜치 등
      • 각자의 진행 상황을 추적하는 데 도움이 됨
      • 짧은 주기로 커밋을 하므로 충돌이 발생한 후 빠르게 충돌 상황을 감지할 수 있음
    • 몯느 팀원이 무슨 일이 일어나고 있는지 알아야 함
      • 지속적 통합은 커뮤니케이션에 관한 것이므로 모든 사람이 시스템 상태와 시스템에 적용된 변경 사항을 쉽게 확인할 수 있어야 함
    • 모든 커밋은 통합 서버의 메인라인에서 빌드 되어야 함
      • 개발자 간 개발 환경에 차이가 있기 때문
    • 빌드의 오류를 즉시 수정할 수 있어야 함
      • 지속적 통합 도구를 사용하면 빌드의 오류를 즉시 확인할 수 있음
    • 빌드가 빨리 되도록 유지해야 함
      • 지속적 통합의 요점은 신속한 피드백을 제공하는 것
      • 오랜 시간이 걸리는 빌드는 지속적 통합의 가장 큰 장애물
    • 운영 환경과 동일한 환경에서 테스트가 진행되어야 함
      • 환경의 차이로 인해 테스트에서 발생하는 일이 프로덕션에서 발생하지 않을 위험이 있음
    • 누구나 최신 실행 파일을 쉽게 얻을 수 있어야 함
    • 배포 자동화가 이루어져야 함
      • 응용 프로그램을 모든 환경에 쉽게 배포할 수 있는 스크립트를 갖는 것이 중요
      • 자동 배포는 프로세스 속도를 높이고 오류를 줄이는 데 도움이 됨
      • 테스트 환경에 배포하는 데 사용하는 것과 동일한 기능을 사용하기 때문에 저렴한 옵션이 될 수 있음
  • 지속적 통합에서 테스트가 중요한 이유
    • 테스트를 통해 결함과 버그를 조기에 발견할 수 있음
    • 개발자의 생산성을 향상할 수 있음
    • 소프트웨어의 품질을 보증하고 더 안정적이고 사용하기 쉽게 만듦