목차

낙찰

타이머

경매 프로세스

경매 서비스를 개발하였습니다.

경매에는 낙찰하는 시스템과, 타이머라는 시스템이 존재합니다. 낙찰하는 시스템은 사용자가 동시에 여러명이 낙찰하기 때문에 동시성의 문제가 있고, 타이머는 낙찰이 된 시점에 갱신해주어야되는 문제가 있습니다.

아래는 이러한 문제점을 어떻게 해결하는지 서술합니다.

낙찰

낙찰 시스템은 동시에 여러명이 있기 때문에 여러 가지 방안을 고민해보다가, 부하 테스트를 먼저 하였습니다. (artillery 사용) Spring API는 약 3만회 요청까지 거뜬히 동시성 문제가 일어나지 않았습니다. 경매 시스템을 이용하는 상점이 비교적 없을뿐더러, 시청자가 많지 않아 Lock 등을 설정하지 않았습니다. 그럼에도 불구하고 혹시 모를 상황을 대비해 금액과, 상품에 대한 데이터를 unique 키를 걸어놓아 해결하였습니다.

타이머

타이머는 소켓을 활용해 개발하였습니다. 방송에 대한 백엔드 플로우는 대략 API -> Redis -> Socket 입니다. 그리고 실시간 방송 시청자를 확인하기 위한 소켓(통칭 controll tower)이 따로 있었습니다. 그래서 낙찰 요청을 받으면 백엔드 플로우 처럼 API -> Redis -> Socket 으로 통해 controll tower에 도달하게 되어 controll tower 내부에서 타이머가 동작하도록 설계를 하였습니다. 여러 방송에서 경매를 진행할 수 있기 때문에 Timer를 캡슐화하고 타이머가 겹치지 않게 실행될 수 있도록 만들어주었습니다.