우동체 제작기 #1 — 복싱하는 개발자가 동네 복싱 커뮤니티를 만든 1년
2026-11-02 11:00:00
복싱을 배우다 보면 체육관 밖으로 나가고 싶어지는 순간이 온다. 다른 체육관 사람과 스파링을 해보고 싶고, 동네에 어떤 체육관이 있는지 비교해 보고 싶고, 오늘 친 스파링 영상을 누군가에게 보여주고 피드백을 받고 싶다. 그런데 이걸 한 번에 할 수 있는 곳이 없었다. 체육관 정보는 지도 앱에, 스파링 구인은 카페 게시판에, 영상은 각자 인스타그램에 흩어져 있었다.
그래서 만든 게 우리동네체육관(우동체)이다. 복싱 체육관을 찾고, 동네 복서와 스파링을 잡고, 스파링 영상을 올려 피드백을 주고받는 복싱 전용 커뮤니티다. 이 카테고리 우동체 제작기에는 그걸 만들면서 겪은 일들을 적는다. 첫 글은 전체 그림이다.
커밋 로그로 본 1년
git log를 월별로 세어 보면 이 프로젝트의 리듬이 그대로 보인다.
| 기간 | 커밋 수 | 그때 한 일 |
|---|---|---|
| 2025-08 | 30 | MVP 뼈대 — 관장/관원 기능, Drizzle + 인증 세팅 |
| 2025-09 | 97 | 지도 검색, 입점 신청, 관원 CSV 업로드 |
| 2025-10 ~ 12 | 125 | 초대 링크, 채팅, 카카오 인앱 로그인, 본인인증(KG이니시스) |
| 2026-01 ~ 04 | 144 | 체육관 데이터 크롤러, 스파링 매칭, 대회 크롤러, 게시판 구조 개편 |
| 2026-05 ~ 06 | 87 | 이벤트 계측(PostHog), 가입 유도, 스파링 로그, 계급 시스템 |
| 2026-07 | 224 | 영상 업로드 tus 전환, 운영 DB 사고 대응, 알림·팔로우 |
| 2026-08 ~ 09 | 357 | 피드 구조 통합, 복싱 용품 리뷰, 홈 개편, 출석 푸시 |
| 2026-10 | 347 | 용품 장비창, 영상 타임스탬프 댓글, 게시글 투표, 복싱 커리어 게임 |
dev 브랜치 기준 커밋 1,260개, 커밋이 있었던 날은 245일. 처음 몇 달은 기능을 "있게" 만드는 시기였고, 2026년 여름부터는 실제 사용자가 생기면서 커밋이 폭발했다. 사람이 쓰기 시작하면 고칠 게 기하급수로 늘어난다는 걸 숫자로 확인한 셈이다.
무엇을 어떤 순서로 붙였나
돌아보면 순서에 이유가 있었다.
- 체육관 정보가 먼저다. 아무도 없는 커뮤니티에 들어올 이유는 없다. 그래서 공공데이터로 전국 복싱 체육관 2,400여 곳을 먼저 깔고, 지도에서 찾을 수 있게 했다. 체육관 상세 페이지는 지금도 검색 유입의 대부분을 차지한다.
- 관장님 도구. 출석, 회원 관리, 공지, 체육관 단체 채팅. 체육관 하나가 들어오면 관원들이 같이 들어온다.
- 스파링. 동네 복서 찾기, 매칭 일정 잡기, 노쇼 처리, 그리고 스파링 영상을 올리는 "스파링 로그".
- 다시 오게 만드는 장치. 계급, 활동 뱃지, 팔로우, 출석 기반 푸시, 용품 리뷰.
스택
- 웹: Next.js(App Router) + React, React Query, Jotai, Tailwind
- DB: Supabase Postgres + Drizzle ORM (마이그레이션 SQL 39개)
- 미디어: 이미지는 Cloudflare R2, 영상은 Cloudflare Stream
- 앱: Expo(React Native) 웹뷰 앱 — iOS/Android 스토어 출시
- 분석: PostHog, 검색은 네이버 서치어드바이저 + 구글 서치 콘솔
- 배포: Vercel (서울 리전)
API 라우트가 242개, 소스 16만 줄 정도 된다. 혼자 만든 서비스치고는 꽤 크다.
AI와 같이 만들었다
숨길 이유가 없으니 적어둔다. dev 커밋 1,260개 중 636개에 Co-Authored-By: Claude 줄이 붙어 있다. 절반이다. 2026년 여름부터는 거의 모든 작업을 Claude Code와 짝 프로그래밍으로 했다.
체감상 바뀐 건 "코드를 치는 시간"보다 "원인을 끝까지 파는 시간" 이다. 예전 같으면 증상만 막고 넘어갔을 버그를, 이제는 커밋 메시지에 원인과 재발 방지책까지 적고 넘어간다. 다음 글들이 대부분 그런 기록이다.
다음 글
- #2 좋아요 1개 눌렀는데 11이 됐다 — postgres.js와 bigint
- #3 서울 서버인데 요청이 태평양을 두 번 건넜다 — Cloudflare 프록시 끄고 6배 빨라진 이야기
우동체는 wdcboxing.com에서, 인스타그램은 @wdc_boxing에서 볼 수 있다.