알림 지연 2초, 로그를 따라가다 예외처리 코드에서 원인을 찾았다
알람킹(AlarmKing)에서 알림 지연 버그 하나를 잡기로 했습니다. 증상은 간단했어요. 특정 조건에서 알림이 2~3초 늦게 도착했습니다. 실시간 트레이딩 앱에서 2초는 사용자가 바로 느끼는 수준이에요.
밤 11시에 로그를 열었고, 자리에서 일어난 건 밤 12시가 넘어서였습니다.
왜 넘길 수 없었나
알람킹은 코인 시세 알람이나 주식 가격 알람처럼, 조건이 맞는 순간을 사용자 대신 지켜보다가 알람을 보내주는 트레이딩 앱입니다. 사용자는 알람이 빠른 이유는 잘 모르지만, 늦다는 건 즉시 느껴요.
2초 지연이 특정 조건에서 반복된다면 구조적인 문제일 가능성이 높았습니다. 확인이 필요했어요.
처음에 의심한 것들
타임스탬프를 단계별로 따라가봤습니다. 조건 감지 단계는 정상이었어요. 외부 API 데이터 수신도 이상 없었습니다. 그런데 파싱 처리 이후 단계에서 시간이 사라지고 있었어요.
외부 API 응답을 파싱하는 로직에서 특정 데이터 형식이 들어올 때 예외처리 구간이 반복 동작하는 것처럼 보였습니다. 정확히 어떤 데이터 형식이 이 동작을 유발하는지는 이번 조사에서 완전히 특정하지 못했어요.
원인이 드러난 지점
문제가 된 코드를 열어보니 3개월 전에 작성한 코드였습니다. 당시 빠르게 붙여넣은 예외처리 로직이었어요.
정상적인 데이터 형식에서는 문제없이 동작했습니다. 그런데 특정 형식이 들어왔을 때 예외처리 구간이 예상보다 오래 반복되는 구조였어요. 이 구간이 지연과 관련이 있을 가능성이 높다고 봤고, 해당 로직을 교체한 이후 같은 조건에서 지연이 재현되지 않았습니다.
무엇을 바꿨나
예외처리 로직 전체를 다시 작성했습니다. 조건문 하나, 반복 구조 하나를 교체했어요.
수정 이후 모니터링 스크립트로 확인했을 때 지연이 사라졌습니다. 왜 그 특정 데이터 형식에서만 반복이 길어졌는지는 이번에 완전히 파악하지 못했어요. 다만 해당 구간을 교체하는 것으로 증상이 해소됐습니다.
급하게 작성한 예외처리 코드가 정상 경로에서는 문제없이 동작하다가 특정 입력에서 병목으로 이어지는 패턴이었어요. 유사한 구간이 더 있을 수 있어서, 이후 점검하기로 했습니다.
이번 일이 바꾼 것
빠른 기능 추가보다 이런 눈에 잘 안 보이는 부분이 사용자 경험에 더 직접적으로 영향을 줄 때가 있습니다.
예외처리는 정상 경로만큼 꼼꼼하게 설계해야 한다는 걸, 급하게 작성한 코드가 몇 달 뒤 알림 지연으로 돌아오면서 다시 확인했어요. 앞으로 예외처리 로직은 정상 경로와 동일한 수준으로 검토하는 방향으로 바꿨습니다.
당신이 잠든 새벽에도, 시장이 요동치는 순간에도 알람킹은 반드시 당신을 깨웁니다. 가장 확실한 조건부 알람을 지금 바로 경험해 보세요.