~/우성현

← 모든 프로젝트

바른오더 — 이사청소 매칭 플랫폼

이사청소 견적 요청·비교, 업체 매칭, 실시간 채팅, 구독 요금제, 관리자 기능을 갖춘 웹 서비스

기간
2026.01 – 2026.03
역할
1인 개발 · AI 코딩 에이전트 협업
저장소
wwoosshh/clearly-backend
상태
서버 중지 · barun-order.com
스택
  • NestJS
  • Next.js
  • Prisma
  • PostgreSQL
  • Redis
  • Socket.IO
  • Vercel
  • Railway

핵심 수치

2026-09-29 기준

문제

이사청소를 맡기려는 소비자와 견적을 내려는 업체를 견적 요청·제출·비교·수락의 흐름으로 잇는 것이 목표였습니다. 사이트는 스스로를 이렇게 소개합니다. “검증된 이사청소 업체를 빠르고 간편하게 매칭해드립니다.”

접근

  • 견적 요청 → 업체 견적 제출 → 비교 → 수락으로 이어지는 흐름을 NestJS 모듈과 Prisma 모델로 만들었습니다. 견적을 수락하면 한 트랜잭션에서 나머지 제출 견적을 거절하고, 매칭과 채팅방을 만듭니다.
  • 웹은 Next.js로 만들었고, 인증은 httpOnly 쿠키를 우선하되 Authorization 헤더도 받습니다. 알림은 WebSocket으로 실시간 전달하고, FCM 푸시도 보낼 수 있게 했습니다.
  • 실시간 채팅은 Socket.IO로, 자주 읽는 데이터는 Redis 캐시로 처리했습니다.
  • 카카오·네이버·구글 소셜 로그인, 구독 요금제, 업체용 고객 관리, 관리자 화면까지 구현했습니다.

결과

  • 업체용 고객 관리 조회(목록·파이프라인·통계가 함께 쓰는 고객 행 구성)의 쿼리 수를 고객 N명일 때 4N+3개에서 7개로 줄였습니다. 고객마다 4번씩 하던 조회를 한꺼번에 묶어 읽습니다(2026-02-20).
  • OAuth 콜백에서 토큰이 URL로 노출되던 문제를 임시 코드 교환 방식으로 바꿨습니다. 임시 코드는 60초 동안만 유효하고 한 번 쓰면 지워집니다. 리프레시 토큰은 SHA-256 해시로 저장하고, 웹 인증은 httpOnly 쿠키로 옮겼습니다(2026-03-01과 03-02).
  • 2026-02-11 커밋에서 Redis 캐시를 8개 서비스로 넓혔습니다(그중 포인트 서비스는 이후 구독 전환으로 삭제됐습니다).
  • barun-order.com 도메인에 요금제·이용약관·개인정보처리방침 페이지를 두었습니다.

주요 결정

  • 업체가 견적을 제출할 때마다 포인트를 차감하던 방식을, 구독 요금제(BASIC·PRO·PREMIUM)와 일일 견적 한도 방식으로 바꿨습니다(2026-02-19). 포인트 모듈은 삭제했습니다.

한계와 다음 단계

  • 지금은 백엔드 서버가 중지되어 있어 로그인과 견적 요청이 동작하지 않습니다.
  • 테스트가 적습니다. 백엔드의 단위 테스트 파일은 7개(인증·채팅·업체·견적·매칭·리뷰 서비스와 앱 컨트롤러)이고, 웹 저장소에는 테스트와 CI가 없습니다.
  • 백엔드 CI는 main 브랜치 실행 78회 중 58회가 실패했고, 마지막 실행(2026-03-05)도 실패로 끝났습니다.
  • 실제 사용자는 없습니다.

AI 협업 방식

방향과 판단은 직접 했고, 구현과 문서 작업은 AI 코딩 에이전트(Claude Code)와 함께 했습니다. 모든 브랜치의 커밋 기준으로 백엔드 저장소는 137개(의존성 자동 갱신 봇 커밋 10개 포함) 중 121개에, 웹 저장소는 176개(같은 봇 커밋 13개 포함) 중 155개에 Claude 공동 작성 표기가 있습니다.