Bash 스크립트, 대규모 CI 환경에선 부족하다?
저자는 대규모 개발 환경에서 Bash 스크립트 기반 CI의 한계를 지적하며, 오케스트레이터(Orchestrator) 기반 시스템의 필요성을 강조함
Bash 스크립트는 단순 작업에 적합하지만, 복잡한 CI 파이프라인(CI Pipeline) 관리에는 유지보수성 및 확장성(Scalability) 측면에서 어려움이 있음
오케스트레이터는 작업의 병렬 처리(Parallel Processing), 자원 관리(Resource Management), 격리(Isolation) 기능을 제공하여 안정적인 CI 환경 구축을 지원함
OOM 킬러(OOM Killer), 파일 시스템 공유(Filesystem Sharing), Docker 캐시(Docker Cache) 등 공유 자원 사용 시 발생하는 문제점을 지적하며, 오케스트레이터의 고립된 환경(Isolated Environment)의 중요성을 강조함
Bash 스크립트의 근본적인 한계
저자는 Bash 스크립트가 단일 머신(Single Machine)에서 순차적인 작업을 처리하는 데는 적합하지만, 복잡한 CI/CD 파이프라인을 구축하는 데는 여러 문제점을 야기한다고 지적한다. 특히, Bash는 데이터 구조(Data Structure), 타입 시스템(Type System), 오류 처리(Error Handling) 기능이 부족하여, 대규모 프로젝트에서 유지보수성(Maintainability)과 확장성(Scalability)을 확보하기 어렵다. 또한, Bash 스크립트는 병렬 작업(Parallel Task), 자원 관리(Resource Management), 격리(Isolation) 기능을 직접 구현해야 하므로, 개발 생산성을 저해할 수 있다.
오케스트레이터 기반 CI 시스템의 장점
오케스트레이터(Orchestrator)는 CI/CD 파이프라인을 위한 전용 도구(Dedicated Tool)로서, Bash 스크립트가 가진 한계를 극복한다. 특히, 오케스트레이터는 작업의 의존성 관리(Dependency Management), 병렬 실행(Parallel Execution), 자원 할당(Resource Allocation), 실패 처리(Failure Handling) 기능을 제공하여, 안정적이고 효율적인 CI/CD 환경을 구축할 수 있다. 또한, 오케스트레이터는 로그 관리(Log Management), 모니터링(Monitoring), 알림 기능(Notification Feature)을 통해 CI/CD 파이프라인의 가시성을 높이고, 문제 발생 시 신속하게 대응할 수 있도록 지원한다.
공유 자원 사용 시 발생하는 문제점
Bash 스크립트 기반 CI 시스템은 공유 자원(Shared Resource) 사용 시 다양한 문제점을 야기한다. 특히, OOM 킬러(OOM Killer), 파일 시스템 공유(Filesystem Sharing), Docker 캐시(Docker Cache) 등은 빌드 간의 간섭(Interference)을 발생시켜, 예측 불가능한 오류를 초래한다. 오케스트레이터는 각 작업에 고립된 환경(Isolated Environment)을 제공하여 이러한 문제점을 해결한다. 각 작업은 자체 컨테이너(Container) 내에서 실행되므로, 다른 작업의 자원에 영향을 받지 않고, 안정적으로 실행될 수 있다.
CI 시스템 설계 시 고려 사항
저자는 CI 시스템 설계 시 빌드 시스템(Build System)의 구조를 이해하는 것이 중요하다고 강조한다. Mokhov, Mitchell, Peyton Jones의 연구에 따르면, 빌드 시스템은 스케줄러(Scheduler)와 리빌더(Rebuilder)의 조합으로 구성된다. Bash 스크립트는 가장 단순한 형태의 빌드 시스템인 busy cell에 해당하며, 모든 것을 처음부터 다시 빌드하는 방식으로 작동한다. 따라서, 최적화(Optimization), 캐싱(Caching), 동적 의존성(Dynamic Dependency) 관리가 어렵다. 오케스트레이터는 이러한 기능을 제공하는 빌드 시스템을 기반으로 구축되어, 효율적인 CI/CD 파이프라인을 구축할 수 있다.