코드는 정상이었는데 서버에서 알람이 안 울렸다, 환경 차이를 찾기까지
알람킹(AlarmKing) 푸시 테스트를 돌리다가 이상한 걸 발견했습니다. 로컬 맥북에서는 알람이 정상적으로 울리는데, 실서버에 올리면 조용했어요. 코드는 같은데, 환경만 달라졌을 뿐인데 결과가 달랐습니다.
그게 사흘간의 추적 시작이었어요.
왜 넘길 수 없었나
알람킹은 사용자가 설정한 조건부 알람을 제때 보내주는 트레이딩 앱입니다. 로컬에서만 울리고 서버에서 안 울린다면, 실제 사용자 환경에서 알람이 도착하지 않는다는 뜻이에요.
출시 전에 반드시 잡아야 하는 문제였습니다.
처음에 의심한 것들
당연히 코드 문제라고 생각했습니다. 조건문을 다시 보고, API 응답 파싱 로직을 세 번 뜯어봤어요. 테스트 케이스 47개가 전부 통과하고 있었습니다. 그런데 왜 실서버에서만 알람이 안 울리는 걸까요.
변수명 오타, 네트워크 문제, 권한 설정까지 하나씩 확인했습니다. 모두 정상이었어요. 코드를 사흘 동안 같은 시선으로 들여다봤습니다.
의심이 바뀐 지점
오전 2시쯤이었어요. 코드를 더 보는 대신, 서버 기본 설정부터 다시 확인하기로 했습니다. 처음부터 건드리지 않았던 영역이었어요.
그리고 발견했습니다. 서버 시간대가 UTC로 설정되어 있었어요.
알람 조건 로직은 한국 시간(KST) 기준으로 작성되어 있었는데, 서버는 UTC 기준으로 동작하고 있었습니다. KST는 UTC보다 9시간 빠르기 때문에, 조건이 오전 9시 체크라면 서버 입장에서는 자정이었어요. 당연히 조건이 충족되지 않았습니다.
코드는 정상이었고, 로컬 환경과 서버 환경이 다르게 동작하고 있었어요. 왜 초기 설정에서 서버 시간대를 확인하지 않았는지는 돌아봐도 명확하지 않습니다. 설정 파일을 처음부터 점검하지 않았던 것이 핵심이었어요.
무엇을 바꿨나
서버 시간대를 KST로 맞추고 재테스트했습니다. 설정해둔 알람이 울렸어요.
이후 시간 관련 로직 전체를 다시 검토했습니다. 서버 환경과 로컬 환경의 차이가 만들어낼 수 있는 다른 지점이 있는지 확인하기 위해서였어요. 배포 전 체크리스트에도 서버 시간대 항목을 추가했습니다.
이번 일이 바꾼 것
디버깅할 때 가장 먼저 의심하는 건 코드입니다. 내가 직접 작성한 부분이니까요.
그런데 이번엔 코드가 아니라 서버 환경이 문제였습니다. 내가 건드리지 않은 곳은 괜찮겠지라는 가정이 사흘을 잘못된 방향으로 이끌었어요.
지금은 로컬 환경과 서버 환경 차이를 먼저 확인하는 순서로 접근합니다. 코드가 동일해도 서버 시간대처럼 환경 설정이 다르면 동작이 달라질 수 있어요. 비트코인 알람처럼 시간 조건이 중요한 기능일수록 이 부분이 더 중요하다는 걸 이번에 다시 확인했습니다.
이제 알람이 안 울릴까 걱정하며 밤잠 설칠 필요 없습니다. 보이지 않는 사각지대까지 통제하는 알람킹에 중요한 순간을 맡겨보세요.