한 프로젝트에서 겪은 것을 근거로 배포 전에 전체 시험을 통과해야 한다는 규칙을 만들었는데 다른 프로젝트에 적용하니 안 맞았다.
Table of contents
Open Table of contents
전제를 안 적은 규칙
규칙이 나온 프로젝트에서는 시험을 안 돌리고 배포했다가 회귀가 그대로 나간 적이 있었다. 그래서 만든 규칙인데 다른 프로젝트에 적용하니 배포마다 20분씩 걸렸고 급한 수정도 그 시간을 기다려야 했다.
규칙이 나온 맥락을 다시 보니 전제가 하나 숨어 있었다. 그 프로젝트의 시험은 3분이면 끝난다는 것이다. 시험이 짧다는 전제 위에서만 성립하는 규칙이었는데 그 전제를 적지 않았으니 규칙만 다른 곳으로 옮겨졌다.
적용 범위와 배경 기록
규칙 문서를 고치면서 그 규칙이 적용되는 범위와 만들게 된 배경을 함께 적었다.
## 배포 전 시험
적용: 시험이 5분 이내로 끝나는 프로젝트
시험이 오래 걸리는 프로젝트는
- 관련 있는 시험만 돌린다
- 전체 시험은 야간에 돌린다
- 야간 시험 실패는 다음 날 아침에 본다
이 규칙은 프로젝트 A 에서 회귀가 나간 뒤 만들었다 (2026-02).
배경이 적혀 있으면 다른 상황에서 이 규칙이 맞는지를 읽는 사람이 판단할 수 있다. 배경 없이 결론만 있으면 맞는지 따질 근거가 없어 그대로 따르거나 그대로 무시하게 된다.
안 맞는 곳의 대안
시험 시간에 따라 셋으로 나눴다. 3분 이내인 다섯 프로젝트는 배포 전 전체 시험을 돌리고, 5분에서 20분 사이인 둘은 관련 시험만 돌리고 전체는 야간에 돌리며, 20분을 넘는 하나는 야간 전체만 돌리고 배포 후 관찰을 강화한다.
시험이 20분을 넘는 마지막 프로젝트는 시험 시간을 줄이는 작업도 함께 걸었다. 규칙을 못 지키는 곳이 있으면 그 사실 자체가 봐야 할 신호였다. 규칙 적용에서 빼는 것으로 끝내면 왜 20분이 걸리는지는 그대로 남는다.
예외는 프로젝트마다 문서에 적게 했는데 무엇을 안 하고 대신 무엇을 하는지와 언제 다시 볼지를 함께 적는다. 예외가 있다는 것을 알고 있는 상태와 모르는 상태는 이후 판단에서 크게 갈린다.
새 규칙을 만들 때의 질문
새 규칙을 넣을 때 네 가지를 먼저 적게 했다. 어디서 나온 규칙인지와 그때 전제가 무엇이었는지와 그 전제가 안 맞는 곳이 있는지와 안 맞는 곳은 어떻게 하는지다.
네 질문 중 세 번째에서 걸리는 것이 자주 있었다. 전부에 적용하려던 규칙이 실제로는 절반에만 맞는 경우가 많았고, 그 사실을 넣기 전에 알면 범위를 좁혀서 넣게 된다.
규칙의 정리와 자동 확인
규칙 문서가 182줄이 되니 아무도 다 읽지 않았다. 각 규칙에 지금도 유효한지와 지켜지고 있는지와 안 지켜도 문제가 없었는지를 물었더니 여섯 개가 안 지켜지고 있었고 문제도 없었다. 안 지켜도 문제가 없는 규칙은 규칙이 아니어서 뺐다.
규칙을 적어 두는 것만으로는 지키는지 알 수 없어 확인도 자동화했다. 조건에 해당하는 프로젝트만 검사하고 예외인 것은 예외로 표시한다.
for p in $PROJECTS; do
printf "%-12s" "$p"
test_time=$(cat "projects/$p/.test-duration" 2>/dev/null || echo "?")
if [ "$test_time" != "?" ] && [ "$test_time" -le 300 ]; then
grep -q "test" "projects/$p/deploy.sh" && echo "OK" || echo "규칙 위반"
else
echo "예외 (시험 ${test_time}초)"
fi
done
월 1회 돌리니 규칙을 안 지키는 것과 애초에 예외인 것이 갈렸고 예외가 아닌데 안 지키는 것이 하나 나왔다. 시험이 2분인데 배포에서 안 돌리고 있던 프로젝트였다.
정리
- 한 곳에서 나온 규칙을 전부에 적용하면 안 맞는 데가 생긴다
- 규칙에는 전제가 있고 안 적으면 결론만 옮겨진다
- 적용 범위와 만든 배경을 함께 적는다
- 배경이 있어야 다른 상황에서 맞는지 판단할 수 있다
- 안 맞는 곳에는 다른 방법을 두되 왜 안 맞는지도 본다
- 예외를 적어 두면 있다는 것을 아는 상태가 된다
- 새 규칙을 만들 때 범위를 먼저 묻는다
- 안 지켜도 문제없는 규칙은 뺀다