2026.08.01 작업일지 v1.0.0
17:23, 안전장치 세 개를 실서비스에 올렸다. 배포는 성공이라고 나왔다. 17:25, 그 세 개가 한 번도 실행된 적이 없다는 걸 확인했다. 19:47, 이번엔 반대였다. 코드는 멀쩡한데 검사가 빨간불을 내고 있었다.
전날 첫 손님이 결제한 뒤 하루가 지났다. 이날 한 일은 대부분 「돌아간다고 표시된 것이 정말 돌아가는가」를 확인하는 일이었고, 확인해 본 것 중 상당수가 아니었다.
1. 배포는 끝났는데, 한 번도 돌지 않았다
작명 서비스에 안전장치를 세 개 붙여 뒀다. 결제가 중간에 멈춘 주문을 잡아내는 것, 메일이 안 나간 걸 잡아내는 것, 그리고 결제사에서 환불된 건과 우리 장부를 맞춰 보는 것. 셋 다 「정해진 시각마다 자동으로 도는 일」로 만들어 놨다.
배포는 성공했다. 코드도 실제로 올라가 있었다. 그런데 서버에 등록된 실행 시각표가 빈 배열이었다.
배포 전 schedules=[]
배포 후 schedules=[]
일감은 서버에 있는데 그걸 부르는 시계가 없었다. 세 개 다 태어난 적은 있고 한 번도 깨어난 적이 없다.
이건 이론적인 손해가 아니었다. 환불 대사가 안 돌았기 때문에, 결제사에서는 환불된 주문이 우리 장부에는 「완료」로 굳은 채 남아 있었다. 장부가 조용히 사실과 어긋나고 있었던 것이다.
배운 것 — 「배포 성공」은 코드가 그 자리에 있다는 뜻이지, 그 코드가 불린다는 뜻이 아니다. 자동으로 도는 일을 올렸으면 다음 주기에 실제로 깨어났는지까지 봐야 배포가 끝난 것이다.
2. 사흘째 빨간 검사가, 사실은 코드 탓이 아니었다
내부 저장소는 검사를 통과해야 합칠 수 있게 되어 있다. 그런데 맥 계열 컴퓨터 세 대에서 검사가 항상 빨간불이었다. 통과하는 조합이 없으니 줄 선 작업이 전부 막혔다.
원인은 테스트 안의 한 줄이었다. 「아무것도 안 하고 성공만 하는 명령」을 쓰는데, 그 명령이 맥에는 없는 경로에 있었다. 코드가 틀린 게 아니라 검사가 그 기계에서 못 도는 것이었다.
고친 뒤 대조를 확실히 했다 — 고치기 전 판본에서는 빨간불, 고친 판본에서는 초록불. 같은 기계, 같은 시각.
2364cdd 19:47 fix(tests): macOS 3노드에서 main 을 상시 적색으로
만들던 2건 + 재발 가드
3. 그런데 「그 기계에서만 빨갛다」가 늘 기계 탓은 아니다
비슷한 시기에 다른 컴퓨터 한 대에서만 테스트 두 개가 빨갛게 나왔다. 처음엔 이것도 운영체제 차이로 결론이 났다. 그런데 다시 재 보니 아니었다.
진짜 원인은 명령 두 개를 파이프로 이었을 때 앞 명령이 강제 종료되는 경합이었다. 뒤쪽 명령이 「하나만 찾으면 바로 끝」이라 앞쪽이 아직 쓰고 있는데 문을 닫아 버린다. 종료 코드가 141로 찍히는데, 이건 「실패」가 아니라 「도중에 끊겼다」는 뜻이다.
가장 좋았던 건, 그 결론을 낸 쪽이 스스로 앞선 판단을 철회했다는 점이다.
관측점 한 대로 맥 전체를 일반화한 것이 오류였다
배운 것 — 「이 기계에서만 빨갛다」를 곧바로 운영체제 탓으로 돌리면, 진짜 원인이 그 뒤에 숨는다. 같은 판본을 다른 기계에서 돌려 보는 대조가 먼저다.
4. 새로 붙인 보안 검사가 결백한 글자를 잡아갔다
비밀 키가 실수로 공개 저장소에 올라가는 걸 막으려고 검사를 하나 더 붙였다. 붙이자마자 홈페이지 저장소의 모든 작업이 통과 불가가 됐다.
패턴이 「특정 접두어 + 하이픈 섞인 영문」을 키로 보는데, 하필 영어 단어 중에 그 모양이 흔했다.
desk- task- risk-
전부 걸렸다. 두 번째 오탐은 자바스크립트 화살표 함수를 「값을 대입하는 자리」로 오인한 것이었다. 알려진 접두어 세 갈래로 좁혀서 다시 풀었다.
5. 초록인데 아무것도 안 본 초록
가장 조용한 함정은 이것이었다. 검사기가 작업물을 임시 폴더에 받아서 도는데, 그 폴더에는 라이브러리가 설치돼 있지 않다. 그래서 라이브러리가 필요한 검사 두 개가 조용히 「건너뜀」으로 처리됐다.
실제로 재 보니 이랬다.
| 항목 | 값 |
|---|---|
| 통과 | 2 |
| 건너뜀 | 2 |
| 이번 변경을 실제로 덮는 검사 | 건너뛴 쪽에 있었다 |
결과는 초록이었다. 그런데 정작 이번에 바꾼 코드를 본 검사는 하나도 없었다. 이건 통과가 아니라 아무것도 안 본 것이다.
배운 것 — 초록불을 믿기 전에 「이 초록이 내가 바꾼 자리를 실제로 지나갔는가」를 물어야 한다. 건너뛴 항목이 있으면 그 초록은 아직 초록이 아니다.
6. 그래서 뭐가 남았나
- 자동화 저장소 94건, 작명 서비스 33건, 홈페이지 8건, 스킬 저장소 7건 착지
- 합쳐진 작업 67건 — 사람이 하나씩 확인하고 눌렀다
- 검사 설비 수리 5종: 맥에서 못 도는 테스트, 파이프 경합, 보안 검사 오탐 2종, 건너뛴 검사
- 검색 결과에 우리 아이콘 대신 지구본이 뜨던 것도 이날 잡았다 — 아이콘 파일 자체가 없었고, 크기 규격도 어긋나 있었다
하루 종일 고친 것이 기능이 아니라 계기판이었다. 성공했다고 말하는 화면, 빨간불을 내는 검사, 통과했다고 하는 결과 — 셋 다 사실과 어긋나 있었다. 계기판이 틀리면 그 위에서 내린 판단은 전부 흔들린다.
다음 이야기는 도구를 쓰라고 안내하는 경고문이 실은 존재하지 않는 도구를 가리키고 있었다는 이야기.
— 강대종 / @ssamssae