바이브코딩

정류장 두 곳에서 125만 건까지 — 하모타고

· 5분
만드는 중구경하기 ↗
  • Claude Code
  • Python
  • iOS 단축어
  • GitHub Actions
  • ntfy
  • Raspberry Pi
  • Docker

한눈에 보기

  • 무엇: 진주 공영자전거 '하모타고' 정류장에 자전거가 몇 대 있는지 보고, 정해 둔 시간에 휴대폰으로 알려 주는 프로그램. 지금은 날씨·운영시간까지 엮어서 정류장별 통계도 본다
  • 주소: hamotago.easywin.fyi
  • 언제: 2026년 3월 25일 밤 시작, 지금도 고치는 중
  • 어떻게: Claude에 말로 부탁해서. 첫 대화만 209번 주고받았다
  • 내 역할: 써 보고, 안 되는 걸 찾아서 던지기
  • 쓴 것: 아이폰 단축어 → GitHub Actions + ntfy 알림 → 라즈베리파이 → 집 서버(Docker), Python
  • 상태: 운영 중. 새 주소에서 로그인·쓰기 전체 점검은 아직 남아 있다
  • 남은 것: 만드는 것보다 계속 돌아가게 하는 게 더 큰 일이었다

시작은 정류장 두 곳

3월 25일 밤 11시 45분. 사진첩을 만들고 닷새 뒤였다.

교통비(자동차 주유비)를 아껴 보겠다고, 운동도 같이 해 볼 겸 하모타고를 타기 시작했다. 시범 운영이라 공짜였다.

그런데 짜증 나는 게 있었다. 공식 사이트는 매번 지도를 열고 확대해서 어디에 몇 대 있는지 일일이 봐야 해서 답답했다.
'있었는데 없었습니다' 상황도 생겼다. ㅋㅋㅋ

그때 크롬에 클로드인가 GPT인가가 붙어서 사이트를 볼 수 있게 됐더라.
그래서 이 사이트에 있는 정보로, 출퇴근할 때 자전거 대수를 쉽게 볼 수 있는 뭔가를 만들어 보려고 했다. 그러다 이렇게 됐다.

처음 부탁은 단순했다. 정류장 두 곳에 자전거가 몇 대 있는지 알려 달라는 것. 진주시 하모타고 정류장 정보를 받아 와서, 두 곳의 대수를 휴대폰 알림으로 띄우는 아이폰 단축어를 만들었다. 그 단축어 파일을 만들어 주는 코드가 아직 폴더에 남아 있다.

재밌는 건 그 대화를 연 곳이다. 개발 폴더가 아니라 옵시디언 메모를 정리하던 폴더였다.

단축어에서 집 서버까지

그다음부터는 조금씩 커졌다.

  • 3월 26일 라즈베리파이에서 정해진 시간마다 돌리는 걸 붙여 보기 시작했다.
  • 3월 30일 휴대폰 화면에서 표시가 이상한 걸 고쳤다.
  • 4월 7일 처음으로 Git에 올렸다. AI가 GitHub Actions라는 방법을 알려 줘서, 평일 정해 둔 시간에 조회해 ntfy로 알림을 보내게 해 봤다. 그런데 내 맘대로 잘 안 됐고 작동도 잘 안 되는 것 같아서 금방 다른 방법을 찾았다. 내가 좀 까다로워서. ㅎㅎ 쓸 줄 몰라서였겠지만.
  • 6월 라즈베리파이를 두 대로 나눴다. 하나는 실제로 쓰는 용, 하나는 시험용.
  • 7월 집 서버에서 돌아가게 됐고, 보안을 손봤다.
  • 10월 Docker로 다시 올렸다. 로그인하고, 즐겨찾기가 그대로 있고, 시험 알림이 휴대폰에 오는 걸 직접 확인했다. 수집이 빠지거나 틀렸을 때 처리, 정류장이 바뀐 이력, 공식 공지, 운영시간·휴무를 반영한 통계를 붙였다.
  • 10월 말 과거 날씨 자료를 붙이고, 전체 기간을 한 번에 보는 분석실을 만들었다.

