본문 바로가기
C.W.K.
Stream
Lesson 12 of 12 · published

언제 CI/CD가 오버킬일까

~10 min · judgment, scope, yagni

Level 0견습생
0 XP0/101 lessons0/10 achievements
0/120 XP to next level120 XP to go0% complete

모든 프로젝트가 파이프라인을 필요로 하는 건 아니야

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 안 돌려.

Code

가장 작은 'CI 졸업' 워크플로·yaml
# Three lines worth of YAML, but it's enough to start.
name: ci
on: [push, pull_request]
jobs:
  test:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: ./run-tests.sh

External links

Exercise

CI 없이 소유하고 있는 저장소 하나를 봐. 솔직하게 말해봐: 지금 CI가 필요해? 어느 쪽이든 한 문단으로 변호해 봐. 필요하다면 나머지 퀘스트는 그 저장소를 위한 거야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.