개발자가 새로운 기능을 코딩하는 데 걸린 시간보다, 그 코드를 서버에 올리는 배포 과정에서 소비하는 시간이 더 길었던 경험이 있으신가요. 로컬 개발 환경에서 프로덕션 빌드를 생성하고, 빌드된 파일을 FTP나 SCP로 서버에 수동 업로드하고, 서버에 SSH로 접속하여 기존 프로세스를 중지하고 새 프로세스를 시작하고, 브라우저에서 이것저것 클릭하면서 혹시 문제가 없는지 수동으로 확인하며 아무 일 없기를 기도하는 과정. 이 전체 절차에 30분에서 길게는 1시간이 걸리고, 어느 한 단계에서라도 실수가 발생하면 곧바로 서비스 장애로 이어집니다.
CI/CD는 이 수동 과정 전체를 자동화하여, 코드 푸시 단 한 번의 동작으로 테스트부터 배포까지 완료하는 소프트웨어 개발 체계입니다.
CI와 CD, 각각의 정확한 의미와 역할
CI는 Continuous Integration, 한국어로 지속적 통합입니다. 여러 개발자가 각자의 브랜치에서 작업한 코드를 메인 저장소에 병합할 때, 자동으로 코드 스타일 검사(린트), 단위 테스트, 통합 테스트가 실행되는 프로세스입니다.
테스트에 실패하면 병합이 차단되고 해당 개발자에게 즉시 알림이 전송됩니다. 이를 통해 팀 전체가 항상 정상적으로 동작하는 코드베이스를 공유할 수 있고, 버그가 코드에 잠입하는 것을 배포 전 단계에서 사전에 차단할 수 있습니다.
CD는 두 가지 의미를 가집니다. Continuous Delivery는 CI를 통과한 코드를 언제든 배포 가능한 상태로 자동 준비하되, 실제 프로덕션 배포는 사람이 승인 버튼을 눌러 실행하는 방식입니다. Continuous Deployment는 한 걸음 더 나아가, 모든 테스트를 통과한 코드가 사람의 개입 없이 프로덕션 서버에 자동으로 배포되는 완전 자동화 방식입니다.
파이프라인에서 자동화해야 할 핵심 단계들
효과적인 CI/CD 파이프라인이 자동화해야 할 단계는 비교적 명확합니다. 가장 먼저 코드 품질 검사 단계에서 ESLint, Prettier, Black 같은 린터와 포매터를 실행하여 코드 스타일 일관성을 확보합니다.
다음으로 단위 테스트와 통합 테스트를 실행하여 기존 기능이 깨지지 않았는지 확인합니다. 테스트를 전부 통과하면 프로덕션 환경용 최적화 빌드를 생성합니다. 그 다음 Docker 이미지를 빌드하여 컨테이너 레지스트리에 태그와 함께 푸시합니다.
마지막으로 운영 서버에 새 이미지를 배포하고 헬스 체크 엔드포인트를 호출하여 애플리케이션이 정상적으로 구동되는지 자동 확인합니다. 도구 선택에서는 GitHub Actions가 퍼블릭 저장소에서 완전 무료이고, 프라이빗 저장소에서도 월 2,000분의 넉넉한 무료 티어를 제공하여 소규모 팀이 시작하기에 최적입니다.
GitLab CI/CD와 Jenkins도 엔터프라이즈 환경에서 널리 사용됩니다.
프로덕트 메이커의 배포 자동화 — 그리고 AI 가 바꿔놓은 풍경
저희는 컨테이너 기반의 배포 체계를 기본으로 둡니다. 백엔드는 Docker 이미지로 빌드해 컨테이너 레지스트리를 거쳐 운영 서버로 올리고, 프론트엔드는 빌드 결과물을 클라우드 스토리지(GCP 의 Cloud Storage, AWS 의 S3 등 클라이언트 인프라에 따라 선택) 와 CDN 으로 배포하는 하이브리드 구조가 일반적입니다. 백엔드 언어·프레임워크와 데이터베이스, 캐시 계층은 클라이언트 인프라와 운영 인력의 익숙한 기술에 맞춰 고르고, 한 가지 스택을 강요하지 않습니다. 자동화 도구도 GitHub Actions 를 자주 쓰지만 GitLab CI, Jenkins 도 프로젝트와 인프라 사정에 따라 골라 적용합니다.
예전에는 이런 배포 자동화를 한 번 잘 짜두고 그대로 두는 게 일반적이었습니다. 한 기업에서 한 번 통과한 방식을 다음 프로젝트에도 그대로 복사해 쓰는 식이 흔했고, 파이프라인을 새로 짜거나 깊이 손보는 일은 인프라 이해도가 높은 사람이나 전담 인프라 엔지니어의 영역으로 분리되어 있었습니다. 한 번 굴러가기 시작한 워크플로를 건드리는 것 자체가 위험으로 여겨졌기 때문입니다.
이 풍경이 최근 1~2년 사이 크게 달라졌습니다. AI 코딩 도구(Cursor·Windsurf·Claude Code 등) 가 YAML 워크플로 작성, Dockerfile 최적화, 클라우드 IaC 코드, 셸 스크립트처럼 "전통적으로 인프라 영역" 으로 분류되던 일을 자연어 지시로 빠르게 만들고 다듬을 수 있게 해주면서, 인프라 엔지니어가 아닌 개발자도 배포 자동화를 직접 손보고 개선할 수 있는 환경이 됐습니다. 한 번 통과한 워크플로를 그대로 보존하는 것보다, 더 빠르고 더 안전한 방법을 자주 시도해 보는 쪽이 비용이 오히려 저렴해진 시대입니다.
CI/CD 도입 전후로 실질적으로 달라지는 것들
CI/CD를 도입하면 개발팀의 업무 방식이 근본적으로 변화합니다. 배포 주기가 주 1회 또는 격주에서 하루에 여러 번으로 대폭 증가하고, 배포에 소요되는 시간이 30분에서 1시간에서 5분에서 10분 이내로 단축됩니다.
장애 발생 시 이전 버전으로의 롤백 시간이 수 시간에서 단 몇 분으로 줄어듭니다. 무엇보다 중요한 것은, 개발자가 배포에 대한 심리적 스트레스에서 해방되어 진짜 가치 있는 기능 개발에 온전히 집중할 수 있다는 점입니다.
CI/CD 투자를 시작하기에 가장 좋은 시점은 스테이징 환경과 프로덕션 환경이 분리되는 순간입니다. 배포 버튼을 누르기가 두려운 바로 그 순간이, 자동화가 필요한 정확한 순간입니다.