서론
CI/CD는 코드 변경 사항을 자동으로 빌드, 테스트, 배포하여 소프트웨어를 신속하고 안정적으로 제공하는 개발 방식이다. CI는 지속적 통합으로 빌드와 테스트를 자동으로 수행해주고 CD는 지속적 제공/배포로 배포를 자동으로 수행해준다.
처음 위 정의를 봤을 때 자동으로 특정 작업을 수행해준다고 하니 개발 과정에서 도움을 주는 것 같기는 했지만, 구체적으로 어떻게 적용되는 것이고 어떤 이점을 주며 어떻게 사용할 수 있는지와 같은 부분을 이해할 수 없었다.
위 과정을 보다 효율적으로 이해하기 위해서 CI/CD과정이 개발자 입장에서 어떠한 순서로 흘러가는지 먼저 알아보자.
CI/CD 과정
1. 개발자가 작성한 코드를 원격 저장소에 commit/push
2. CI도구(jenkins, GitHub Actions 등) 가 변경을 감지하고 별도의 서버에서 빌드 및 테스트 진행
3. 빌드 및 테스트 여부 개발자에게 보고
4. 개발자가 결과를 확인하고, 성공 시 merge
5. CD 조건을 충족하면 자동 또는 수동 승인을 거쳐 배포
CI(지속적 통합)
CI는 지속적 통합으로, 빌드와 테스트를 자동으로 수행해주는 과정이라 정의했다. 빌드와 테스트에 대해 알아보자.
빌드
빌드는 소스코드를 실행 가능한 프로그램으로 변환하는 과정을 말한다. 이러한 빌드에는 3가지 단계가 존재한다.
1. 컴파일 - 컴파일은 소스코드를 기계어로 변환한다.
2. 링킹 - 링킹은 컴파일 된 코드를 라이브러리와 결합하여 실행 파일을 만든다. (가상 머신이 있는 자바에서는 이 과정이 필요 없다)
3. 패키징 - 패키징은 프로그램을 배포 가능한 형식(ex: .exe, .jar, .zip)으로 묶는다.
테스트
테스트는 개발자가 작성한 테스트 코드를 자동으로 실행해줌으로써 작성한 코드가 의도한 대로 동작하는지 검증하는 과정이다.
여기서 말하는 테스트는 유닛 테스트, 통합 테스트 E2E 테스트 등 다양한 테스트를 포함하는 개념이다. 테스트에 대한 개념이 부족하다면 아래 글을 이해하자.
테스트 코드(Test Code)
서론개인 프로젝트를 진행하면서 테스트 코드를 명확한 이해 없이 대략적인 느낌대로 작성하고 있다고 느꼈다.이 글을 통해 테스트 코드에 대한 개념을 명확히 하여 체계적이고 효과적인 테스
win9.tistory.com
CI 도구는 이러한 빌드와 테스트를 자동화하여 그 결과를 개발자에게 보고한다. 나는 여기서 의문이 생겼다.
의문점
나는 개발자가 commit/push를 하기 전에 먼저 로컬에서 빌드, 테스트 과정을 거칠텐데 왜 CI도구가 한번 더 빌드, 테스트를 할까? 라는 의문이 생겼다.
그 이유는 다음과 같았다.
일관된 환경 보장: CI 시스템이 표준화된 환경에서 빌드와 테스트를 수행하기에 일관된 결과를 보장한다.
자동화: 코드 변경이 있을 때마다 자동으로 빌드와 테스트를 실행하여 지속적인 검증을 제공한다.
즉, CI도구가 가상 환경에서 빌드와 테스트를 진행함으로써 일관된 환경 보장과 자동화를 통해 협업과정에서 생기는 여러 변경사항 충돌을 방지해준다.