왜 이렇게 옮겨 다녔냐면.

단축어는 짜증 그 자체였다. 설정 하나 바꾸려 해도 이게 무슨 코딩도 아니고.... 답답했다. 게다가 내가 부르면 그때 받아 보는 게 다였다. 앱처럼 만들어 버리면 내가 자주 쓰는 정류장 대수도 늘 파악할 수 있으니까, 뭘 좀 더 붙여서 만들어 보고 싶었다.
마침 집에 라즈베리파이 3B가 있었다. 이걸로 서버를 한번 해 볼까 싶었다.

그런데 1GB 램 라즈베리파이 두 대로는 도저히 성능이 안 나왔다. 느리고 답답했다. 전용 충전기도 아니어서 전력이 모자라니 성능이 떨어지고, 스로틀링까지 걸렸다.
그래서 맥미니를 살까 했는데 너무 비쌌다.... 찾아보니 미니PC가 좋다고 해서 미니PC를 샀다.

결론은 너무 잘한 선택. 지금은 서버로 쓰고 있다. 이것저것 시험도 해 보면서.

돌려 보니 생긴 일들

만들 때는 몰랐던 것들이 쓰면서 하나씩 나왔다.

알림이 두 번씩 왔다. ntfy 설정하고, 챗GPT 코덱스 예약이었나? 이런저런 걸 한 번씩 다 적용해 봤는데, 어느 순간 ntfy 푸시가 두 개씩 막 오는 거다. 짜증 나게.
기록을 보면 시험용 라즈베리파이가 실제 쓰는 쪽과 같은 알림 통로를 쓰고 있었다. 시험용 쪽 알림을 끄고 나서야 한 번씩 왔다.

연결이 자꾸 끊겼다. 자전거 정보, 날씨, 알림 서버 어디든 응답이 늦으면 멈췄다. 다시 시도하고, 기다리는 시간을 정하고, 안 되면 직전에 받은 정상값을 보여 주게 했다. 오래된 숫자로는 알림을 보내지 않게 했다.

0대랑 '모름'이 똑같아 보였다. 자전거가 정말 0대인 것과, 값이 안 들어온 걸 구분하지 못했다. 10월에야 나눴다. 그 전 자료는 원본이 없어서 되짚어 볼 수 없는 것도 있다.

자전거가 있어도 못 빌리는 곳이 있었다. 운영을 멈춘 정류장이 목록에는 그대로 남아 있었다. 대수가 1 이상이라고 빌릴 수 있는 게 아니었다. 휴무·운영시간·정류장 중단을 통계에 반영했다.

숫자로 보면

10월 29일 기준으로 정류장 상황을 33,949번 찍어 뒀고, 정류장별 대수 기록이 1,256,113건 쌓였다.

다만 이건 '그때 몇 대 있었나'를 본 기록이다. 몇 명이 빌렸는지, 자전거가 모자라서 몇 명이 못 탔는지는 이 숫자로 알 수 없다. 그렇게 말하면 거짓말이 된다.

사진첩과 다른 점

사진첩은 하루 만에 접었다. 하모타고는 일곱 달째 고치고 있다.

실제로 계속 변화가 생겼고, 나도 매일 쓰면서 불편한 게 생기면 고치고, 그러다 보니 계속 쓰게 됐다.

지금은 도메인도 하나 사서 연결했다. 처음에는 Tailscale Funnel로 열었는데, 위험하다는 얘기도 있고 주소도 너무 알아보기 어려웠다.
그래서 큰맘 먹고 1년에 5.6달러쯤 하는 도메인을 2년 치 질렀다!

처음 링크 미리보기 (Tailscale 주소 시절, 주소는 가림)
처음 링크 미리보기 (Tailscale 주소 시절, 주소는 가림)
지금 링크 미리보기 (hamotago.easywin.fyi)
지금 링크 미리보기 (hamotago.easywin.fyi)
하모타고+ 링크 미리보기 그림
하모타고+ 링크 미리보기 그림

이 글을 쓰는 날에도 하모타고 화면을 손보고 있었다. 아직 끝나지 않았다.