모바일 상품권 구매 플랫폼의 요구사항(다중 결제 수단 연동, 회원등급별 구매 권한, 상품권 재고 암호화 저장)을 기반으로 직접 구현한 프로젝트입니다.
모바일 상품권 구매 플랫폼의 요구사항(다중 결제 수단 연동, 회원등급별 구매 권한, 상품권 재고 암호화 저장)을 기반으로 직접 구현한 프로젝트입니다. React와 Express·PostgreSQL 기반으로 상품 탐색부터 결제, 주문 확인까지 이어지는 구매 플로우를 구현했습니다.
작업 범위
주요 업무




멱등성 처리 필요
사용자가 카테고리·가격대·브랜드 조건으로 상품권을 필터링하고 검색해 탐색할 수 있는 메인 화면. React Query 기반 카드 그리드 + debounce 검색 + URL 쿼리 동기화 필터 상태 관리.
상품 탐색 상태(검색어·필터·정렬)를 URL과 동기화하는 구조를 설계하여 새로고침·공유 시에도 탐색 맥락이 유지되도록 구현합니다.


계좌이체·신용카드·휴대폰·토스 간편결제 중 선택해 결제를 진행하는 화면. 결제 수단별 한도(카드·휴대폰 100만원) 검증 + 클라이언트-서버 금액 대조 미들웨어.
결제 요청 금액을 클라이언트 값이 아닌 서버 주문 원장 기준으로 재계산·대조하여 금액 위변조 시도를 결제 승인 이전 단계에서 차단하는 구조를 구현합니다.


비승인·카드승인·승인·비즈 4단계 회원등급에 따라 구매 가능 범위와 상품권 확인 권한이 달라지는 마이페이지 화면. 로그인 시 알림톡 기반 OTP 인증 + 역할 기반 접근제어(RBAC) 미들웨어.
회원등급 배지를 UI에 노출해 현재 권한 범위(구매 가능 상품권·확인 가능 여부)를 시각적으로 표시하고, API 단에서도 동일 등급 기준을 재검증하는 이중 권한 체계를 구현합니다.


관리자가 상품권 재고를 등록·소진 추적하고, 저장된 상품권 번호는 암호화된 마스킹 상태로만 조회할 수 있는 화면. 상품권 번호 컬럼 암호화 저장 + 관리자 조회 시에만 복호화하는 접근 계층 분리.
상품권 번호는 저장 단계부터 암호화되어 SQL 인젝션·웹쉘 공격이 발생해도 평문이 노출되지 않는 구조로 설계하며, 관리자 화면에는 암호화 상태를 나타내는 잠금 배지를 표시합니다.


상품·주문·결제·회원등급 테이블 12개 설계, 결제수단별 스키마 분리 및 관계 매핑
Express 기반 계좌·카드·휴대폰·토스 결제 API 구현, 웹훅 서명 검증 미들웨어 적용
React 기반 상품목록·상세·장바구니·마이페이지 구현, 등급별 접근 제어 컴포넌트 설계
상품권 재고 암호화 저장 적용, 결제-재고 연동 통합 테스트 및 크로스 브라우저 검증