택시 QR 포인트 적립 서비스
방 번호와 6자리 비밀번호 로그인, 기사·대리점 QR 입장 시 손님 방 생성, 방별 포인트 조회, 서버 저장 기반 내 방 되찾기를 기존 HTML·JavaScript 화면 위에 서버 API로 연결하는 맞춤 MVP 프로젝트입니다.
프로젝트 개요
방 번호와 6자리 비밀번호 로그인, 기사·대리점 QR 입장 시 손님 방 생성, 방별 포인트 조회, 서버 저장 기반 내 방 되찾기를 기존 HTML·JavaScript 화면 위에 서버 API로 연결하는 맞춤 MVP 프로젝트입니다. Node.js + Express + PostgreSQL 기반으로 설계했습니다.
작업 범위
- 내 방 홈: 방 번호와 6자리 비밀번호로 들어가 오늘의 적립 포인트, 최근 적립 내역, 이번 주 할 일을 한 화면에서 확인합니다. 이름과 전화번호는 받지 않습니다
- QR 입장: 기사나 대리점의 QR로 접속하면 손님 방이 만들어지고, 소개한 기사·대리점 관계가 함께 저장되는 과정을 보여 줍니다
- 내 포인트: 방별 적립 포인트와 적립 내역을 날짜순으로 조회하고, 손님 고유 번호가 붙은 제휴 링크를 만드는 입력 폼을 제공합니다
- 기사·대리점 방: 기사와 대리점이 자기 방에서 운행일지와 할 일을 저장하고, 소개한 손님 수와 보유 포인트를 확인합니다
주요 업무
- 내 방 홈 화면: 방 번호 + 비밀번호 해시 기반 세션 로그인, 실패 횟수 제한·잠금, 서버에 저장된 방 데이터 조회
- QR 입장 화면: QR 토큰 해석, 손님 방 생성, 기사·대리점·소개 관계 저장
- 내 포인트 화면: 포인트 원장 조회, 적립 내역 목록, 링크 규칙 코드화 입력 폼
- 기사·대리점 방 화면: 역할별 방 데이터 서버 연동, 운행일지·할 일 저장, 소개 손님 요약



프로젝트 핵심 과제
숫자 6자리 비밀번호는 경우의 수가 적어 방별 잠금과 방 번호 추측 방지를 함께 설계해야 하는 리스크
실패 카운터와 무작위 방 코드로 대응합니다
이름·전화번호를 받지 않는 구조라 비밀번호를 잊은 손님의 복구 경로가 좁아
방 번호 재안내 절차를 관리자 화면과 함께 설계합니다
기존 HTML·JavaScript 화면의 저장 방식이 화면마다 달라 어댑터 계층으로 호출을 모으는 작업이 필요합니다
백엔드를 Wix 환경에 둘지 별도 서버에 둘지에 따라 소스·데이터 인계 방식이 달라져
비용과 관리 편의 기준의 비교안을 함께 제안합니다
핵심 기능 상세
내 방 홈
방 번호와 6자리 비밀번호로 들어가 오늘의 적립 포인트, 최근 적립 내역, 이번 주 할 일을 한 화면에서 확인합니다. 이름과 전화번호는 받지 않습니다.
- bcrypt 해시와 방 번호별 실패 횟수 카운터로 6자리 숫자 비밀번호 무차별 대입을 차단하는 잠금 구조 설계
- express-session + PostgreSQL 세션 저장소로 기기를 바꿔도 같은 방에 다시 들어오는 세션 흐름 구현
- 방 번호를 무작위 코드로 발급해 추측 가능한 연번을 쓰지 않는 방 식별자 설계
방 번호와 비밀번호만으로 새 휴대폰·PC에서도 기존 방을 되찾는 흐름을 서버 저장 구조로 구현합니다.


QR 입장
기사나 대리점의 QR로 접속하면 손님 방이 만들어지고, 소개한 기사·대리점 관계가 함께 저장되는 과정을 보여 줍니다. QR 토큰 해석, 손님 방 생성, 기사·대리점·소개 관계 저장.
- 기사·대리점별 서명된 QR 토큰으로 접속 경로를 식별하고 위변조 값은 거부하는 검증 로직 구현
- Prisma 트랜잭션으로 손님 방 생성과 소개 관계 기록을 한 번에 저장해 부분 저장을 방지
- 소개 관계는 1단계 깊이까지만 저장하도록 관계 테이블 제약 설계
QR 한 번으로 손님 방, 소개 기사, 소개 대리점이 한 트랜잭션에 묶여 저장되는 구조를 구현합니다.


내 포인트
방별 적립 포인트와 적립 내역을 날짜순으로 조회하고, 손님 고유 번호가 붙은 제휴 링크를 만드는 입력 폼을 제공합니다. 포인트 원장 조회, 적립 내역 목록, 링크 규칙 코드화 입력 폼.
- 포인트 원장(적립 행 단위 기록) 합계로 잔액을 계산해 잔액 컬럼과 내역이 어긋나지 않는 구조 설계
- 커서 기반 페이지네이션으로 적립 내역이 많아도 목록을 이어서 불러오는 API 구현
- 제휴 링크 주소 규칙을 템플릿 함수로 코드화해 손님 번호가 서브 값으로 붙은 링크 생성 폼 구현
원장 합계 기반 잔액 조회와 링크 규칙 코드화 입력 폼으로 손님별 포인트 확인 흐름을 구현합니다.


기사·대리점 방
기사와 대리점이 자기 방에서 운행일지와 할 일을 저장하고, 소개한 손님 수와 보유 포인트를 확인합니다. 역할별 방 데이터 서버 연동, 운행일지·할 일 저장, 소개 손님 요약.
- 역할(손님·기사·대리점) 값에 따라 접근 가능한 API 범위를 나누는 권한 미들웨어 구현
- 기존 화면의 로컬 저장 데이터를 서버 API 호출로 바꾸는 어댑터 계층 설계
- 낙관적 UI 갱신과 서버 응답 대조로 저장 실패 시 화면 값을 되돌리는 처리 구현
기존 화면은 그대로 두고 데이터 읽기·쓰기만 서버 API로 연결하는 어댑터 구조를 구현합니다.


프로젝트 진행 단계
방·포인트 데이터 모델 설계 · 2026.10
방·역할·소개 관계·포인트 원장 ERD 설계, Prisma 스키마와 마이그레이션 정의
방 번호 로그인·QR 입장 API 구현 · 2026.10
비밀번호 해시·세션·잠금 로직과 서명 QR 토큰 검증, 손님 방 생성 트랜잭션 구현
기존 화면 서버 연동 · 2026.10
손님·기사·대리점 화면의 방 데이터를 API 어댑터로 연결, 내 방 되찾기 흐름 구현
스테이징 시연과 시험 작업 점검 · 2026.10
실험용 주소에서 시연, 로그인·되찾기·포인트 조회 시나리오 테스트 작성
개발 결과
기술적 주안점
- 방 번호와 비밀번호만으로 새 휴대폰·PC에서도 기존 방을 되찾는 흐름을 서버 저장 구조로 구현합니다
- QR 한 번으로 손님 방, 소개 기사, 소개 대리점이 한 트랜잭션에 묶여 저장되는 구조를 구현합니다
- 원장 합계 기반 잔액 조회와 링크 규칙 코드화 입력 폼으로 손님별 포인트 확인 흐름을 구현합니다