모든 프로젝트가 파이프라인을 필요로 하는 건 아니야
CI/CD는 마치 의무처럼 여겨지는 문화가 있어. 모든 README에 초록 배지를 달고, 모든 튜토리얼이 Actions를 기본으로 가정하지. 하지만 진실은 좀 더 미묘해. 어떤 프로젝트는 객관적으로 봤을 때 CI 없이 두는 게 더 나아.
CI가 진짜 오버헤드가 되는 상황
- 일회성 스크립트. 딱 한 번 돌려서 CSV를 뽑아내는 50줄짜리 bash 스크립트. CI 설정하는 데 걸리는 시간이 스크립트 자체보다 오래 남아있게 돼.
- 개인 닷파일. '테스트'라고 해봤자 'zsh에서 아직 잘 로드되는지' 확인하는 건데, 그건 셸이 즉시 알려주거든.
- 작업 노트나 임시 저장소. 청중이 1명뿐이라면 피드백 루프는 이미 저장하고 다시 실행하는 거나 다름없어.
- 버려질 프로토타입. 수명이 1주일밖에 안 되면 CI 짜는 건 그냥 야크 쉐이빙이야.
- 테스트 불가능한 코드베이스 (테스트 가능하게 만들기 전). 테스트 없는 CI는 그냥 연극이야. 일단 돌아가는 테스트 하나부터 만들고 그 다음에 CI를 도입해.
프로젝트가 성장해서 이제 CI가 필요하다는 신호
- 1명 이상이 커밋을 할 때.
- main 브랜치를 이미 1번 깨뜨렸고, 원인을 찾느라 실제로 시간을 들였을 때.
- 코드가 노트북 말고 다른 곳(서버, 동료 머신, 고객 환경)에서 돌아갈 때.
- '푸시 전에 테스트 돌리는 걸 까먹지 말자'고 적어놓고도 결국 까먹을 때.
원칙은 이거야: 까먹는 비용이 YAML 비용을 넘어서는 순간 CI를 추가하고, 그 전에는 하지 마.. 피파는 자기 코드베이스에 CI를 돌려. 한 줄짜리 bash 별칭에는 CI 안 돌려.