완성한 캐릭터를 파일 하나로 내보냈다. 40메가바이트. 캐릭터 하나치고 크지만 정점이 29만 개인 고품질이라 그러려니 했다.
다른 걸 확인하려고 그 파일을 열어봤다가, 안에 든 덩어리를 세어보고 멈췄다. 세 개였다.
캐릭터 하나를 내보냈는데 셋이 나왔다
캐릭터 말고 나머지 둘은 이랬다. 가로 12미터짜리 바닥판, 그리고 공 하나.
둘 다 내가 만든 게 맞다. 확인용 그림을 뽑으려고 바닥과 배경을 깔았던 것이다. 사진 찍을 때 세우는 배경천 같은 것. 문제는 사진을 찍고 나서 그대로 파일에 담아 내보냈다는 것이다.
원인은 한 줄이었다. 내보내기를 하면서 “선택한 것만”이라는 조건을 안 걸었다. 조건이 없으면 그 자리에 있는 걸 전부 가져간다. 촬영용 소품까지.
이런 건 증상이 안 나온다
이 결함은 성질이 고약하다. 파일은 정상으로 열리고, 캐릭터도 멀쩡히 나오고, 에러도 없다. 그냥 도시 한복판에 웬 12미터 판때기가 같이 깔릴 뿐이다. 그때 가서는 원인을 캐릭터 파일에서 찾을 생각을 못 한다.
덩어리 개수를 세어보지 않았으면 몰랐다. 그래서 검사에 넣었다. 내보낸 파일을 열어 덩어리가 몇 개이고 각각 뭔지 확인한다. 캐릭터 하나면 하나여야 한다.
작업장과 출고장을 나눈다
더 근본적인 건 습관이었다. 확인용으로 만든 것과 내보낼 것을 같은 자리에 두고 있었다. 그러니 섞인다.
이제 확인용 소품은 이름 앞에 표시를 붙이고, 내보내기 직전에 그것들을 먼저 지우거나 제외한다. 사람이 기억해서가 아니라 순서가 강제하도록.
재발방지 체크리스트
① 내보내기에는 반드시 범위 조건을 건다. 조건이 없으면 그 자리 전부가 딸려간다.
② 내보낸 파일은 열어서 덩어리 개수와 정체를 확인한다. 크기만 보면 모른다.
③ 확인용 소품과 출고물을 같은 자리에 두지 않는다. 섞이면 증상 없이 나간다.
④ 에러 없이 조용히 커진 파일을 의심한다. 정상 동작하는 결함이 제일 늦게 발견된다.
① 내보내기에는 반드시 범위 조건을 건다. 조건이 없으면 그 자리 전부가 딸려간다.
② 내보낸 파일은 열어서 덩어리 개수와 정체를 확인한다. 크기만 보면 모른다.
③ 확인용 소품과 출고물을 같은 자리에 두지 않는다. 섞이면 증상 없이 나간다.
④ 에러 없이 조용히 커진 파일을 의심한다. 정상 동작하는 결함이 제일 늦게 발견된다.