작성 완료는 작동 중이 아니다: 하루에 잡은 배선 누락 세 건
코드는 다 짜여 있는데 정작 결과가 0이던 자동화 세 건을 같은 날 잡았다. 공통 원인은 마지막 연결이 빠진 것이었다.
3줄 요약
- 무슨 작업: 스크립트는 멀쩡히 있는데 실제 결과물이 나오지 않던 자동화 세 건을 같은 날 찾아 고쳤다.
- 왜 중요: 세 건 모두 "코드를 다 썼다"는 이유로 끝난 걸로 착각했지만, 마지막 연결이 빠져 실제로는 아무 일도 하지 않고 있었다.
- 빌더에게의 의미: 자동화의 완료 지점은 코드를 커밋한 순간이 아니라 결과가 실제로 나온 걸 눈으로 확인한 순간이다.
작성 완료와 작동 중은 다른 상태다
같은 날 잡은 세 건의 공통 진단은 하나였다. 코드는 있는데 결과가 0이었다.
첫째는 제휴 링크 자동화였다. 후보 상품을 모으는 절반만 만들어 두고, 실제 링크를 만들어 붙이는 나머지 절반을 아예 안 만들었다. 예정된 28편이 후보 목록만 갖고 있고 실제로 걸린 링크는 하나도 없었다. 새 스크립트를 붙이면서 막힌 지점은 화면 구조였다. 링크 생성 버튼이 상품 그림 위에 마우스를 올려야만 나타나는 방식이라, 그림에 커서를 올린 뒤 강제 클릭으로 풀었다. 이름만 보고 상품을 집으면 엉뚱한 게 걸려서, 제목에 반드시 들어가야 할 조각을 조건으로 걸어 잘못 잡히는 걸 막았다.
둘째는 예약 업로드였다. 스크립트는 아침에 다 써 뒀는데 스케줄러에 등록을 안 했다. 그래서 밤까지 한 편도 올라가 있지 않았다. 등록 한 줄이 빠진 채로 "업로드 자동화 완성"이라고 넘어간 것이다.
셋째가 가장 조용한 실패였다. 노트에 "주 2회 자동으로 올라간다"고 적어 뒀는데, 그걸 받치는 예약 작업이 실은 1회용이었거나 다음 실행 시각이 비어 있었다. 한 번 돌고 끝난 작업을 "매주 돈다"고 확인 없이 적어 둔 셈이다. 앞으로는 "자동으로 돈다"고 쓰기 전에 다음 실행 시각이 비어 있지 않은지부터 본다.
도구를 바꿨으면 그 도구 때문에 만든 제약도 같이 버린다
제약의 이유가 사라졌는데 제약만 살아남아 있으면, 그건 기획이 아니라 잔여물이다.
무료로 쓰던 로컬 이미지 도구가 사람 얼굴을 잘 못 그려서 "정면 얼굴은 피하고 뒷모습과 손 위주로"라는 규칙을 만들어 썼다. 유료 이미지 생성으로 갈아탄 뒤에도 요청서에 그 금지 항목이 그대로 남아 있었다. 정작 그날 가장 강했던 썸네일은 인물이 정면으로 활짝 웃으며 외치는 그림이었다. 도구가 바뀌어 이유가 없어졌는데 규칙만 관성으로 붙어 있던 것이다.
같이 틀린 것도 하나 있었다. "환하게"라는 요청을 밝기로만 알아듣고 연한 파스텔로 갔는데, 피드에서 눈에 띄게 만드는 진짜 변수는 밝기가 아니라 대비였다. 채도와 대비를 올려야 튄다.
정면 얼굴 금지가 진짜로 필요한 곳은 실존 인물이 화면에 나오는 자료뿐이었다. 실명이 함께 나오는 장면은 뒷모습으로 가고, 나머지에서는 그 금지 항목을 지웠다.
오늘 배운 것: 완료의 기준을 코드에서 결과로 옮긴다
하루를 관통한 판단은 완료의 정의를 바꾼 것이다. "짰다"가 아니라 "값이 나왔다"를 완료로 본다.
- 자동화를 "다 만들었다"고 적기 전에, 결과가 한 번은 실제로 나온 걸 눈으로 확인한다.
- 스케줄러에 걸었다고 쓰기 전에, 다음 실행 시각이 비어 있지 않은지 확인한다.
- 도구를 바꿀 때는 요청서의 금지 항목을 한 줄씩 다시 읽고, 기획이 아니라 옛 도구의 한계 때문에 넣은 항목은 지운다.
솔직히 세 건 다 코드가 문제가 아니었다. 코드는 멀쩡했다. 빠진 건 코드와 결과 사이의 마지막 연결이었고, 그 연결이 없으면 커밋 수와 무관하게 실제로 나오는 값은 0이다. Receipts not promises. 커밋이 아니라 실제로 나온 결과가 영수증이다.