Series · 11 stories
조용히 실패하는 것들
도구가 됐다고 말하고는 아무 일도 하지 않았을 때
-
조용히 실패하는 것들 11 — 있는 척하는 안전장치는 없는 것보다 나쁩니다
구독 BM과 광고 검사 스크립트를 정비하다가 '있는 척하지만 일은 하지 않던' 안전장치 세 개를 잡았습니다. 평문 'pro' 한 줄로 뚫리던 잠금장치, 아무도 모르는 지문 해시, 반쪽짜리 광고 ID 검사기. 안전하다는 착각이 진짜 위험을 부릅니다.
-
조용히 실패하는 것들 10 — 판올림 하나에 남의 이용약관이 딸려옵니다
CI 액션의 버전을 올리다가 멈췄습니다. v6으로 판올림하면 상용 캐시 서비스와 독점 라이선스 약관에 자동 동의하게 되어 있었거든요. 빌드는 초록으로 잘 돌지만, 법적·철학적 경계는 소리 없이 무너집니다.
-
조용히 실패하는 것들 9 — 틀린 저장소를 가리키는 수첩은 죽지 않고 성공합니다
배포 수첩에 적힌 저장소 주소가 다른 제품의 것이었습니다. 명령은 에러 없이 빌드·푸시·배포까지 성공했고, 그 결과 다른 제품 화면이 사라질 뻔했어요. 틀린 명령은 죽어서 잡히지만, 틀린 주소는 성공해서 사고를 만듭니다.
-
조용히 실패하는 것들 8 — 커밋도 옳고 출시도 옳았는데, 갈라진 자리만 틀렸어요
v1.0.8은 잘 나갔습니다. 번호도, CHANGELOG도, 출시 노트도 다 있었어요. 그래서 아무도 몰랐습니다 — develop이 그 판을 통째로 모르고 있다는 걸요. 브랜치가 main에서 갈라져 main으로 돌아갔기 때문입니다.
-
조용히 실패하는 것들 7 — 검사가 초록인 것과 옳은 것은 다릅니다
출시 직전의 빌드에 구글 견본 광고 ID가 실려 있었습니다. 개발 중엔 광고가 멀쩡히 떠서 아무도 몰랐어요. 잡아 준 건 검사 스크립트였는데 — 그 검사도 절반만 세고 있었습니다.
-
조용히 실패하는 것들 6 — «검색되는 PDF»가 한글은 한 글자도 검색하지 못했어요
홈 화면은 «검색되는 문서로 만들어 드려요»라고 말하고 있었습니다. 그런데 코드 깊은 곳에는 «코드값 256 위는 공백으로»라는 한 줄이 있었어요. 한글은 U+AC00부터 시작합니다. 주 시장의 언어가 통째로 공백이 되고 있었습니다.
-
조용히 실패하는 것들 5 — 로그가 세던 숫자와 빌드가 세던 숫자가 달랐어요
버전 코드를 올리는 커밋이 하루에 세 개 쌓였어요. 8 → 14 → 20. 원인을 따라가 보니 숫자를 세는 사람이 둘이었고, CI 로그는 몇 판째 다른 숫자를 찍고 있었습니다.
-
조용히 실패하는 것들 4 — 정본 주소가 404를 가리켜도 화면은 멀쩡히 뜹니다
사이트 네 곳에 SEO를 붙이다가 세 가지를 찾았어요. 정본 주소가 없는 페이지를 가리키고 있었고, 한자를 거르려던 정규식이 한글을 통째로 삼켰고, 그래서 카드가 한 장도 안 구워졌는데 빌드는 성공했습니다.
-
조용히 실패하는 것들 3 — 해시를 파일에 적는 순간 그 파일은 이력의 일부가 됩니다
커밋 154개의 작성자를 고치려고 이력을 다시 썼어요. 그 뒤 검사 하나가 조용히 bad object로 떨어져 있었습니다. 깨질 거라고 미리 적어두었는데도 깨졌어요.
-
조용히 실패하는 것들 2 — 원자적인 편집은 통째로 실패하고, 무엇이 빠졌는지 말하지 않아요
스토어 이미지가 며칠째 안 바뀌어 있었어요. 없는 로케일 하나 때문에 이미 있던 로케일의 이미지까지 통째로 버려지고 있었고, 로그 끝에는 FAILED 한 줄뿐이었습니다.
-
조용히 실패하는 것들 1 — 떠난 제품은 두 저장소에 같은 문장을 남깁니다
여러 저장소의 커밋을 한 일지로 모으는 도구를 만들었어요. 해시로 겹침을 걸렀는데 같은 일이 두 번 적혔습니다. 옮겨 심은 커밋은 같은 내용이어도 다른 지문을 갖거든요.