Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

34 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

UsedHub — 중고거래 플랫폼


목차

  1. 환경 설정 및 실행 방법
  2. 기술 스택
  3. 구현 기능
  4. 요구사항 반영 결과
  5. 데이터베이스 구조
  6. 보안 조치

1. 환경 설정 및 실행 방법

배포 환경 접속

배포 URL: https://usedhub.onrender.com

기본 관리자 계정

항목
아이디 admin
비밀번호 admin1234

로컬 실행 (선택 사항)

DB와 이미지 스토리지가 Supabase 외부 서비스에 의존하므로, 별도 설정 없이는 로컬 실행이 불가합니다. 로컬에서 실행하려면 프로젝트 루트에 .env 파일을 생성하고 아래 항목을 설정한 뒤 실행합니다.

DATABASE_URL=postgresql://...
SESSION_SECRET=임의의_긴_문자열
SUPABASE_URL=https://xxxx.supabase.co
SUPABASE_SERVICE_KEY=...
npm install
npm start

2. 기술 스택

구분 내용
Backend Node.js, Express
Database PostgreSQL (Supabase)
실시간 통신 Socket.IO
인증 express-session, bcryptjs
파일 업로드 Multer + Supabase Storage
배포 Render

3. 구현 기능

회원

  • 회원가입 / 로그인 / 로그아웃
  • 아이디·닉네임 중복 방지, 비밀번호 형식 검증
  • 마이페이지 (닉네임·소개글·비밀번호 수정)
  • 가입 시 기본 잔액 100,000원 자동 지급

상품

  • 상품 등록 (이미지 업로드 포함)
  • 상품 목록 / 상세 조회
  • 상품 수정 (이름·설명·가격·카테고리·지역·판매상태)
  • 내 상품 관리 (수정·삭제)

검색

  • 키워드 검색 (상품명·설명)
  • 카테고리 / 지역 / 판매상태 필터
  • 가격 범위 필터 (최소~최대)
  • 정렬 (최신순·가격낮은순·가격높은순·이름순)

소통

  • 전체 채팅 (실시간, Socket.IO)
  • 1:1 DM 채팅 (실시간, Socket.IO)
  • 읽음 처리 — 상대방이 메시지를 수신할 때 실시간 갱신
  • DM 목록 안읽은 메시지 수 뱃지 (카카오톡 스타일)
  • 알림 시스템 — 실시간 토스트(우상단) + 알림 페이지
  • 현재 채팅방의 알림은 토스트 미표시

사용자 차단

  • 유저 프로필에서 차단 / 차단 해제
  • 차단 상태에서 DM 시작 불가 (양방향)
  • 차단 목록 페이지 (/my-blocks)

신고 및 제재

  • 상품·유저 신고 (사유 입력 필수, 중복 신고 방지)
  • 신고 누적 시 자동 경고 부여 + 알림 발송
  • 관리자 수동 기간 정지 (1일·3일·7일·30일·1년)
  • 영구정지 / 정지 해제
  • 정지·영구정지 계정 로그인 차단 (남은 기간 안내)
  • 마이페이지에 경고 횟수·정지 상태 표시

지갑 / 송금

  • 잔액 조회 및 송금 내역
  • 6자리 PIN 인증 후 송금 처리 (DB 트랜잭션)
  • 잔액 부족·자기 자신 송금 차단
  • 송금 완료 시 DM방에 거래 카드 자동 표시
  • 거래 후기 — 송금한 거래에 한해 👍/👎 + 텍스트 작성 가능
  • 후기는 거래 카드의 "후기 남기기" 버튼으로 이어짐

거래 후기

  • 유저 프로필에 받은 후기 요약 (👍 n개 / 👎 n개) 표시
  • 후기 목록 최신순 20개
  • 송금 거래 1건당 1개의 후기만 작성 가능

관리자 대시보드

  • /admin — 통계 요약 + 최근 항목 미리보기
  • /admin/users — 유저 검색·필터(전체/영구정지/경고/정지중)·페이지네이션·정지 적용
  • /admin/products — 상품 검색·차단/해제/삭제·페이지네이션
  • /admin/reports — 신고 내역 (유저/상품 필터)·페이지네이션
  • /admin/transfers — 송금 로그, 이름 검색·날짜 필터·페이지네이션
  • /admin/messages — 채팅 로그, 내용·발신자 검색·날짜 필터·DM/전체채팅 탭·페이지네이션

4. 요구사항 반영 결과

요구사항 구현 여부 주요 경로
플랫폼 가입 /register, /login
상품 등록 및 조회 /product/new, /products, /products/:id
사용자 간 소통 /chat, /chat/direct/:roomId
악성 유저·상품 차단 신고→경고→정지, 관리자 제재, 사용자 차단
유저 간 송금 /wallet, PIN 인증, DB 트랜잭션
상품 검색 /products?q=... + 다중 필터
관리자 전체 관리 /admin/* 대시보드 및 상세 페이지

5. 데이터베이스 구조

테이블 설명
users 회원 정보, 잔액, 경고 횟수, 정지 일시, PIN 해시
products 상품 정보, 판매상태, 차단 여부
direct_rooms 1:1 채팅방, 읽음 시각
messages 채팅 메시지 (전체·DM), 거래 카드 타입 포함
transfers 송금 내역
notifications 알림 목록
reports 신고 내역 (중복 신고 방지 UNIQUE 제약)
user_blocks 사용자 차단 관계
reviews 거래 후기 (송금 1건당 1개 UNIQUE 제약)

6. 보안 조치

  • 비밀번호 bcrypt 해시 저장
  • 세션 쿠키 httpOnly, sameSite=lax
  • 로그인 필요 경로 미들웨어 분리 (requireAuth)
  • 관리자 전용 경로 미들웨어 분리 (requireAdmin)
  • 서버 측 HTML 이스케이프로 XSS 방지 (h() 함수)
  • 파일 업로드 MIME 타입 검사 (image/*만 허용)
  • 송금 PIN 6자리 bcrypt 해시 저장 및 검증
  • 차단·정지 계정 접근 차단 (로그인·DM·채팅 전송)
  • 1:1 채팅방 접근 권한 검증 (방 참여자만 입장)
  • 중복 신고 방지 (DB UNIQUE 제약)
  • 송금 서버 측 잔액 검증 (클라이언트 우회 불가)

About

화이트햇스쿨 4기 시큐어코딩

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages