Giter Site home page Giter Site logo

mine's Introduction

header

About

  • Mine은 경매 서비스를 제공하기 위한 프로젝트입니다.
  • C2C 거래 형태를 지원합니다.
  • 상품을 구매하기 위해서는 입찰을 하고 낙찰되어야 합니다. 수동 입찰, 자동 입찰을 지원합니다.
  • 자동 입찰을 설정할 수 있습니다. 지불할 의사가 있는 최대 금액을 입력하면 사용자를 대신하여 증분 입찰가로 응찰합니다.

Prototype

카카오 오븐을 사용해서 제작한 화면 프로토타입입니다.
👉 More Info
프로토타입

System Design

Mine Cloud

Tech Stack

Java, Spring Boot, JPA, MariaDB, Redis
AWS: ECS, Fargate, EventBridge, Lambda, SES, S3, RDS

Functional Requirement

  • 회원가입
  • 로그인
  • 경매 생성
  • 경매 카탈로그 조회
  • Exception Handling
  • 수동 입찰
  • 자동 입찰 등록 / 자동 입찰
  • 입찰 증분 계산
  • 실시간 최고 입찰가
  • 경매 마감 일괄 처리

Non-Functional Requirement

  • 시스템에 의해 관리될 수 있는 자동 입찰은 경매 당 하나다.
  • 자동 입찰의 낙찰 우선순위를 보장한다.
  • 관리 중인 자동 입찰이 존재하는 상태에서 자동 입찰 등록이 요청될 경우, 기존 자동 입찰 한도와 신규 자동 입찰 한도를 비교해 관리할 자동 입찰을 선택한다.
  • 기존 자동 입찰의 한도가 높아서 신규 자동 입찰을 등록할 수 없는 경우, 등록은 하지 않지만 한도로 입찰한다. 한도로 입찰함으로써 최종 낙찰 금액을 높이고 경매 생성자와 기업의 이익을 최대화한다.
  • 최고 입찰가에 증분을 더한 금액 이상으로 다음 입찰을 수행한다. 1원 단위 입찰이 가능할 경우, 과도한 트래픽과 장난 입찰 발생 가능성이 증가한다.
  • 페이지 새로고침 없이 실시간으로 갱신되는 최고 입찰가를 통해 편의성을 제공하고 역동성을 부여해 경매의 묘미를 제공한다.
  • 경매는 자동으로 마감 처리되도록 한다. 경매가 마감되면 낙찰자에게 이메일 알림을 보낸다.

입찰(수동 입찰/자동 입찰 등록/자동 입찰)

Facade

  • ‘수동 입찰’, ‘자동 입찰 등록’은 사용자가 요청한다.
  • ‘자동 입찰’은 수동 입찰 요청, 자동 입찰 등록 요청에 의해 함께 수행된다.
  • 자동 입찰 등록 시 지불할 의사가 있는 최대 금액을 입력하면 사용자를 대신해 증분 입찰가로 응찰한다.
  • 자동 입찰 등록 과정에서 신규 자동 입찰, 기존 자동 입찰에 대한 입찰이 수행될 수 있으며 입찰 금액을 기반으로 재산정한 증분 입찰가와 한도를 비교해 등록 여부를 결정한다.

입찰 Swimlane Diagram

입찰 가능한 시간/금액 확인

validation

자동 입찰 등록 요청

  • ‘증분 입찰가’란 입찰 금액에 일정 증분을 더한 금액이다. (증분 입찰가 = 입찰 가능한 최소 금액)

AutoBidRegister

수동 입찰 요청

ManualBid

입찰 Class Diagram

BidClassDiagram

  • ManualBidServiceImpl(수동 입찰), AutoBidRegisterServiceImpl(자동 입찰 등록), AutoBidServiceImpl(자동 입찰) 클래스는 입찰 관련 비즈니스 로직을 포함한다.
  • AbstractBid 추상 클래스는 3가지 입찰 관련 클래스의 공통 멤버를 관리해 중복을 제거한다.
  • AbstractBidRequest 추상 클래스는 사용자가 요청하는 수동 입찰, 자동 입찰 등록을 처리하는 2가지 클래스의 공통 멤버를 관리해 중복을 제거한다.
  • 3가지 입찰 관련 클래스에서 각 클래스 고유 멤버는 개별 인터페이스에 정의해 관리한다.

Template

  • 입찰은 부가 기능을 제외하면 총 3가지 단계로 구성되며, 이를 템플릿화한 입찰 메서드를 사용한다.
  • 템플릿 메서드 내에서 호출하는 메서드는 필요에 따라 Overriding한다.

실시간 최고 입찰가

websocket

  • 경매 카탈로그 조회 시 WebSocket 연결 설정, 경매 Topic 구독을 수행한다.
  • 입찰 요청 시 최고 입찰가 정보를 포함한 메시지를 Redis Pub/Sub ‘highest_bid’ Topic에 게시한다.
  • ‘highest_bid’ Topic을 구독하는 모든 서버에 메시지를 전달한다.
  • 메시지를 전달 받은 각 서버는 In-memory Message Broker를 통해 WebSocket 연결이 설정된 클라이언트 측으로 메시지를 전달한다.

입찰 증분 계산

increment

  • 입찰이 수행될 때마다 입찰 금액을 기반으로 증분 입찰가(입찰 가능한 최소 금액)를 재산정한다.
  • 입찰 금액이 800만 원일 경우 증분 입찰가는 815만 원이다.

result

incrementCalc

  • JMH(Java Microbenchmark Harness)를 이용한 메서드 성능 측정 결과에 기반해 입찰 증분을 구하기 위한 5가지 방법 중 If문을 사용한다.
  • 백분율 계산은 기본적으로 O(1) 상수 시간에 계산되며 입찰 금액이 속하는 범위를 찾을 필요가 없기 때문에 입찰 증분을 가장 빠르게 구할 수 있다. 그러나 입찰 금액이 높아질수록 필요 이상으로 입찰 증분이 높아져 적정 증분을 구할 수 없다고 판단해 사용하지 않는다.

mine's People

Contributors

leeseowoo avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.