본문 바로가기

단감의 개발일지

단감이 만든 낚시 지도 DanFish, 4개월 묵은 376번 재시작 미스터리를 새벽에 풀었다 | 1인 개발 근황

이번 주는 새벽 깸이 많았다. 자동화로 돌리고 있는 자율 워커가 4시간 간격으로 운영서버를 들여다보다가, 한 가지 이상한 숫자를 잡아냈다. DanFish 백엔드의 PM2 재시작 카운트가 376 회. 4개월 가까이 이게 계속 쌓이고 있었다는 사실을, 이제야 제대로 들여다본 한 주 이야기다.

👋 오늘의 개발 근황

1인 개발자가 운영하는 낚시 지도 서비스 DanFish 는 운영서버에서 PM2 로 노드 백엔드를 돌리고 있다. 안정성은 늘 신경 쓰는 영역이라 4 개 API 에 워치독을 박아 뒀는데, 그 워치독 자체가 "문제" 였다는 게 이번 진단의 핵심이었다.

🎯 이 프로젝트는 무엇인가

DanFish 는 한국 연안·내수면 낚시 포인트와 실시간 낚시지수를 함께 보여주는 서비스다. 웹과 안드로이드, 그리고 갤럭시 워치 같은 웨어 OS 까지 같이 운영하고 있다. 사용자가 늘어날수록 "끊김 없이 떠 있는 것" 자체가 가장 중요한 가치라, 백엔드 안정성에 가장 많은 시간을 쓰고 있다.

🛠️ 이번 주 뭐가 바뀌었나

  • 새벽 자율 워커 25번째 깸에서 PM2 재시작 376 회의 진짜 원인을 잡았다. /api/health 같은 가벼운 엔드포인트가 있는데, 워치독은 /api/fishing-spots/available-dates 같은 DB 풀스캔 엔드포인트를 3분마다 때리고 있었다.
  • 정각마다 도는 바다낚시지수(KHOA) 수집 작업과 워치독 호출이 겹치면서 DB 커넥션 풀이 일시 포화 → curl 5초 타임아웃 → 즉시 재시작, 이라는 의미 없는 루프가 4개월간 ~880 회 누적되어 있었다.
  • 새벽 26번째 깸에서는 4시간 동안 새 추가 사고 0건을 확인하며 진단을 cross-confirm 했고, "엔드포인트만 가벼운 걸로 바꾸고 1회 실패는 무시" 옵션을 운영 결재 안건으로 박았다.
  • 이 작업은 모두 운영 반영 0 건, 메모리·계획서·게시판 SOT 갱신만 했다. 사용자에게는 변화가 없지만, 다음 한 마디로 4개월 부채가 박멸될 준비가 끝났다.

📸 화면으로 보는 변화

💭 만들면서 느낀 점

1인 개발의 가장 큰 함정은 "잘 돌아가는 것처럼 보이는 것" 이라는 사실을 이번 주에 다시 배웠다. PM2 가 자동으로 재시작해 주니 사용자 입장에서는 잘 돌아간다. 그러나 사용자가 정각에 접속했을 때 5~30 초 응답 없는 순간이 4개월 동안 매일 반복되고 있었던 것이다. 워치독이 "문제를 가리고" 있었던 셈이다. 자동화는 강력하지만, 자동화가 만든 통계 자체를 의심하는 깸이 가끔은 필요하다는 점이 이번 진단의 가장 큰 교훈이었다.

🔗 직접 써보기

주말 낚시 한 번 가시려는 분들은 DanFish 바로가기 로 한 번 들러 보시면 좋다. 실시간 낚시지수와 포인트 정보가 함께 떠 있다. 사용 중에 어색하거나 느린 구간이 있으면 댓글로 알려 주시면 다음 깸 때 잡아 보겠다. 1인 개발이라 모든 피드백은 정말 직접 본다.

반응형