- 특정 토픽에 대해 공부/토론
- 만약 디자인 패턴이라고 한다면, 공부 + 나는 A라는 디자인 패턴이 오래된 것 같고 실무에서 본 적이 없는 것 같은데 어떻게 쓰이는지 아나?~ 같이 자유로운 진행 예정
SW 공학 - CI/CD
관련토픽 - 인프라/클라우드/도커/k8s/젠킨스/github action/aws codedeploy/travis ci
주요키워드 - 지속적 통합/지속적 제공/배포 자동화
- 애자일 방법론과 배포 자동화의 등장
- 애자일 방법론의 경우 소규모 릴리스를 통해 빠르게 개발하고 적용
- 배포 자동화는 프로덕션에 있어서 반복되는 작업을 줄이고자 하는 프로세스
- 프리즘 이용 시 프로덕션을 수정하거나 새로운 기능을 추가할 때마다 작업 -> 빌드 -> 테스트 작성 -> 테스트 배포 -> 테스트 검증 -> 배포 서버 선택 -> 배포 작업을 거치게 되는데
여기서 테스트 배포/배포 서버 선택 -> 배포의 경우 개발자가 수동으로 처리하는 것이 아닌
배포에 대한 이벤트를 통해 자동적으로 진행하여 애자일 방법론이 말하는 소규모 릴리스에 대한 피로를 줄이고 효율을 높이기 위함
- 단순 서비스가 아닌 MSA 및 컨테이너 기반의 프로덕션일수록 나누어진 환경에 배포를 위한 작업이 더욱 지루하고 반복
- 배포 자동화를 가능하게하는 운영원칙 지속적 통합(Continous intergration, CI)/지속적 제공(Continuous delivery, CD)
- 애자일 방법론의 경우 CI/CD는 권장사항
- 애자일 방법론의 소규모 릴리스를 통한 코드의 수시 변경과 VCS 이용을 위해서는 이전의 프로덕션과 현재 프로덕션에 대한 작업물의 지속적인 통합과 제공을 이루어야 함
- 장기간에 걸쳐 개발된 큰 코드보다 작은 규모로 작게 변화된 코드에서 결함과 기타 소프트웨어 품질 문제를 파악하기가 더 쉽다는 데 있다. 또한 개발자가 짧은 커밋 주기에 따라 작업하면 여러 개발자가 동일한 코드를 편집하고 커밋할 때 병합해야 하는 상황이 발생할 가능성도 낮출 수 있다.
- 지속적인 통합을 이루기 위해선 빌드-패키징-테스트의 자동화를 통해 개발자가 자주 코드를 변경하고 커밋할 수 있도록 만들어야함
- 지속적 통합이 끝나면 결과물을 push를 통해 자동적으로 배포할 수 있는 환경인 CD를 구성
- 이를 통해 CI/CD 간 이어지는 파이프라인 구축으로 개발-배포 간 자동화를 구축
- CI/CD의 구현
- CI/CD는 CI 구현을 우선적으로 수행
- CI/CD 툴은 대표적으로 Jekins/CicleCI/TravisCI/AWS CodeBuild/AWS CodeDeploy 등을 사용
- 버전 제어에서 코드를 풀링해서 빌드 실행
단계 게이트에서 자동화된 보안, 품질 및 규정 준수 확인과 필요한 경우 이를 뒷받침하는 승인 활성화.
코드로 자동화된 필요 인프라 단계를 실행해 클라우드 인프라 구축 또는 해체
타깃 컴퓨팅 환경으로 코드 이동
환경 변수를 관리하고 타겟 환경에 맞게 구성
애플리케이션 구성요소를 웹 서버, API, 데이터베이스 서비스와 같은 적절한 서비스로 푸시 
새 코드 푸시에 필요한 서비스 엔드포인트를 호출하거나 서비스를 재시작하기 위해 필요한 단계 실행
지속적 테스트 실행과 테스트 실패 시 롤백
제공 상태에 대한 로그 데이터 및 알림 제공 구성 관리 데이터베이스를 업데이트하고 IT 서비스 관리 워크플로우에 완료된 배포에 대한 알림 전송

