CI (Continuous Integration) : 지속적인 통합
-> 빌드와 테스트 자동화
모든 개발이 끝난 후 코드 품질을 관리하는 고전적인 방식의 단점을 해소하기 위해 나타난 개념
새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 (가능하면 매시간 or 매일)
공유 리포지토리에 통합되는 과정을 통해 계속 품질을 유지하며 개발을 진행하는 방법
CI가 필요한 환경
1. 다수의 개발자가 형상관리 툴을 공유하여 사용하는 환경
-> 자동화된 빌드 & 테스트는 원천 소스코드의 충돌 등을 방어하는 이점
2. MSA (Micro Service Archietecture) 환경
-> MSA는 작은 기능별로 서비스를 잘게 쪼개어 개발하는 형태를 의미
MSA 환경에서는 대부분 Agile(소규모 기능 단위로 빠르게 개발 & 적용을 반복하는 개발방법론) 방법론이 적용되기 때문에 기능 추가가 매우 빈번. 이때 CI의 적용은 기능 충돌 방지등의 이점을 제공.
CD (Continuous Deployment) : 지속적인 배포
-> 배포 자동화
코드 변경 사항이 파이프라인의 이전단계(CI)를 모두 성공적으로 통과하면 수동 개입 없이 어플리케이션에 자동 배포돼서,
신속하고 능률적으로 사용자에게 새로운 기능을 제공
개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션 환경까지 릴리즈 되는 것을 의미.
MSA와 같은 환경에서 Agile 방법론이 적용된 경우,
서비스 사용자는 최대한 빠른 시간 내에 최신 버전의 Production을 제공받아야함.
-> 이 때, SW가 언제든지 신뢰 가능한 수준의 버전을 유지할 수 있도록 support 하는 것이 CD
속도 와 효율을 위해 CI / CD 개념을 사용
많이 쓰이는 CI / CD 도구
1. Jenkins
: 중앙 빌드 및 지속적인 통합 프로세스가 가능
: windows, macOS 및 기타 Unix 계열 운영 체제용 패키지가 포함된 독립형 Java 기반의 프로그램.
: 수 백개의 플러그인을 사용할 수 있고 sw 개발 프로젝트의 빌드 파이프라인 구성, build 자동화의 확입, 배포 및 테스트 자동화등을 지원
2. circleci
: 코드 구축, 테스트에서 배포에 이르기까지 사용자의 파이프라인 전반에 걸쳐 신속한 소프트웨어 개발 및 게시를 지원하는 CI/CD 자동화 도구.
: CircleCI를 git hub, github enterprice 및 Bitbucket과 통합하여 사용할 수 있다는 장점이 있음
3. TeamCity
: JetBrains의 빌드 관리 및 지속적 통합 서버로써 Java 환경에서 실행됨.
: Visual Studio 및 IDE와 통합될 수 있음
: Windows 및 Linux 서버에 모두 설치할 수 있으며 .NET 및 개방형 스택 프로젝트도 지원
4. Bamboo
5. GitLab
참고
https://engineering.linecorp.com/ko/blog/build-a-continuous-cicd-environment-based-on-data
'공부' 카테고리의 다른 글
Github Actions 적용해보기 (0) | 2024.01.19 |
---|---|
Github Actions란 (0) | 2024.01.19 |
즉시로딩과 지연로딩 (0) | 2024.01.04 |
STOMP 프로토콜 (1) | 2024.01.02 |
Websocket 프로토콜 (1) | 2024.01.01 |