쇼핑몰의 구매 이력 확인 후 구매 가능하도록 하는 기초 코딩
페이지 정보
본문
| AI 도구 | Gemini |
|---|---|
| 프롬프트 | 구매이력이 있는 사람만 구매가 가능하도록 프로그래밍 하는 법을 알려줘 |
쇼핑몰에서 구매 기록이 있는 사람만 특정 상품을 구매할 수 있도록 프로그래밍하려면, 사용자가 상품을 장바구니에 담거나 결제를 시도하는 시점에 **'구매 자격'**을 확인하는 로직을 추가해야 합니다.
가장 좋은 프로그래밍 방식은 다음과 같이 크게 세 단계로 구성할 수 있습니다.
1. 데이터베이스 설계 및 확인 (Data Modeling & Check)
구매 제한 기능을 구현하기 위해서는 사용자의 구매 기록을 저장하고 효율적으로 검색할 수 있는 데이터베이스 구조가 필수입니다.
???? 핵심 데이터 확인
사용자 데이터 (Users Table):
user_id (고유 식별자)
username 또는 email 등
주문 데이터 (Orders Table):
order_id (고유 식별자)
user_id (어떤 사용자가 구매했는지)
order_status (주문 상태: '결제 완료', '배송 완료' 등)
order_date
주문 상세/아이템 데이터 (Order_Items Table):
order_item_id (고유 식별자)
order_id (어떤 주문에 속하는지)
product_id (구매한 상품)
quantity
???? 자격 확인 로직
특정 상품(P)을 구매하려는 사용자(U)의 구매 자격은 데이터베이스에서 다음과 같은 쿼리로 확인합니다.
**사용자 U**의 user_id를 찾습니다.
Order_Items 테이블에서 해당 user_id와 연관된 Orders 테이블을 참조하여, 유효한 주문(order_status가 '결제 완료' 등인) 기록이 최소 1개 이상 있는지 확인합니다.
$$\text{SELECT COUNT(O.order\_id) FROM Orders O JOIN Users U ON O.user\_id = U.user\_id} \text{ WHERE U.user\_id = [현재 사용자 ID] AND O.order\_status \in ('Completed', 'Shipped')}$$
만약 특정 상품을 구매한 기록이 필요한 경우, Order_Items 테이블까지 조인해서 확인합니다.
2. 핵심 로직 구현: '자격 검증' 기능
구매 제한은 사용자가 상품을 구매하는 결정적인 단계에서 이루어져야 합니다. 이 기능을 수행하는 별도의 함수나 모듈을 만드는 것이 효율적입니다.
???? 자격 검증 함수
다음과 같은 함수를 구현합니다.
Python
# 가상 함수 (Python 예시) def check_purchase_eligibility(user_id):
""" 사용자의 전체 구매 이력을 확인하여 구매 자격 여부를 반환합니다.
(예: 1회 이상 유효한 구매 기록이 있으면 True)
""" # 1. 데이터베이스 연결 및 쿼리 실행
# 2. user_id를 기반으로 Orders 테이블에서 '결제 완료' 등의 유효한 주문 건수를 확인
purchase_count = db_query("SELECT COUNT(*) FROM Orders WHERE user_id = ? AND status = 'Completed'", user_id)
if purchase_count > 0: return True # 구매 기록 있음
else: return False # 구매 기록 없음
3. 적용 단계: 사용자 여정별 제어
자격 검증 함수(check_purchase_eligibility)를 사용자 경험의 여러 단계에 적용하여 구매를 제어합니다.
A. 상품 상세 페이지 (Product Page)
적용: 사용자(U)가 제한 상품의 상세 페이지를 방문했을 때, check_purchase_eligibility(user_id)를 실행합니다.
결과:
자격 O: 평소처럼 '장바구니 담기' 또는 '바로 구매' 버튼을 보여줍니다.
자격 X: 버튼을 숨기거나 비활성화하고, "구매 이력이 있는 고객만 구매 가능합니다"와 같은 안내 메시지를 표시합니다.
B. 장바구니/카트 (Shopping Cart)
적용: 상품을 장바구니에 담는 API 엔드포인트 또는 장바구니 확인 페이지에서 검증 로직을 실행합니다.
결과:
자격 X인 사용자가 제한 상품을 담으려고 할 경우, **"자격이 부족하여 담을 수 없습니다"**라는 에러 메시지를 반환합니다.
C. 결제 직전 (Checkout Process) ???? (가장 중요)
적용: 사용자가 모든 정보를 입력하고 최종 '결제하기' 버튼을 눌렀을 때, 서버 측에서 check_purchase_eligibility(user_id)를 반드시 다시 한 번 실행해야 합니다.
이유: 클라이언트 측(브라우저)의 제어는 우회될 수 있으므로, 서버 측의 최종 검증이 보안상 필수입니다.
결과:
자격 X: 결제를 **취소(Abort)**하고 사용자에게 **"구매 자격이 확인되지 않아 결제를 진행할 수 없습니다"**라는 에러를 반환합니다.
---
로직은 그럴듯하네요..