경매 종료 로직 구현

na.ram·2024년 11월 6일

all in auction

목록 보기
1/14
post-thumbnail

우리 시스템은 경매 관련해 아래와 같은 플로우로 진행이 됩니다.

  1. 사용자가 경매를 시작한다.
    ▷ 경매를 시작할 때, 경매 마감 기한을 입력받는다.
  2. 경매 마감 기한에 따라 경매가 종료된다.
  3. 경매가 종료되면 최고 입찰자에게 입찰 알림을 보내고, 판매자에게 판매금을 입금해준다.

이 때, 경매는 사용자의 요청에 따라 마감 기한이 모두 다르기 때문에
마감된 경매를 서버에서 어떻게 감지하고, 이후 로직들을 실행할지 고민이었습니다.

Scheduler Vs. Message Queue

스케쥴러를 통해 구현하면 진행중인 모든 경매를 정해진 주기마다 조회해 마감 기한이 현재 시간보다 이전인지 확인 후 처리합니다.

메시지 큐를 통해 구현하면 경매가 시작될 때 마감시간을 적어 지연 큐에 넣어두고, 마감 시간까지 지연 큐에서 붙잡고 있다 경매가 종료되면 메시지를 받아 처리합니다.

Scheduler

  • 주기적으로 진행 중인 경매 전체를 조회하는 것은 비효율적
  • 주기를 짧게 설정하면 서버에 부하가 생길 수 있음
  • 주기를 길게 설정하면 경매에 따라 너무 늦게 끝날 가능성 있음

Message Queue

Message Queue지연 큐 지원여부메시지 처리 실패 재전송 가능 여부
KafkaX
RedisOX
RabbitMQOO
SQSOO

기술 결정

메시지 처리 실패 시 재전송이 가능하고 지연 큐를 지원하는 RabbitMQ와 SQS 중 결정하려고 합니다.

우리 프로젝트의 요구 사항에 따르면 경매 마감 기한은 최대 24시간 후까지 설정할 수 있습니다.
RabbitMQ의 경우, 지연 큐로 최대 하루나 이틀까지 지연 가능하지만
SQS의 경우, 지연 큐로 최대 15분까지 지연되므로 알맞지 않았습니다.

그렇기 때문에 RabbitMQ를 사용해 구현하는 것으로 결정하였습니다.

0개의 댓글