혼자 만든 여행앱 서버가 수백 번 재시작한 사연 | DanTravel 개발일지
안녕하세요. 혼자 이런저런 서비스를 만들고 운영하는 개발자입니다. 오늘 개발일지의 주인공은 AI 여행 일정 플래너 DanTravel(단트래블) 입니다. 요즘 이 녀석 때문에 새벽에 깬 적이 있어서, 그 이야기를 좀 풀어보려 합니다.
👋 오늘의 개발 근황
DanTravel은 가고 싶은 장소를 넣으면 동선을 짜주고 일정을 저장해 주는 여행 플래너예요. 기능은 어느 정도 자리를 잡았는데, 정작 최근 한 주는 새 기능보다 '안 죽게 만드는' 일에 시간을 더 썼습니다. 1인 개발의 현실이란 게 늘 그렇죠. 멋진 기능을 그리다가도, 서버가 한 번 넘어지면 모든 우선순위가 바뀝니다.
🎯 이 프로젝트는 무엇인가
DanTravel은 '여행 계획 세우기가 귀찮은 사람'을 위한 서비스입니다. 장소들을 고르면 최적 동선을 계산해 하루 일정을 만들어 주고, 마음에 드는 일정은 저장해 두었다가 나중에 다시 꺼내 볼 수 있어요. 거창한 여행사 서비스가 아니라, 주말에 어디 갈지 30분씩 고민하던 시간을 줄여주는 작은 도구를 지향합니다.
🛠️ 이번 주 뭐가 바뀌었나
- 서버 크래시 루프 복구: 운영 서버 메모리가 빠듯해진 상황에서 프로세스 관리자가 멀쩡히 살아있는 자식 프로세스를 죽은 걸로 오해하고 자꾸 새로 띄우는 일이 벌어졌습니다. 그렇게 생긴 '고아 프로세스'가 포트를 붙잡고 놓아주지 않아, API가 같은 포트를 못 잡고 수백 번씩 재시작을 반복했어요. 고아 프로세스를 정리하고 다시 띄운 뒤, 관리자가 보는 PID와 실제 포트를 점유한 PID가 일치하는지까지 확인하고서야 마음을 놓았습니다.
- 로그인 체계 정비 설계: 여러 서비스에서 한 번 로그인하면 같이 통하도록 하는 통합 로그인으로 옮기는 작업을 정리했습니다. 오래된 로그인 경로를 정리하고 인증 방식을 표준에 맞추는 5단계 계획을 문서로 박아뒀어요.
- 일정 내보내기: 조금 앞서 저장한 여행 일정을 캘린더 파일로 내려받아 구글·애플 캘린더에 넣을 수 있게 한 기능도 자리를 잡아가는 중입니다.
📸 화면으로 보는 변화
💭 만들면서 느낀 점
이번 주의 교훈은 단순했습니다. 기능을 아무리 잘 만들어도, 서버가 한 번 넘어지면 사용자에게는 그냥 '안 되는 서비스'라는 것. 혼자 개발하면 모니터링도 알림도 직접 챙겨야 해서, 문제를 새벽에야 발견하는 일이 잦습니다. 그래서 요즘은 '죽은 프로세스를 자동으로 감지해 알려주는 장치'를 다음 숙제로 적어뒀어요. 화려한 기능보다 이런 기반 작업이 결국 서비스의 신뢰를 만든다는 걸 매번 다시 배웁니다.
🔗 직접 써보기
여행 일정 짜기가 귀찮으셨다면 한번 가볍게 써보세요. 써보시고 불편한 점이나 '이런 기능 있으면 좋겠다' 하는 의견을 주시면, 다음 개발일지에 반영기를 써볼게요. DanTravel 바로가기