← 포트폴리오 목록

상품권 안심 구매 플랫폼

모바일 상품권 구매 플랫폼의 요구사항(다중 결제 수단 연동, 회원등급별 구매 권한, 상품권 재고 암호화 저장)을 기반으로 직접 구현한 프로젝트입니다.

결제 금액 위변조 방지 검증 로직 구현클라이언트 요청 금액과 서버 주문 원장을 대조하는 이중 검증 계층 설계, 불일치 시 결제 즉시 차단
회원등급 4단계 접근 제어 체계 구축라우트·API·UI 3중 권한 검증으로 비승인·카드승인·승인·비즈 회원별 구매 가능 범위 분리
상품권 재고 암호화 저장 구조 설계AES 기반 상품권 번호 암호화 저장, SQLi·웹쉘 공격 시나리오에서도 평문 노출을 차단하는 구조 적용
서비스 타입Web
업종물류 시스템
기술 스택
ReactTypeScriptTailwind CSSNode.jsExpressPostgreSQLPrismaJWT
주요 기능
  • 상품권 목록·검색 탐색
  • 다중 결제 수단 연동 결제
  • 회원등급별 구매 권한 제어
  • 상품권 재고 암호화 관리
Overview

프로젝트 개요

범위: 개발, 디자인, 기획

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

작업 범위

  • 상품권 목록·검색 탐색: 사용자가 카테고리·가격대·브랜드 조건으로 상품권을 필터링하고 검색해 탐색할 수 있는 메인 화면
  • 다중 결제 수단 연동 결제: 계좌이체·신용카드·휴대폰·토스 간편결제 중 선택해 결제를 진행하는 화면
  • 회원등급별 구매 권한 제어: 비승인·카드승인·승인·비즈 4단계 회원등급에 따라 구매 가능 범위와 상품권 확인 권한이 달라지는 마이페이지 화면
  • 상품권 재고 암호화 관리: 관리자가 상품권 재고를 등록·소진 추적하고, 저장된 상품권 번호는 암호화된 마스킹 상태로만 조회할 수 있는 화면

주요 업무

  • 상품권 목록·검색 탐색 화면: React Query 기반 카드 그리드 + debounce 검색 + URL 쿼리 동기화 필터 상태 관리
  • 다중 결제 수단 연동 결제 화면: 결제 수단별 한도(카드·휴대폰 100만원) 검증 + 클라이언트-서버 금액 대조 미들웨어
  • 회원등급별 구매 권한 제어 화면: 로그인 시 알림톡 기반 OTP 인증 + 역할 기반 접근제어(RBAC) 미들웨어
  • 상품권 재고 암호화 관리 화면: 상품권 번호 컬럼 암호화 저장 + 관리자 조회 시에만 복호화하는 접근 계층 분리
상품권 안심 구매 플랫폼
요구사항 정의

프로젝트 핵심 과제

프로젝트 진행 시 해결한 핵심 기술 과제입니다.

결제 수단(계좌·카드·휴대폰·토스)별로 상이한 한도·수수료 정책을 단일 결제 플로우에서 일관되게 처리하는 로직 설계

상품권 번호를 암호화 저장하면서도 구매 즉시 조회 가능해야 하는 암복호화 성능과 보안의 균형 설계

가상계좌 입금 웹훅이 지연·중복 수신될 경우 주문 상태가 이중 반영되지 않

멱등성 처리 필요

회원등급별 구매 권한이 결제 시점에 실시간으로 재검증되지 않으면 등급 강등 후에도 구매가 가능한 레이스 컨디션 위험

구현 내용

핵심 기능 상세

핵심 기능 1

상품권 목록·검색 탐색

사용자가 카테고리·가격대·브랜드 조건으로 상품권을 필터링하고 검색해 탐색할 수 있는 메인 화면. React Query 기반 카드 그리드 + debounce 검색 + URL 쿼리 동기화 필터 상태 관리.

  • Intersection Observer 기반 무한스크롤 카드 그리드 구현
  • Debounced 검색 입력 + 필터 조건 URL 쿼리 동기화로 결과 공유 가능
  • React Query staleTime 분리로 상품 목록 캐싱 전략 설계

상품 탐색 상태(검색어·필터·정렬)를 URL과 동기화하는 구조를 설계하여 새로고침·공유 시에도 탐색 맥락이 유지되도록 구현합니다.

상품권 목록·검색 탐색
상품권 목록·검색 탐색 실제 화면
핵심 기능 2

다중 결제 수단 연동 결제

계좌이체·신용카드·휴대폰·토스 간편결제 중 선택해 결제를 진행하는 화면. 결제 수단별 한도(카드·휴대폰 100만원) 검증 + 클라이언트-서버 금액 대조 미들웨어.

  • 결제 수단별 요청 스키마를 분리한 어댑터 패턴으로 API 연동 구조 설계
  • 주문 생성 시점 금액과 결제 요청 금액을 서버에서 재대조하는 검증 계층 구현
  • 가상계좌 발급 시 PG 웹훅 서명 검증 후 입금 상태 비동기 반영 처리

