← 모든 글

FastAPI 로 만든 첫 내부 도구 — URL 단축기

"하루면 된다" 던 URL 단축기는 일주일 걸렸다. 그 일주일의 기록.

내부에서 공유하는 긴 GCS / S3 링크가 슬랙·메일·노션에 그대로 박혀 다닌다. “URL 단축기 하나 있으면 좋겠다” 한 말에서 시작.

bit.ly 가 있는데 굳이? — 회사 도메인 아래 두고 싶었고, 만료 정책·발급자 로그도 우리 손에 두고 싶었다.

1일차 — “하루면 된다”

FastAPI + SQLite + nanoid 8자리. 30분 만에 동작하는 prototype. POST /shorten { url }{ slug }, GET /{slug}RedirectResponse. 그게 다였다.

2일차 — 누가 만들었는지 모르겠다

GET /admin 페이지를 만들고 보니, 누가 어떤 url 을 단축했는지 모른다. 그래서 슬랙 OAuth 로 발급자 추적 추가. + 4시간.

3~4일차 — 짧은 URL 이 사라졌다

발급한 슬러그 하나가 자꾸 404. SQLite 의 락 충돌이었다. RedirectResponse 후에 click count 를 같은 connection 에서 increment 하다 race condition. WAL 모드로 바꾸고 click count 만 별도 INSERT (background task) 로 빼니 해결.

5일차 — bot 이 다 클릭한다

발급 후 1시간 안에 클릭 카운트가 50씩 올라간다. 슬랙의 unfurl bot 이었다. 카운트 산정에서 User-Agent 기준 bot 제외 필요. + 2시간.

7일차 — “이제 진짜 끝”

만료 기본 90일, admin 페이지 슬랙 발급자 표시, bot 제외, WAL 모드, Cloudflare 뒤에 두기. 코드 약 280줄.

다음에는 다르게 할 한 가지

내부 도구는 운영 측면 (인증, 멱등성, bot 트래픽, 백업) 이 본 기능보다 길어진다. 일정 잡을 때 본 기능 ×3 으로 계산한다. “하루면 된다” 는 십중팔구 일주일이다.


🛒 이 글과 어울리는 추천 상품

위 링크는 쿠팡파트너스 활동의 일환이며, 일정액의 수수료를 제공받을 수 있습니다.