Post

게이트가 초록불인데 아무것도 안 보고 있었다

결함 12건 중 11건이 게이트가 초록불인 상태에서 발견됐다. 그래서 게이트를 더 만들었더니, 그중 하나는 검사 대상이 0건인 채로 통과를 보고하고 있었다

게이트가 초록불인데 아무것도 안 보고 있었다

게이트가 초록불인데 아무것도 안 보고 있었다

그동안 만난 결함을 표로 정리해보니 대부분 게이트가 통과 상태일 때 발견됐다. 게이트를 더 만드는 것이 답인 줄 알았는데, 만들고 나서 확인해보니 그중 하나는 아무것도 검사하지 않고 있었다.

1. 서론 (Introduction)

  • 문제/상황 (Problem): 직접 만난 결함 12건을 발견 경로별로 적어봤다. 11건이 게이트가 초록불인 상태에서 나왔고, 그중 자동으로·반복 가능하게 발견된 건 하나도 없었다. 전부 코드를 읽다가, 화면을 보다가, 다른 것을 만들다가 우연히 나왔다.
  • 목적 (Purpose): 게이트를 늘리기 전에 이미 있는 게이트가 실제로 무엇을 보고 있는지부터 확인한다.
  • 대상 (Target Audience): CI가 초록불인데도 결함이 계속 사람 손에서 나오는 걸 겪는 개발자.

2. 방법 및 과정 (Methods & Process)

  • 배경 조사 및 데이터 (Data Collection): 게이트가 초록불을 내는 경우는 두 가지인데, 보통 이 둘을 같은 신호로 내보낸다.

    초록불의 의미실제 상태구분되는가
    검사했고 문제가 없었다정상
    검사 대상이 0건이었다게이트가 죽어 있음기본 구현으로는 구분 안 됨
  • 접근 방법 (Approach Methods):
    • [방법 1]: 게이트가 막으려는 결함을 일부러 만들어 넣고, 실제로 빨간불이 되는지 본다. 통과만 확인하면 죽은 게이트와 구분되지 않는다.
    • [방법 2]: 검사한 대상의 개수를 결과에 포함시킨다. 0건이면 통과가 아니라 실패로 처리한다.
  • 분석 및 해결 프로세스 (Analysis Flow):
    • 도구/기술: 표준 라이브러리와 git diff --cached. 파일 크기 한도를 지키는 최소 게이트로 재현했다.
    • 주요 단계: 한도를 넘는 파일을 스테이징 $\rightarrow$ 저장소 루트에서 실행 $\rightarrow$ 하위 디렉터리에서 실행 $\rightarrow$ 두 판의 결과 비교.
    • 결과 도출 및 검증: 저장소 루트에서는 두 판 모두 차단했다(검사 1건). 하위 디렉터리에서 돌리자 허술판이 검사 0건으로 통과했고 한도를 4배 넘긴 파일이 그대로 지나갔다. 원인은 로직이 아니라 경로였다. 스테이징 목록은 저장소 루트 기준으로 나오는데 그것을 현재 디렉터리에 이어붙이니 존재하지 않는 경로가 됐고, 파일이 하나도 안 열려 전부 조용히 건너뛰었다.

3. 결과 (Results)

  • 분석 결과 요약: 두 판의 차이는 검사 로직이 아니라 검사 건수를 결과에 넣었는가 하나뿐이다. 0건을 실패로 처리하자 같은 상황에서 바로 차단됐다. 결함 12건 중 11건(약 92%)이 게이트 통과 상태에서 발견됐다는 수치는 표본이 12건이라 비율 자체를 신뢰구간 없이 인용하기 어렵다. 여기서 결론으로 쓸 것은 비율이 아니라 자동으로 발견된 게 0건이었다는 쪽이다.

4. 인사이트 및 액션 (Insights & Action)

  • 인사이트 (Insight): 게이트를 늘리는 것보다 있는 게이트가 살아 있는지 확인하는 것이 먼저다. 죽은 게이트는 없는 게이트보다 나쁘다. 없으면 사람이 직접 보지만, 죽어 있으면 초록불을 믿고 보지 않는다. 그리고 이 결함은 조용하다. 오탐은 시끄러워서 고치게 되지만, 검사 0건 통과는 아무 일도 일어나지 않아 몇 달이 지나도 그대로다.
  • 실행 방안 (Action Plan): 게이트 출력에 “무엇을 몇 건 봤는지”를 반드시 찍는다. 그리고 새 게이트를 붙일 때 그 게이트가 잡아야 할 것을 하나 심어 빨간불을 확인한 뒤에 커밋한다.
  • 한 줄 결론 (Key Takeaway): “막았다”와 “볼 수 없었다”를 같은 초록불로 내보내면 게이트는 아무 말도 하지 않는 것과 같다. 샘플 코드
  • 다음 스텝 (Next Step): 이번엔 경로 기준 불일치 하나만 재현했다. 검사 0건을 만드는 원인은 이것 말고도 파이프 중간 실패나 필터가 너무 좁은 경우가 있는데, 그것들이 각각 어떤 모습으로 조용해지는지는 아직 정리하지 않았다.

This post is licensed under CC BY 4.0 by the author.