분명히 빌드는 통과했다. 로그도 깨끗했다. 그런데 알림이 오지 않았다.

현장에서 하루치 일을 기록하는 분들을 위해 만든 작은 앱이 있다. 공들인 기능 중 하나가 정해둔 시간에 울리는 알림이었다. 일정을 등록하고, 시간을 맞추고, 휴대폰을 내려놓고 기다렸다. 아무 일도 일어나지 않았다.

처음엔 내 코드를 의심했다. 시간 계산을 다시 봤고, 권한을 다시 확인했고, 같은 자리를 몇 번이나 맴돌았다. 이상한 건 단 한 줄의 에러도 없었다는 점이다. 빨간 글씨가 떴다면 차라리 반가웠을 것이다. 추적할 단서가 있으니까. 그런데 모든 게 "정상"이라고 말하면서 결과만 비어 있었다.

안 되는데 에러가 없는 버그가, 안 되면서 에러가 나는 버그보다 훨씬 무섭다.

며칠을 헤맨 끝에 깨달은 건, 문제가 내 로직이 아니라 그 신호가 지나가야 할 통로에 있었다는 것이다. 내가 보낸 알림은 분명히 출발했지만, 그걸 받아서 화면 밖에서 울려줄 쪽의 입구 자체가 열려 있지 않았다. 내 쪽에서는 모든 게 완벽했고, 그래서 아무도 잘못을 고백하지 않았다.

고치고 나서 알림이 처음 울렸을 때, 솔직히 좀 허탈했다. 며칠을 태운 것치고 바뀐 코드는 몇 줄 되지 않았으니까. 하지만 그 며칠 동안 배운 건 코드 몇 줄로 환원되지 않는다. "되는 줄 알았는데 안 되는 것"과 "정말로 되는 것" 사이의 거리를, 그 침묵의 밤이 가르쳐 줬다.

요즘도 무언가 조용히 안 될 때면 그날을 떠올린다. 에러가 없다는 건 문제가 없다는 뜻이 아니다. 가끔은 그저, 아무도 아직 비명을 지르지 않았을 뿐이다.