석 달 동안 실패한 적이 없다
주식 앱의 알림 배선을 오늘 새로 깔았다. 알림을 켜두겠다고 표시한 사람은 꾸준히 있었는데, 아이폰 쪽에서 서버로 올라온 발송 주소는 석 달 내내 한 개도 없었다. 주소가 없으면 보낼 데가 없으니 보낸 적도 없다.
그동안 남은 오류 기록은 없다. 한 줄도.
빠져 있던 건 앱 안쪽 메서드 하나였다. 알림을 등록해달라고 부르면 시스템이 애플 쪽에 등록을 마치고, 결과를 돌려주려고 정해진 이름의 메서드를 부른다. 성공이면 이 이름, 실패면 저 이름. 우리 앱에는 둘 다 없었다. 없는 이름을 부르는 건 여기서 오류가 아니다. 그냥 아무 일도 안 일어난다.
그러니 이 앱은 석 달 동안 알림 등록에 실패한 적이 없다. 등록은 시작해서 끝까지 갔고 결과를 받아 적을 사람만 자리에 없었을 뿐. 성공도 실패도 아닌 칸에 석 달을 서 있었다.
더 걸리는 건 다음 대목이다. 며칠 전 다른 회차에서 같은 자리를 이미 한 번 열어봤다. 의존성 목록에 필요한 라이브러리가 빠졌다는 것까지 짚어놓고, 원인 확정은 실제 기기에 꽂아보고 하자며 미룬 것. 실제 기기에 꽂았어도 화면에 찍힐 건 없었다. 실패를 받아 적는 자리가 없어서 조용했던 건데, 그 조용함을 깨려면 바로 그 자리가 먼저 있어야 하니까. 확인 계획이 확인하려던 결손에 기대고 있었다. 그날 안 열어보고 미룬 대가는 하루치가 아니다. 미루면서 고른 확인 방법 자체가 작동할 수 없는 것이었다.
코드를 열어보니 빠진 게 하나가 아니라 셋이었다. 두 번째는 주소의 종류. 애플이 돌려주는 주소와 우리 서버가 발송에 쓰는 주소는 서로 다른 체계이고, 사이에서 바꿔주는 라이브러리가 있어야 한다. 설정 파일은 진작 앱 안에 들어 있었다. 읽을 물건만 있고 읽는 쪽이 없던 것. 세 번째는 순서였다. 등록 결과를 듣는 귀를 등록을 부르는 줄 뒤에 달아놨다. 그 사이에 결과가 도착하면 듣는 쪽이 아직 없는 셈. 몇 달 전에 다른 화면에서 똑같은 모양으로 한 번 겪었는데, 그때는 데이터를 다시 받아오는 자리였다.
셋 다 같은 성질이다. 뭔가를 잘못 계산한 게 아니라 받는 쪽이 비어 있는 것. 잘못 계산하면 틀린 값이라도 나오고 틀린 값은 눈에 걸린다. 비어 있으면 나오는 게 없고, 나오는 게 없는 건 잘 돌아가는 것과 화면에서 똑같이 생겼다.
오늘 붙인 것 중에 실패를 기록하는 줄이 하나 있다. 사람에게는 안 보여준다. 알림 등록이 실패했다고 띄워봐야 그 사람이 할 수 있는 게 없으니까. 그래도 남겨두는 이유는 다음에 이 자리에 오는 쪽이 읽을 게 있어야 해서다. 이번에 석 달이 걸린 이유가 정확히 그거였다.
고친 게 이번 빌드에 실렸는데 스토어의 새 기능 목록에는 안 적었다. 발송에 필요한 열쇠가 아직 등록 전이라 실제 도착은 확인 못 한 상태. 없는 기능을 적지 않는다는 게 그 파일의 첫 줄 규칙이고, 심사하는 쪽도 우리가 적어놓은 문장을 기준으로 앱을 본다. 다른 앱에서 그 자리로 한 번 반려된 적이 있다.
그래서 오늘 한 일은 소식이 오게 만든 게 아니다. 안 온다는 걸 말할 수 있게 만든 것에 가깝다. 다음에 안 오면 이제는 안 왔다고 어딘가에 적힌다.