ci/cd에 대해 알아보자
CI란?
ci는 Continuous Integration의 약자로 지속적인 통합이라는 의미다.
어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되고
공유레포지토리에 통합하는 것을 의미한다.
이러한 환경에서 쓰면 좋다.
다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
git과 같은 형상관리 툴을 사용할 때 많은 작업을 하면 commit들이 쌓이게 된다.
그때 기능별로 빌드/테스트/병합(Merge)까지 하려면 상당히 번거롭게 된다.
이런 상황에서 자동화된 빌드/테스트를 통해 원천 소스코드의 충돌 등을 방어할 수 있다.
MSA(Micro Service Archietecture) 환경
최근 IT 업계에서 붐처럼 떠오르고 있는 아키텍처 모델이다.
MSA는 작은 기능별로 서비스를 잘개 쪼개어 개발을 하고 Agile방법론(일정한 주기를 가지고 빠르게 제품을 출시하여 고객의 요구사항, 변화된 환경에 맞게 요구를 더 하고 수정해나가는 탄력적인 방법론 )이 적용되기 때문에 기능 추가가 매우 빈번하게 발생된다.
그래서 충돌방지를 위해 ci가 유용하게 사용될 수 있다.
조사를 하면서 의문이 생겼다.
pr에서 conflict가 나는 상황은 ci개념이 아닌가?
답은 ci가 좀 더 넓은 개념에서 오류가 나는거다. conflict는 적은 코드를 두개발자 이상이 동시에 수정했을 때 발생하는 오류이고 ci는 전체적인 흐름, 버그 등에서 나는 오류라고 생각하면 된다.
또한
ci가 다 자동으로 테스트를 해주는데 Junit과 같은 테스트도구는 사용할 필요가 없는걸까?
ci가 테스트를 자동으로 실행하고 관리를 해주지만 자세한 테스트나 로직등은 Junit과 같은 테스트 도구를 사용하는게 맞다.
- 코드 푸시: 개발자가 변경사항을 소스 코드 관리 시스템(Git 등)에 푸시합니다.
- 자동 빌드: 푸시된 코드를 CI 서버에서 자동으로 빌드합니다.
- 자동 테스트: 빌드된 소프트웨어에 대해 자동화된 테스트 스위트를 실행하여 버그를 식별합니다.
- 결과 피드백: 테스트 결과와 빌드 상태에 대한 피드백을 제공합니다.
- 통합 문제 해결: 다른 개발자들이 동시에 작업할 때 발생하는 통합 문제를 해결합니다.
ci의 목표는
- 버그를 신속하게 찾아 해결하고,
- 소프트웨어의 품질을 개선하고,
- 새로운 업데이트의 검증 및 릴리즈의 시간을 단축시키는 것의 있다.
CD란?
Continuous Delivery & Continuous Deployment
지속적인 서비스 제공 & 지속적인 배포를 의미한다
ci의 확장으로서 ci가 완벽하게 구축된 후 이루어진다.
CD는 개발자의 변경 사항이 레포지토리를 넘어, 고객의 Production환경까지 릴리즈 되는 것을 의미한다.
예를 들어 MSA환경에서 Agile방법론이 적용될 때 서비스의 사용자는 최대한 빠른 시간내에 최신 버전의 Production을 제공받을 필요가 있다.
이 때, 소프트웨어가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support하는 것이 CD라고 할 수 있다.
이는 서비스의 개발팀과 비즈니스팀(영업, CS팀 등) 간의 커뮤니케이션 부족 문제를 해결해 줌으로써,
배포에 이르기까지의 노력을 최소한으로 단축시켜 준다는 Benefit을 제공한다.
ㅡ> 실제 작동하는 모습을 보여줌으로써 커뮤니케이션 문제를 해결
- Release : 배포 가능한 소프트웨어 패키지를 작성.
- Deploy : 프로비저닝을 실행하고 서비스를 사용자에게 노출 => 실질적인 배포
- Operate : 서비스 현황을 파악하고 생길 수 있는 문제를 감지
CI/CD 파이프라인
진행되는 배포 과정을 자동화시키는 방법을 구축하게 되는데, 그것을 CI/CD 파이프라인이라고 한다.
개발자가 코드를 원격 저장소에 올리면, 그 코드가 빌드 및 테스트와 릴리즈를 거쳐 배포 서버로 전달 된다. 배포 서버에 도달한 빌드된 코드는 애플리케이션 서버로 최종 배포가 완료 되고, 그 결과물을 유저가 직접 확인하게 된다.
여기서 자동화를 꾀하는 부분은 보통 코드가 빌드되면서 최종적으로 배포가 되는 단계까지다. 이 부분을 지속적인 통합 및 배포를 위하여 일련의 자동화 단계로 만드는데, 이것을 파이프라인을 구축한다고 표현한다.
CI/CD 파이프라인을 구성하는 기본 단계와 수행 작업
파이프라인을 여러 단계로 분리할 때, 대표적으로 쓰이는 세 가지 단계가 존재한다
- Source 단계: 모든 코드 변경 사항을 추적하고 관리하는 것이다. EX) Git
- Build 단계: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공합니다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.
- Deploy 단계: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.
파이프라인을 좀더 세분화하고 간소화하는 것이 DevOps의 역할이라고 보면 된다.
출처
CI/CD(Continuous Integration/Continuous Delivery)란?
CI/CD(Continuous Integration/Continuous Delivery) CI(Continuous Integration)와 CD(Continuous Delivery)는 애플리케이션 개발 단계를 자동화하여 더 짧은 주기로 클라이언트에게 제공하는 방법으로, 두 가지 개념은 팀의
tech1.tistory.com
https://artist-developer.tistory.com/24
CI/CD란 무엇인가 (Feat. DevOps 엔지니어)
안녕하세요. 개발자의 용어를 쉽고 명확하게 설명해드리는 개발자 김모씨입니다. CI/CD ?! 개발자로 밥먹고 사시는 분들이시라면, 혹은 IT서비스 업계에 종사하시는 분들이라면, 한 번 쯤은 들어
artist-developer.tistory.com
https://velog.io/@leejungho9/CICD-%EB%9E%80
CI/CD 란
CI/CD 란 CI/CD는 약어로, 몇 가지의 다른 의미를 가지고 있다. CI/CD의 "CI"는 개발자를 위한 자동화 프로세스인 지속적인 통합(Continuous Integration)을 의미한다. CI를 성공적으로 구현할 경우 애플리케
velog.io
'백엔드 > 뎁스스터디' 카테고리의 다른 글
6- ci/cd (2) (0) | 2024.06.25 |
---|---|
5- 동시성 처리 (2) (1) | 2024.05.28 |
5- 동시성 처리 (1) (0) | 2024.05.20 |
4- 스프링 시큐리티 + jwt(2) (0) | 2024.05.13 |
3- 스프링 시큐리티 + jwt (1) (0) | 2024.05.07 |