코드를 수정할 때마다 로봇이 자동으로 그 변경사항을 받아 모든 테스트를 실행하고, 앱을 빌드하고, 배포까지 처리해 줘요. 사람이 손댈 일이 없어요. 그 로봇 조립 라인이 바로 CI/CD예요.
CI/CD는 지속적 통합(Continuous Integration)과 지속적 배포(Continuous Delivery 또는 Continuous Deployment)의 줄임말이에요. 전문 용어를 걷어내면 핵심은 하나예요. "코드를 변경했다"에서 "서비스에 반영되어 작동한다"까지의 전 과정을 자동화해서, 사람이 각 단계를 일일이 챙기지 않아도 되게 만드는 거예요. 작업물을 개발자 손에서 사용자에게 전달하는 컨베이어 벨트예요.
두 단계는 각각 다른 문제를 해결해요.
- CI, 지속적 통합은 라인의 앞 단계예요. 누군가의 변경사항이 들어올 때마다 다른 사람들의 작업과 자동으로 합쳐지고 모든 테스트가 실행돼요. 목적은 문제를 즉시 잡는 거예요. 몇 주 뒤에 뒤엉킨 코드를 발견하는 대신, 문제가 생기는 바로 그 순간에 포착해요. 품질 검수 스테이션이에요. 검사를 통과해야만 벨트가 움직여요.
- CD는 라인의 뒷 단계이고, 여기서 두 가지 D로 갈려요. Continuous Delivery(지속적 제공)는 검사를 통과한 변경사항을 자동으로 빌드해 배포 준비 상태로 만들되, 최종 서비스 반영은 사람이 승인해요. Continuous Deployment(지속적 배포)는 한 발 더 나아가서 검사를 통과한 변경사항을 버튼 하나 누르지 않고 자동으로 사용자에게 전달해요. 어느 쪽이든, 자정에 파일을 직접 서버에 복사하는 일은 없어요.
공장 라인을 머릿속에 그려 보세요. 원자재(코드 변경)가 한쪽 끝에 들어오면 스테이션을 자동으로 통과해요. 합치고, 테스트하고, 빌드하고, 배포해요(또는 배포 준비를 마쳐요). 어느 스테이션에서라도 실패하면 — 테스트가 깨지거나 빌드가 컴파일에 실패하면 — 벨트가 멈추고 정확히 어디서 문제가 생겼는지 모두에게 알려져요. 모든 스테이션을 통과하면 완제품이 반대편으로 굴러 나와요. 누가 손으로 들어 나를 필요가 없어요.
CI/CD가 현대 소프트웨어 개발에서 조용한 승수 효과를 내는 이유가 있어요. 배포를 지루하게 만들기 때문이에요. 좋은 의미에서요. CI/CD가 없으면 릴리즈는 긴장되는 수동 의식이에요. 테스트를 직접 돌리거나(아니면 그냥 기도하거나), 빌드하고, 서버에 복사하고, 제발 잘 되길 바라는 거예요. 그러니 팀은 드물게, 긴장하며 배포할 수밖에 없어요. CI/CD가 있으면 배포는 그냥 "변경사항을 머지하고 라인이 돌게 두는 것"이에요. 로봇이 매번 똑같은 방식으로 모든 걸 검사하기 때문에 하루에도 여러 번 차분하게 배포할 수 있어요. 테스트 실행, 빌드, 배포, 스테이징 환경 선반영, 그리고 혹시 문제가 생기면 롤백까지, 앞서 다룬 거의 모든 요소가 여기서 연결돼요.
"파이프라인에 올라갔다" 또는 "CI가 green이다"라는 말을 해독하면 이런 뜻이에요. 자동화 라인이 이 변경사항을 검사했고 전부 통과했다는 거예요. (Green은 기계가 만족했다는 신호예요. 실제 서비스 반영 전에 사람의 코드 리뷰나 최종 승인이 필요할 수도 있어요.) CI/CD는 팀이 빠르게 움직이면서도 무언가를 망가뜨리지 않게 해주는 기계예요. 검사가 절대 생략되지 않고, 지치지도 않으니까요.
머지가 작업을 하나로 합치는 것이라면, CI/CD는 그 이후를 맡는 로봇 라인이에요. 자동으로 합치고, 테스트하고, 빌드하고, 배포해요. 소프트웨어 릴리즈를 손에 땀을 쥐는 행사가 아닌 평범한 일상으로 만들어 줘요.