중고 물품 경매 서비스, Palgona
중고로 물품을 판매할 때 가격 측정에 어려움도 있고 한 사람이 여러 사람에게 동시에 구매 약속을 잡는 문제가 있었습니다. 저희 Palgona 서비스를 사용하면 중고 물품을 적정한 가격에 쉽게 경매를 통해 판매가 가능합니다.


입찰 시도가 많이 발생할텐데 DB 레코드 수준(SELECT FOR UPDATE)에서 락을 걸면 DB 부하가 크다고 생각했습니다.

유저 잔액을 갱신이 발생하는 트랜잭션은 총 6개. (입찰 포함)
-> Pessimistic Lock을 활용하여 동시성 제어
- 입찰 시간이 종료되기 직전에 입찰 시도 요청이 들어온다.
- 입찰 트랜잭션이 끝나기 전에 입찰 만료 시간이 지나고 입찰 만료 확인 트랜잭션(cron Job)이 시작된다.
- 마지막 입찰자의 입찰가 갱신이 분실된다.
조회 성능 때문에 입찰가를 반정규화한 위와 같은 문제가 발생했습니다.
이를 해결하기 위해 입찰 기간 만료 TX를 시작하기 전에도 분산락을 잡음으로써 Lost Update 문제를 해결할 수 있었습니다.
- 입찰가 반정규화 및 쿼리, 인덱스 튜닝으로 상품 조회 성능 개선
- Kakao Oauth 로그인 기능 구현
- Docker & GitHub Actions를 활용하여 CICD 파이프라인 구축