◇ 공부 기록용으로 작성하였으니 틀린점, 피드백 주시면 감사하겠습니다 ◇
CI/CD 란?
CI는 지속적 통합(Continuous Integration),
CD는 지속적 제공(Continuous Delivery) 또는 지속적 제공(Continuous Deployment)의 약어이다.
(개발팀이 안정적으로 코드 변경을 제공하기 위해 사용하는 문화와 운영 원칙이다.)
→ 즉 쉽게 말해 개발팀이 더 효율적으로 개발하기 위해서 사용하는 작업 방식이다
→ DevOps 의 핵심 업무
CI/CD 는 DevOps을 위한 Agile 방법론의 권장 사항이다.
참고!
컴파일, 빌드, 배포
💡 컴파일 : 사람이 이해하는 언어를 컴퓨터&기계가 이해할 수 있는 언어로 바꾸어 주는 과정
💡 빌드 : 컴파일된 기계의 언어를 유저에게 보여주기 위해 패키징하여 하나의 소프트웨어 가공물로 만듬
(i.e. Ant, Maven, Gradle)
💡 배포 : 이렇게 만들어진 가공품을 유저에게 공개
유닛테스트, 통합테스트
유닛 테스트(Unit Test)와 통합 테스트(Integration Test)는 소프트웨어 테스트의 두 가지 주요 유형입니다.
💡 Unit Testing
유닛 테스트는 개별적인 소프트웨어 구성 요소(일반적으로 함수 또는 메서드)가 올바르게 작동하는지 확인하기 위한 테스트입니다. 일반적으로 개발자가 직접 작성하며, 작은 범위의 코드에 대해 매우 집중적으로 수행됩니다. 유닛 테스트를 통해 개발자는 자신이 작성한 코드가 다른 부분에 영향을 미치지 않고 예상한 대로 작동하는지 확인할 수 있습니다.
💡 Integration Testing반면에, 통합 테스트는 각 구성 요소를 하나의 시스템으로 통합하는 프로세스에서 발생하는 문제를 찾아내기 위한 테스트입니다. 통합 테스트는 두 개 이상의 구성 요소가 상호작용하는 방식을 확인하기 위해 수행됩니다. 일반적으로 개발자 또는 QA(Quality Assurance)팀에서 수행되며, 작은 규모의 시스템에서부터 큰 규모의 시스템까지 다양한 범위에서 수행됩니다. 유닛 테스트와 통합 테스트는 서로 보완적인 역할을 하며, 둘 다 소프트웨어 품질 향상을 위해 필수적인 요소입니다.
CI (Continous Integration) 란?
CI는 Continous Integration 지속적인 통합이라는 의미이다.
쉽게 생각하면 Build & Tesing 의 자동화이다.
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어
공유 레포지토리에 통합(merge)하는 것을 의미한다 (가능하다면 하루에 여러번까지)
코드 변경 사항을 지속적으로 통합(merge)하여
이를 통해 개발자들은 코드 변경으로 인한 문제점을 빠르게 파악하고 수정할 수 있다.
📌 CI 개발의 예시
master branch 에서 새로운 작업(task 1)을 수행해기 위해
새로운 branch 를 만들고 개발자가 로컬환경에서 작업을 한다고 가정하자
개발자가 작업을 끝내고 commit 후에 Pull-Request 를 만들었다
이 때 CI 툴을 통해 Building을 하게 된다
만약 Building 을 실패하면 개발자가 다시 문제를 고쳐야한다
그리고 CI 툴을 재실행
Build 를 성공하면 master branch에 merge 한다
Master branch에 merge 후에도 CI 툴이 다시 Build를 한다
만약 master branch에서도 에러가 생기면
다시 개발자가 문제를 고치고 CI 툴을 재실행해야한다
CI의 장점
- 빠른 피드백 (문제를 초기에 발견 가능)
- 매번 변경사항이 자동 테스트로 보장된다 → 더욱 안정적
- 빈번하게 변경사항이 merge 된다면 코드 차이가 많지 않다
- 문제 발견시에 조사가 쉽게 이루어질수 있다
- 리스크(불확실성)가 줄어든다
CD(Continous Delivery&Continous Deployment)란?
지속적 배포(Continuous Deployment) 와 지속적 전달(Continuous Delivery)는 의미가 다르다고 한다.
근데 딱히 내가 그 세세한 정의 차이점까지 알 필요는 없는거같다.
CD는 빌드와 테스트가 완료된 코드를 자동으로 배포(Deploy)하는 과정을 의미한다.
(CI가 끝난 뒤에 CD를 진행한다)
CD는 쉽게 생각하면 배포(Deploy) 의 자동화이다.
CI/CD tools 대표적인 예
- Jenkins
- Travis CI
- CircleCI
- GitLab CI/CD
- Github Actions
- AWS Code 시리즈
- CodeBuild
- CodeDeploy
- CodePipeline
- Kubernetes의 CD
- Argo CD
참고자료)
https://artist-developer.tistory.com/24
https://owin2828.github.io/devlog/2020/01/08/devops-4.html
'코딩 테스트' 카테고리의 다른 글
비즈니스 인텔리전스 (BI, Business Intelligence) (0) | 2023.04.20 |
---|---|
[Python] [코딩 지식] map 함수 활용하기 (0) | 2023.03.16 |
[Python] [코딩 지식] 파이썬 조건문에서의 자료형의 리턴 True와 False (0) | 2023.03.13 |