어떤 물건이든 상관없이 누구나 경매 개설 및 참여할 수 있는 프로젝트입니다.
🖍️ 판매자/구매자 나누지 않고 모든 사용자는 경매 상품을 등록할 수 있다.
🖍️ 경매 상품은 상품 이름, 설명, 시작 가격, 상품 이미지, 경매 시작일, 종료일을 가진다.
🖍️ 경매 상품은 시작, 진행중, 종료 총 3가지의 상태를 가진다.
🖍️ 사용자는 경매 상품을 정렬 또는 필터링을 통해 상품을 조회할 수 있다.
🖍️ 사용자는 본인이 보유하고 있는 포인트 한도 내에서 입찰을 시도할 수 있으며 입찰 시 포인트를 지불한다.
🖍️ 입찰이 실패하거나, 더 높은 금액을 제시한 다른 사용자가 나타날 경우, 해당 포인트를 환불받을 수 있습니다.
🖍 사용자는 특정 상품을 구독하여 최고가 변경 시 알림을 받을 수 있다.
🖍 Spring Rest Docs를 활용하여 API 문서화
🖍️ 사용자들이 경매 상품을 입찰할 때 나이, 성별, 입찰 가격, 입찰 성공 여부를 로깅으로 남기고, 해당 데이터를 기반으로 사용자들에게 경매 상품을 추천해준다.
🖍️ 입찰 뿐만 아니라 해당 사용자의 낙찰 정보도 참고하여 상품을 추천한다.
여러 사용자들의 입찰 요청이 같은 시점에 발생하여 트랜잭션이 거의 동시에 진입되면서 가격 유효성 검사를 위해 최고가를 조회 했을 때 해당 트랜잭션 단위에서 최고가 조회값이 같게 나오는 경우 처리하는 순서에 따라서
최고가가 정상적으로 수정되지 않는 동시성 문제가 발생.
Redisson Lock 분산락을 사용하여 동시성 문제를 해결
사용자들이 보유한 포인트 한도 내에서 여러 경매에 입찰을 시도하고 낙찰을 받으면 상품을 결제할 때 포인트 부족문제가 발생할 수 있다고 생각했습니다.
정책적으로 입찰을 시도할 때 포인트를 선지불하고 실패를 하면 다시 돌려받도록 해줌으로써 해결했습니다.
작성 진행중