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

이 때, 경매는 사용자의 요청에 따라 마감 기한이 모두 다르기 때문에
마감된 경매를 서버에서 어떻게 감지하고, 이후 로직들을 실행할지 고민이었습니다.
스케쥴러를 통해 구현하면 진행중인 모든 경매를 정해진 주기마다 조회해 마감 기한이 현재 시간보다 이전인지 확인 후 처리합니다.
메시지 큐를 통해 구현하면 경매가 시작될 때 마감시간을 적어 지연 큐에 넣어두고, 마감 시간까지 지연 큐에서 붙잡고 있다 경매가 종료되면 메시지를 받아 처리합니다.
| Message Queue | 지연 큐 지원여부 | 메시지 처리 실패 재전송 가능 여부 |
|---|---|---|
| Kafka | X | ▵ |
| Redis | O | X |
| RabbitMQ | O | O |
| SQS | O | O |
메시지 처리 실패 시 재전송이 가능하고 지연 큐를 지원하는 RabbitMQ와 SQS 중 결정하려고 합니다.
우리 프로젝트의 요구 사항에 따르면 경매 마감 기한은 최대 24시간 후까지 설정할 수 있습니다.
RabbitMQ의 경우, 지연 큐로 최대 하루나 이틀까지 지연 가능하지만
SQS의 경우, 지연 큐로 최대 15분까지 지연되므로 알맞지 않았습니다.
그렇기 때문에 RabbitMQ를 사용해 구현하는 것으로 결정하였습니다.