결제 요청 금액을 클라이언트 값이 아닌 서버 주문 원장 기준으로 재계산·대조하여 금액 위변조 시도를 결제 승인 이전 단계에서 차단하는 구조를 구현합니다.

다중 결제 수단 연동 결제
다중 결제 수단 연동 결제 실제 화면
핵심 기능 3

회원등급별 구매 권한 제어

비승인·카드승인·승인·비즈 4단계 회원등급에 따라 구매 가능 범위와 상품권 확인 권한이 달라지는 마이페이지 화면. 로그인 시 알림톡 기반 OTP 인증 + 역할 기반 접근제어(RBAC) 미들웨어.

  • 4단계 회원등급을 역할(role) 클레임으로 JWT에 포함해 라우트별 권한 검증
  • 로그인 시 알림톡 OTP 인증 플로우 구현, 인증 실패 시 재발송 제한 적용
  • 비밀번호 정책(특수문자 포함 8자리 이상) 검증 및 아이디/비밀번호 찾기 플로우 구현

회원등급 배지를 UI에 노출해 현재 권한 범위(구매 가능 상품권·확인 가능 여부)를 시각적으로 표시하고, API 단에서도 동일 등급 기준을 재검증하는 이중 권한 체계를 구현합니다.

회원등급별 구매 권한 제어
회원등급별 구매 권한 제어 실제 화면
핵심 기능 4

상품권 재고 암호화 관리

관리자가 상품권 재고를 등록·소진 추적하고, 저장된 상품권 번호는 암호화된 마스킹 상태로만 조회할 수 있는 화면. 상품권 번호 컬럼 암호화 저장 + 관리자 조회 시에만 복호화하는 접근 계층 분리.

  • 상품권 번호를 AES 기반으로 암호화 저장, 목록 화면에서는 마스킹된 값만 노출
  • 재고 소진 시 자동 품절 처리 + 임계 수량 미만 시 관리자 알림 트리거
  • 발권 API 연동을 고려한 재고 소스(수동 등록/API 연동) 구분 필드 설계

상품권 번호는 저장 단계부터 암호화되어 SQL 인젝션·웹쉘 공격이 발생해도 평문이 노출되지 않는 구조로 설계하며, 관리자 화면에는 암호화 상태를 나타내는 잠금 배지를 표시합니다.

상품권 재고 암호화 관리
상품권 재고 암호화 관리 실제 화면
구현 과정

프로젝트 진행 단계

STEP 1

상품권 구매 플로우 요구사항 분석 및 ERD 설계 · 2026.09

상품·주문·결제·회원등급 테이블 12개 설계, 결제수단별 스키마 분리 및 관계 매핑

STEP 2

결제 수단 연동 및 API 개발 · 2026.09

Express 기반 계좌·카드·휴대폰·토스 결제 API 구현, 웹훅 서명 검증 미들웨어 적용

STEP 3

사용자 구매 화면 및 회원등급 UI 개발 · 2026.09

React 기반 상품목록·상세·장바구니·마이페이지 구현, 등급별 접근 제어 컴포넌트 설계

STEP 4

재고 암호화 및 통합 테스트 · 2026.09

상품권 재고 암호화 저장 적용, 결제-재고 연동 통합 테스트 및 크로스 브라우저 검증

프로젝트 성과

주요 성과

결제 금액 위변조 방지 검증 로직 구현클라이언트 요청 금액과 서버 주문 원장을 대조하는 이중 검증 계층 설계, 불일치 시 결제 즉시 차단
회원등급 4단계 접근 제어 체계 구축라우트·API·UI 3중 권한 검증으로 비승인·카드승인·승인·비즈 회원별 구매 가능 범위 분리
상품권 재고 암호화 저장 구조 설계AES 기반 상품권 번호 암호화 저장, SQLi·웹쉘 공격 시나리오에서도 평문 노출을 차단하는 구조 적용
가상계좌 웹훅 기반 입금 자동 반영 구현PG 웹훅 수신 시 서명 검증 후 주문 상태를 실시간 갱신하는 비동기 처리 파이프라인 설계
Highlights

기술적 주안점

  • 상품 탐색 상태(검색어·필터·정렬)를 URL과 동기화하는 구조를 설계하여 새로고침·공유 시에도 탐색 맥락이 유지되도록 구현합니다
  • 결제 요청 금액을 클라이언트 값이 아닌 서버 주문 원장 기준으로 재계산·대조하여 금액 위변조 시도를 결제 승인 이전 단계에서 차단하는 구조를 구현합니다
  • 회원등급 배지를 UI에 노출해 현재 권한 범위(구매 가능 상품권·확인 가능 여부)를 시각적으로 표시하고, API 단에서도 동일 등급 기준을 재검증하는 이중 권한 체계를 구현합니다

유사한 프로젝트를 기획하고 계신가요?

FIRSTPIP이 개발 범위와 로드맵을 함께 정리해드립니다

무료 상담 시작하기