hyperskill - Introduction to CI/CD 영어 원문
당신은 어플리케이션을 위한 새로운 기능을 작업하고 있습니다.
당신은 새로운 기능이 오작동을 일으키지 않는다고 어떻게 확신할까요?
그리고 이 기능이 동작한다 하더라도, 어플리케이션을 어떻게 이전 버전으로 되돌릴 수 있을까요?
당신이 혼자서 작업한다면 이러한 작업은 쉬울 수 있습니다.
만약 당신이 거대한 팀의 일부라면 어떨까요?
맞습니다, 이는 어려우며 번거로운 작업이 될 겁니다.
일부 개발자들은 서로 다른 라이브러리 버전을 사용 할 것이며,
어플리케이션이 작동하는 서로 다른 운영체제를 사용 할 겁니다.
하지만, 다른 운영체제에서는 어플리케이션이 작동하지 않습니다.
이러한 상황을 피하기 위해서,
Continuous Integration / Continuous Delivery (지속적 통합, 지속적 전달)
시스템, (CI/CD) 가 개입하게 됩니다.
CI/CD 내부의 "Continuous" 라는 단어가 의미하는 것은,
팀의 모두가 하루에 여러번 그들의 코드를 메인라인에 commit(커밋) 한다는 것 입니다.
"Integration"이 의미하는 바는, 커밋하기 전에 메인라인과 병합해야 한다는 것이며,
모든 것이 잘 작동하게 만들어야 한다는 것 입니다.
코드가 커밋 될 때, 개발자의 변경 사항은 자동화 된 프로세스를 사용하여 테스트됩니다.
이는 제공된 코드를 사용하여 빌드를 생성하고, 새로운 빌드에서 또다시 자동 테스트를 실행합니다.
이러한 자동화는 잠재적으로 어플리케이션을 부서뜨릴 코드에 대한 걱정 없이,
개발자들이 주기적으로 커밋들을 릴리즈 하게 해 줍니다.
자동화된 테스트는 이를 확실히 잡을 겁니다.
일반적으로, 밑의 단계들이 CI 에서 일어납니다 :
- Lint - 코드 스타일 확인
- Build - 기능과 함께 어플리케이션 빌드
- Test - 당신이 이미 존재하는 기능들을 망가뜨리지 않았다는 것을 보증
CI의 적절한 작동으로, 당신의 코드는 언제나 어떠한 인간의 간섭 없이도,
파이프라인에 의해 main branch 에 병합됩니다.
테스팅은 개발자가 만든 테스트가 코드 적용 범위에서 버그들을 격리시킨다면 충분히 효과적입니다.
개발자가 만든 테스팅 코드로 테스트 했는데 버그가 없다면 충분히 잘 만든 테스트라고 말할 수 있다는 뜻?
CI 이후에 모든 변경사항들을 자동적으로
production(제품)으로 deploy(배포) 할 때의 전략을 delivery(배달) 이라고 부릅니다.
이는 전체적인 어플리케이션 릴리즈 프로세스를 용이하게 해 줍니다.
Continuous delivery(CD) 는 짧은 주기의 소프트웨어를 생산하는 팀들을 위한 접근법이며,
각각의 빌드가 언제나 에러로부터 자유롭다는 것을 보증합니다.
일반적으로, CD 에서 일어나는 단계는 이와 같습니다 :
- Test - 존재하는 기능을 망가뜨리지 않았다는 것을 보증
- Release - 쉽게 이동 가능한 batch 로 모든 것을 하나로 묶기
- Deployment - 실제 세상에서 사용 가능하게 만들기
CD 에서는,
프로덕션 배포는 사람에 의해 승인되거나, 명백한 승인 없이 자동적으로 승인됩니다.
후자는 Continuous Deployment(CD) 라고 알려져 있습니다.
여기 또다른 지속적 프로세스들이 있습니다 :
- Continuous documentation (지속적 문서 작성) :
실제로 점진적 개발과 문서를 업데이트 하는 것은 개발 사이클의 부분으로서, 코드베이스와 싱크를 유지합니다.
- Continuous benchmarking (지속적 벤치마킹)
지속적 벤치마킹 스트림라인들은 지속적으로 코드에서 무엇이 일어나는지 집중하는 데 향상시킵니다.
- Continuous testing (지속적 테스팅)
지속적 테스팅은 코드의 모든 변경 사항을 즉시 테스트 할 수 있도록 만들어 줍니다.
CI/CD 는 당신이 수동으로 완료해야 할 프로젝트의 일부분을 자동화시킵니다.
어떤 의미로든 좋지 않은 코드가 메인 코드베이스에 들어가기 전에 코드의 이슈들을 찾습니다.
만약 당신의 팀이 고객에게 나쁜 코드를 제공했다면, 당신의 이번 주말은 끝났다고 봐도 됩니다.
또한 이는 technical debt(기술적 빚) 이라 부르는 무언가를 방지하는 데 도와줍니다.
메인 코드 레포는 시간이 지나며 업데이트 되므로,
누군가 빠르게 코드를 고치는 것이,
몇 년이 지나 기하급수적으로 비용이 들도록 코드를 고치는 것 보다 언제나 낫습니다.
몇 년이 지나 코드를 고치는 것은 이미 모든 코드베이스와 로직이 너무나 깊게 얽혀 있기 때문입니다.
Benefits of CI/CD - CI/CD 의 혜택
지속적인 Integration(통합), Delivery(배달), Deployment(배포)
는 많은 조직들이 그들의 제품들을 릴리즈할 때 제품 퀄리티에 타협하지 않고 더 자주 릴리즈하게 해 줍니다.
CI/CD 파이프라인은 개발자들, 테스터 그리고 최종 유저들에게 소프트웨어를 배달하는 프로젝트 참여자들에게
여러가지 도구들과 프레임을 포함하여 보조합니다.
이는 팀에 더 많은 공간을 줌으로서 소프트웨어 딜리버리 프로세스의 전체적인 효율적을 증가시킵니다.
여기 CI/CD 가 팀의 개발자들에게 어떻게 몇 가지 혜택을 주는지 적혀 있습니다 :
- CI/CD 는 배포 시간을 감소시키므로, 이러한 속도로 DevOps 팀이 최종 유저에게 기능적 어플리케이션을 빠르게 배달 할 수 있습니다.
- 딜리버리 리스크를 줄이므로, 코드 퀄리티를 보장하는 전문가를 더 이상 필요로 하지 않습니다.
CI/CD 파이프라인은 코드 퀄리티를 유지시킵니다. - 변경 사항이 추적 될 수 있습니다. 빠른 자동 피드백이 언제나 가동 가능합니다.
- CI/CD 파이프라인은 에러에서부터 자유롭게 만드므로, 에러를 격리시킬 수 있습니다.
- 롤백 이 쉬우므로, 어떠한 문제가 발생했을 때 이전 코드의 버전으로 되돌릴 수 있습니다.
Popular CI/CD environments - 유명한 CI/CD 환경
많은 CI/CD 솔루션들이 있스므로, 가장 유명한 것들을 살펴 봅시다 :
Jenkins - 젠킨스
젠킨스는 자체 호스팅 셋업입니다.
이는 빌드와 테스팅 프로세스를 자동화하기 위한 CI 오픈 소스 서버입니다.
젠킨스는 매우 유연한데,
퍼포먼스를 향상시키기 위해 많은 수의 멀티 플랫폼 플러그인이 제공됩니다.
Team City
Team City 는 테스트가 실패했을 때 실시간 보고를 제공하는 것 처럼, 매우 견고합니다.
또한 테스트 실패를 일으킨 정확한 커밋을 짚어 줍니다.
GitHub Actions - 깃헙 액션
GitHub Actions 는 클라우드 기반의 셋업입니다.
이는 워크플로우를 쉽게 자동화시키게 해 줍니다.
당신은 GitHub 에서 직접적으로 빌드, 테스트, 디플로이(배포) 할 수 있습니다.
또한 코드 리뷰 작성과 브랜치 관리 수행을 쉽게 만들어 줍니다.
GitLab - 깃랩
GitHub 대체제로 쉽게 셋업하는 셀프 호스팅입니다.
이는 더 나은 문서 작성을 가지고 있으며, 더 쉬운 컨테이너화 빌드를 사용하기 더 편합니다.
Conclusion - 결론
CI/CD 는 소프트웨어가 어떻게 지속적으로 작성되고, 통합되며, 분석되며, 고객에게 배포되는지 다룹니다.
CI/CD 는 새로운 코드를 테스트하는 데 도와주며,
로직의 원활함과 코드의 형태를 보장합니다.
또한 이는 프로젝트의 일부 영역을 성취하는 데 보조 해 줍니다.
CI/CD 는 기술 시장에서의 빠른 스피드, 높은 퀄리티의 코드, 기술적 빚에 대한 제약을 의미합니다.
words to remember
malfunction : 오작동, 부조
daunting : 어려운, 위압하다
cumbersome : 번거로운, 주체스러운
routinely : 일상적으로, 관례적으로
verify : 확인하다, 증명하다, 입증하다, 실증하다
intervention : 간섭
functioning : 작동
isolate : 격리하다, 고립시키다
batch : 일괄, 일회분으로 정리하다, 일회분으로 처리하다
approved : 승인됨 === approve : 승인하다
incrementally : 점진적으로
exponentially : 기하급수적으로
intertwined : 얽혀, 서로 얽히게 하다, 한데 얽히다, 한데 꼬이다
compromise : 타협하다
carry out : 수행하다
seamless : 원활한
fulfilling : 성취하는, 다핟, 채우다, 이행하다
'Hyperskill - 컴퓨터 CS 및 영어 독해 > Introduction to Docker' 카테고리의 다른 글
File types - 파일 유형 (0) | 2024.07.25 |
---|---|
Introduction to GitHub actions- 깃헙 액션 소개 및 기초 (3) | 2024.07.24 |
JSON - JSON 정의와 기초 (0) | 2024.07.22 |
Hashing: overview - 해싱: 개요 (1) | 2024.07.21 |
Introduction to logging - 로깅 기초 소개 (3) | 2024.07.20 |