프로젝트 소개
상품을 자동으로 판매하고 관리하는 웹 기반 자판기 시스템을 개발했습니다. 이 시스템은 다양한 상품을 판매하며, 관리자는 상품 등록부터 재고 관리, 판매 내역 확인까지 모든 과정을 웹 인터페이스에서 관리할 수 있습니다. 고객은 포인트를 충전하고 원하는 상품을 선택하여 즉시 구매할 수 있으며, 구매한 상품 정보는 자동으로 제공됩니다.
핵심 기능
이 시스템은 다음과 같은 주요 기능을 제공합니다:
- 관리자 대시보드: 상품 관리, 재고 현황 모니터링, 판매 완료 내역 조회
- 실시간 포인트 충전 시스템: 고객이 충전 요청 시 입력한 입금자명과 금액으로 판매자 계좌에 입금하면, 시스템이 자동으로 입금 내역을 DB에 반영하여 해당 고객의 포인트를 자동으로 충전합니다. 관리자의 수동 승인 없이도 24시간 자동으로 처리됩니다.
- 자동 재고 관리: 상품 구매 시 재고가 자동으로 차감되고 품절 상태 자동 업데이트
- 구매 내역 관리: 고객이 구매한 상품의 상세 정보를 안전하게 제공
- 포인트 히스토리: 모든 포인트 변동 내역을 기록하여 투명한 거래 관리
제작 과정
기술 스택
이 프로젝트는 다음과 같은 기술을 사용하여 개발되었습니다:
- 백엔드: Node.js, Express.js
- 데이터베이스: MySQL
- 프론트엔드: EJS 템플릿 엔진, HTML5, CSS3, JavaScript
- 인증: 세션 기반 인증 시스템
주요 구현 내용
시스템의 핵심 기능 구현에 집중했습니다:
- 관리자와 일반 사용자를 구분하는 권한 관리 시스템
- 상품 정보를 효율적으로 관리하기 위한 CRUD 기능
- 국가별, 종류별로 상품을 분류하고 가격을 차등 설정하는 시스템
- 입금자명과 금액 매칭을 통한 자동 충전 시스템 및 관리자 수동 승인 워크플로우
- 구매 시 포인트 차감 및 재고 자동 업데이트 로직
작동 방식
관리자 기능
관리자는 시스템의 모든 기능을 제어할 수 있습니다.
상품 관리
상품 관리 페이지에서는 상품명, 국가, 종류, 상태를 관리할 수 있습니다. 빈 행을 일괄 생성하여 대량의 상품을 효율적으로 등록할 수 있으며, 각 필드는 드롭다운을 통해 선택할 수 있도록 구현했습니다.
재고 현황
각 상품 종류별로 국가(Asia, Etc)에 따른 재고 현황을 한눈에 확인할 수 있습니다. 재고가 있는 항목은 굵은 글씨로 표시되어 관리자가 쉽게 파악할 수 있습니다.
판매 완료 내역
판매가 완료된 상품의 정보를 조회할 수 있습니다. 상품명, 구매한 고객 정보, 구매 일시 등을 확인할 수 있으며, 검색 기능을 통해 특정 거래를 빠르게 찾을 수 있습니다.
설정
충전 계좌 정보와 각 상품의 가격을 설정할 수 있습니다. 상품 종류와 국가별로 가격을 차등 설정하여 유연한 가격 정책을 운영할 수 있습니다.
고객 충전 요청 관리
이 시스템은 자동 충전과 수동 승인 두 가지 방식을 모두 지원합니다. 고객이 충전 요청 시 입력한 입금자명과 금액으로 판매자 계좌에 입금하면, 시스템이 입금 내역을 실시간으로 확인하여 자동으로 데이터베이스에 반영하고 해당 고객의 포인트를 즉시 충전합니다. 이를 통해 관리자의 개입 없이도 24시간 자동으로 충전 처리가 가능합니다.
자동 충전이 처리되지 않은 경우나 특별한 상황에서는 관리자가 수동으로 승인할 수 있습니다. 수동 처리 시 고객 아이디, 입금자명, 충전 금액, 요청 ID를 확인한 후 승인할 수 있으며, 포인트가 즉시 충전된다는 안내 메시지를 표시하여 관리자가 신중하게 처리할 수 있도록 했습니다.
고객 리스트
등록된 모든 고객의 정보를 조회할 수 있습니다. 고객의 아이디, 보유 포인트, 가입일, 관리자 여부를 확인할 수 있으며, 검색 기능을 통해 특정 고객을 빠르게 찾을 수 있습니다.
고객 기능
고객은 간편하게 상품을 구매하고 거래 내역을 확인할 수 있습니다.
상품 선택 및 구매
상품 선택 페이지에서는 모든 상품을 그리드 형태로 한눈에 볼 수 있습니다. 각 상품 카드에는 아이콘, 상품명, 가격, 국가 및 종류 정보가 표시되며, 재고가 있는 상품은 파란색 원형 배지에 재고 수량이 표시됩니다. 재고가 없는 상품은 "품절" 버튼으로 표시되어 구매할 수 없음을 명확히 알려줍니다.
구매 버튼을 클릭하면 구매 확인 모달이 표시됩니다. 보유 포인트, 구매 금액, 구매 후 잔액을 확인할 수 있으며, 포인트가 부족한 경우 경고 메시지가 표시됩니다.
포인트 충전
고객은 포인트 충전 버튼을 클릭하여 충전을 요청할 수 있습니다. 충전 요청 시 입금자명과 충전 금액을 입력하면, 시스템이 입금 계좌 정보를 제공합니다. 충전 요청이 성공적으로 등록되면 확인 모달이 표시되며, 고객이 제공된 계좌로 요청한 입금자명과 금액을 정확히 맞춰서 입금하면 시스템이 자동으로 입금 내역을 데이터베이스에 반영하고 포인트가 즉시 자동 충전됩니다. 관리자의 개입 없이도 실시간으로 처리되어 편리하게 이용할 수 있습니다.
구매 내역
구매 내역 페이지에서는 총 구매 건수, 총 구매 금액, 현재 포인트를 요약 카드로 확인할 수 있습니다. 상세 구매 내역 테이블에서는 구매한 상품의 이름, 금액, 종류, 국가, 구매 일시를 확인할 수 있습니다. 상품명을 클릭하면 클립보드에 자동으로 복사되어 편리하게 사용할 수 있습니다.
포인트 히스토리
모든 포인트 변동 내역을 확인할 수 있습니다. 일시, 유형(충전, 구매 등), 변동 금액, 변동 후 잔액, 설명을 한눈에 볼 수 있으며, 유형별로 필터링하여 조회할 수 있습니다.
개발 과정에서의 고민
재고 관리 시스템
여러 고객이 동시에 같은 상품을 구매하려고 할 때 발생할 수 있는 재고 충돌 문제를 해결하기 위해 다음과 같은 방식을 적용했습니다:
- 구매 시점에 데이터베이스 트랜잭션을 사용하여 재고 확인과 차감을 원자적으로 처리
- 재고가 부족한 경우 즉시 구매를 차단하여 오판매 방지
- 구매 완료 후 재고 상태를 실시간으로 업데이트하여 고객에게 정확한 재고 정보 제공
사용자 경험 최적화
고객이 쉽고 빠르게 상품을 구매할 수 있도록 다음과 같은 기능을 구현했습니다:
- 상품 카드에 재고 수량을 시각적으로 표시하여 구매 가능 여부를 즉시 파악
- 구매 확인 모달에서 포인트 부족 시 명확한 경고 메시지 표시
- 구매한 상품 정보를 클립보드에 한 번에 복사할 수 있는 기능 제공
- 모든 거래 내역을 투명하게 제공하여 고객이 신뢰할 수 있는 시스템 구축
관리자 워크플로우 최적화
관리자가 효율적으로 시스템을 운영할 수 있도록 다음과 같은 기능을 제공했습니다:
- 빈 행 일괄 생성 기능으로 대량의 상품을 빠르게 등록
- 드롭다운을 통한 데이터 입력으로 오타 방지 및 일관성 유지
- 재고 현황을 종류별, 국가별로 한눈에 확인할 수 있는 대시보드
- 충전 요청 수동 처리 시 모든 정보를 한 화면에서 확인하고 승인할 수 있는 모달
이 웹 기반 자동 판매 시스템은 상품 판매를 자동화하여 관리자의 업무 효율을 크게 향상시키고, 고객에게는 편리하고 투명한 구매 경험을 제공합니다. 비슷한 자동화 시스템이 필요하시다면 언제든지 문의해 주세요.