ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • e-커머스 서비스 동시성 문제와 극복
    항해 플러스 백엔드 5기 2024. 7. 22. 20:12

    e-커머스 서비스 동시성 문제를 해결하면서 알게 된 내용을 정리해보고자 한다.


    1. 동시성 문제란?

    • 여러 작업(프로세스, 스레드, 트랜잭션 등)이 수행되면서 하나의 공통 자원에 대해 동시에 접근할 때 발생하는 문제
    • Database 의 동일한 데이터에 동시에 여러 작업이 수행될 때, 의도하지 않은 작업 결과가 발생하는 경우를 의미한다.

    동시성 문제를 이해하기 위해 아래의 예시를 살펴보자.

     

    아래는 예시는 재고차감 시나리오이다.

    1. Request 1 주문 요청이 들어오고 상품의 데이터를 조회하여 상품의 갯수가 10개인걸 확인하고 재고를 하나 차감하여 상품의 재고가 9개가 남았음을 커밋을 시도하려고한다.
    2. Request 2 주문 요청이 들어오고 아직 Request 1 주문 요청에 대한 트랙잭션 커밋이 되기 전으로 상품의 갯수가 10개인걸 확인하고 재고를 하나 차감하여 9개의 재고가 남았음을 커밋을 시도한다. 
    3. 이러한 경우 실제 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
Designed by Tistory.