CI, 로컬에서 먼저 실패하게 하여 개발 속도를 높이다!
로컬-퍼스트 CI(Local-first CI)는 원격 CI 전에 로컬 환경에서 테스트를 실행하여 피드백 루프(Feedback Loop)를 단축하는 방식임
맥락 전환(Context Switching)을 줄이고, CI 실패를 로컬에서 재현 가능하게 하여 개발 효율성을 높임
Nix와 같은 도구를 활용하여 로컬과 원격 환경의 의존성(Dependency) 문제를 해결하는 것이 중요함
대규모 프로젝트(Large Project)에서는 로컬 테스트 실행 시간 증가로 인한 맥락 전환(Context Switching) 문제가 여전히 존재한다는 의견도 있음
로컬-퍼스트 CI(Local-first CI)의 장점
로컬-퍼스트 CI(Local-first CI)는 개발자가 코드를 푸시하기 전에 문제를 발견하도록 하여 피드백 루프(Feedback Loop)를 단축한다. 이는 개발자가 원격 CI의 결과를 기다리는 대신, 로컬에서 빠르게 문제를 해결하고 맥락 전환(Context Switching)을 최소화할 수 있게 한다. 또한, CI 실패를 로컬에서 재현 가능하게 하여 디버깅 시간을 줄이고, 벤더 종속성(Vendor Lock-in)에서 벗어날 수 있도록 돕는다.
로컬과 원격 CI의 동기화 문제
로컬-퍼스트 CI의 핵심 과제는 로컬 환경과 원격 CI 환경의 일관성을 유지하는 것이다. 의존성(Dependency) 버전, 운영체제, 쉘 환경 등의 차이로 인해 로컬에서 통과한 테스트가 원격 CI에서 실패하는 경우가 발생할 수 있다. 이러한 문제를 해결하기 위해 Nix와 같은 도구를 사용하여 환경을 선언적으로 관리(Declarative Management)하고, 로컬과 원격 환경 간의 차이를 줄이는 것이 중요하다.
대규모 프로젝트에서의 한계
대규모 프로젝트에서는 로컬 테스트 실행 시간이 길어져 맥락 전환(Context Switching) 문제를 완전히 해결하기 어려울 수 있다. 댓글에서는 테스트 스위트(Test Suite) 실행 시간이 몇 분 이상 소요될 경우, 개발자가 여전히 맥락을 전환하게 된다는 점을 지적한다. 따라서 로컬-퍼스트 CI는 프로젝트 규모와 테스트 실행 시간에 따라 효율성(Efficiency)에 차이가 있을 수 있다.
CI 파이프라인의 유연성 확보
일부 개발자는 CI 파이프라인을 Bash 스크립트(Bash Script)로 구성하여 CI 툴 간의 이동성(Portability)을 확보하는 것을 선호한다. 이는 특정 CI 툴에 종속되지 않고, 필요에 따라 다른 툴로 쉽게 전환할 수 있게 해준다. 또한, 표준화된 시그널링 메커니즘(Signaling Mechanism)을 통해 각 단계의 시작과 종료를 알리고, 로그를 통합하여 가시성(Visibility)을 높이는 방안도 제시되었다.