-
e-커머스 서비스 동시성 문제와 극복항해 플러스 백엔드 5기 2024. 7. 22. 20:12
e-커머스 서비스 동시성 문제를 해결하면서 알게 된 내용을 정리해보고자 한다.
1. 동시성 문제란?
- 여러 작업(프로세스, 스레드, 트랜잭션 등)이 수행되면서 하나의 공통 자원에 대해 동시에 접근할 때 발생하는 문제
- Database 의 동일한 데이터에 동시에 여러 작업이 수행될 때, 의도하지 않은 작업 결과가 발생하는 경우를 의미한다.
동시성 문제를 이해하기 위해 아래의 예시를 살펴보자.
아래는 예시는 재고차감 시나리오이다.
- Request 1 주문 요청이 들어오고 상품의 데이터를 조회하여 상품의 갯수가 10개인걸 확인하고 재고를 하나 차감하여 상품의 재고가 9개가 남았음을 커밋을 시도하려고한다.
- Request 2 주문 요청이 들어오고 아직 Request 1 주문 요청에 대한 트랙잭션 커밋이 되기 전으로 상품의 갯수가 10개인걸 확인하고 재고를 하나 차감하여 9개의 재고가 남았음을 커밋을 시도한다.
- 이러한 경우 실제 2개의 상품이 판매 되었으나 DB에는 9개의 재고가 남아있다는 정보가 저장되어 동시성 문제가 발생 할 수 있다.
2. e-커머스 서비스에서 발생할 수 있는 동시성 문제
크게 아래의 두가지 경우에 대해서 동시성 문제가 발생할 수 있다.
- 유저의 포인트 충전 또는 차감하는 경우
- 상품 주문시 상품의 재고 차감 및 복원하는 경우
3. 동시성 문제 해결
3-1. 유저의 포인트 충전 또는 차감하는 경우
💵 사용자 포인트 충전 API
- 프론트 또는 앱 단에서 의도치 않게 포인트 충전이 두번 이상 요청된 경우의 상황에서 동시성 문제가 발생할 수 있다고 생각했다.
- 위와 같은 시나리오 기준으로 낙관적 락 방식을 적용하여 동시의 요청 중 하나의 요청만 성공하도록하여 해결하였다.
3-2. 상품 주문시 상품의 재고 차감 및 복원하는 경우
📦 상품 주문 결제 API
- 하나의 상품에 대해서 동시에 다양한 사용자가 주문 요청을 하는 경우 상품 재고 차감에 대한 동시성 문제가 발생할 수 있다고 생각했다.
- 위와 같은 시나리오 기준으로 여러 주문에 대해 순차적으로 데이터 일관성을 보장하기 위해 비관적 락을 적용하여 모든 주문에 대해서 순차적으로 처리할 수 있도록 처리하였다.
4. 동시성 제어 방식의 장단점
동시성을 해결하기 위해 비관적 락과 낙관적 락을 구현해보았고 아래와 같이 표에 장단점을 작성하였다.
동시성 제어 방식 장점 단점 적용 케이스 비관적 락 데이터 일관성 보장 성능 저하, 데드락 가능성 충돌의 빈도가 많은 경우, 동시 요청에서 순차로 진행될 때 성공할 수 있는 요청에 성공시키는 케이스 낙관적 락 충돌이 적은 경우 성능이 좋다. 충돌 발생 시 롤백 비용, 빈번한 충돌 시 성능 저하 충돌 빈도가 적은 경우, 동시 요청 중 한건만 성공해야하는 케이스 '항해 플러스 백엔드 5기' 카테고리의 다른 글
적은 부하로 트래픽 처리하기 (0) 2024.07.29 6주차 회고노토 (0) 2024.07.27 5주차 회고노트 (0) 2024.07.21 1 ~ 5주차 서버구축 챕터 회고록 (0) 2024.07.19 4주차 회고노트 (0) 2024.07.13