테스트 문서 하나로 자동화 끝점 검증하기
자동화를 만들고 나면 보통 dry-run부터 돌려보죠. 실제로 뭔가를 바꾸지는 않고, 어떤 걸 처리하게 될지만 미리 확인해보는 예행연습이에요. 그런데 이 예행연습이 "처리할 대상이 하나도 없음"으로 끝나면, 왠지 성공한 것 같은 기분이 들어요. 에러도 없었으니까요. 사실 이 상태에서는 아무것도 검증된 게 없어요. 모든 게 정상일 때 입력부터 결과까지 한 번에 통과하는 경로를 happy path라고 하는데, 파이프라인이 이 경로를 실제로 통과하는 모습을 아직 한 번도 본 적이 없는 거거든요. 이번 글에서는 이런 상황에서 쓸 수 있는 방법, 즉 테스트 문서 하나를 직접 심어서 자동화의 끝점까지 검증하는 방법을 정리해볼게요. dry-run 0건은 검증이 아니에요 dry-run이 후보 0건으로 조용히 끝났다는 건 두 가지 중 하나예요. 정말 처리할 게 없었거나, 아니면 후보를 찾는 로직 자체가 잘못됐거나요. 어느 쪽인지는 실제 후보를 넣어보기 전까지 알 수 없어요. 그래서 필요한 게 테스트 후보 심기(seeding)예요. 자동화가 처리해야 할 조건을 만족하는 입력물을 일부러 하나 만들어서, 파이프라인의 첫 번째 실제 처리 대상으로 삼는 거죠. 예를 들어 마크다운 노트를 스캔해서 이슈 트래커에 자동 발행하는 파이프라인이라면, 발행 조건을 갖춘 테스트 노트를 하나 만들어두는 식이에요. 이때 중요한 건 결과가 어디에 생겨야 하는지까지 테스트 문서에 미리 못 박아두는 거예요. "이슈가 생기면 성공"이 아니라 "지정한 프로젝트에 생겨야 성공"이어야, 엉뚱한 곳에 결과물이 만들어지는 버그도 같이 잡을 수 있어요. 합격 기준은 관측 가능한 산출물로 적어요 테스트 문서 안에는 합격 기준(Acceptance Criteria)을 체크리스트로 함께 적어두는 게 좋아요. 위의 노트 발행 파이프라인을 예로 들면, 이런 기준을 세울 수 있어요. 산출물 생성 — 지정한 프로젝트에 새 이슈가 만들어진다 원본 상태 갱신 — 테스트 문서의 상태 값이 "발행됨"으로 바뀐다 메타데이터 기록 — 생성된 이슈의 ID와 URL, 갱신 시각이 문서에 남는다 이력 증거 — 원격 저장소에 발행 커밋이 추가된다 재실행 skip — 같은 자동화를 다시 돌리면 이 문서는 "이미 발행됨" 사유로 건너뛴다 공통점이 보이시나요? 전부 눈으로 확인할 수 있는 산출물이에요. 이슈 URL, 상태 값의 diff, 커밋 로그처럼요. "돌아간 것 같다"는 느낌이 아니라 관측 가능한 증거가 기준이 되면, 검증 결과를 두고 해석이 갈릴 일이 없어요. 재실행 검사를 꼭 넣는 이유 다섯 번째 항목이 특히 중요해요. 자동화는 한 번 돌고 끝나는 게 아니라 반복 실행되잖아요. 두 번째 실행에서 같은 문서가 또 처리되면, 중복 산출물이 쌓이기 시작해요. 같은 입력을 여러 번 처리해도 결과가 한 번 처리한 것과 같아야 한다는 성질을 멱등성이라고 하는데, happy path 검증에는 "한 번 더 돌렸을 때 조용히 skip되는가"라는 멱등성 확인까지 포함하는 게 좋아요. 범위 밖과 정리 계획도 같이 적어둬요 테스트 문서에는 이번 검증에서 다루지 않는 것(Out of Scope)도 명시해두는 게 좋아요. 예를 들어 다른 입력물의 처리나, 생성된 산출물의 후속 라이프사이클(닫기, 담당자 지정 등)은 범위 밖이라고요. 범위를 좁혀두면 검증이 끝났는지 아닌지를 명확하게 판단할 수 있어요. 검증이 끝난 뒤의 정리 계획도 미리 적어두세요. 테스트 문서와 그 산출물을 보관 처리할지, 삭제할지요. 테스트용 산출물이 실제 데이터 사이에 남아서 떠돌지 않게 하는 거예요. 정리하면 자동화의 끝점 검증은 이렇게 요약할 수 있어요. dry-run 0건은 성공이 아니라 미검증 상태예요 조건을 만족하는 테스트 문서를 직접 심어서 첫 후보로 만들어요 합격 기준은 관측 가능한 산출물(이슈, diff, 커밋)로 적어요 재실행 시 skip까지 확인해야 반복 실행에 안전해요 범위 밖과 사후 정리 계획도 문서에 남겨요 다음에 자동화를 만들게 되면, dry-run이 조용히 끝났다고 넘어가지 말고 테스트 후보 하나를 직접 심어서 끝까지 흘려보내 보세요. 파이프라인이 실제로 일하는 모습을 한 번은 봐야 믿을 수 있거든요. Remember that failure is an event, not a person.— Zig Ziglar