DB

재고시스템으로 알아보는 동시성이슈 해결방법

잔망루피 2023. 4. 30. 23:17
반응형

작업환경 세팅

1. docker 설치

brew install docker
brew link docker
docker version

 

2. MySQL 설치 및 실행

docker pull mysql
docker run -d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=1234 --name mysql mysql
docker ps

만약 docker: no matching manifest for linux/arm64/v8 in the manifest list entries. 에러가 발생한다면, docker pull --platform linux/x86_64 mysql 

이 에러는 Mac, Windows를 사용하는 사람끼리 협업할 때 발생하는 문제다.

 

3. MySQL 데이터베이스 생성

docker exec -it mysql bash
mysql -u root -p
create database stock_example;
use stock_example;

 

 

재고시스템으로 알아보는 동시성이슈 해결방법 GitHub Repository

https://github.com/sangyongchoi/stock-example

 

GitHub - sangyongchoi/stock-example

Contribute to sangyongchoi/stock-example development by creating an account on GitHub.

github.com

 

 

동시성이슈 해결방법 3가지

  1. Synchronized 이용하기
    • 서버가 여러 대라면 데이터 접근을 여러군데서 하게 되는 문제점 발생
      • ex) 서버1이 데이터를 갱신했는데 서버2가 갱신 전 데이터를 갱신할 때
  2. 데이터베이스 이용하기
    • Pessimistic Lock 활용
    • Optimistic Lock 활용
    • Named Lock 활용
  3. Redis 이용하기
    • Lettuce를 작성하여 재고감소 로직 작성
      • 간단한 구현
      • 재시도가 필요하지 않은 lock은 lettuce를 활용
    • Redisson을 활용하여 재고로직 작성
      • pub-sub 방식으로 구현됨
      • Lettuce와 비교했을 때 redis에 부하가 덜 간다.
      • 재시도가 필요한 경우에는 redisson를 활용

 

 


참고 👇

https://www.inflearn.com/course/%EB%8F%99%EC%8B%9C%EC%84%B1%EC%9D%B4%EC%8A%88-%EC%9E%AC%EA%B3%A0%EC%8B%9C%EC%8A%A4%ED%85%9C/dashboard

 

재고시스템으로 알아보는 동시성이슈 해결방법 - 인프런 | 강의

동시성 이슈란 무엇인지 알아보고 처리하는 방법들을 학습합니다., - 강의 소개 | 인프런

www.inflearn.com

 

반응형

'DB' 카테고리의 다른 글

Sharding  (0) 2022.10.17
SQL Injection  (0) 2022.08.30
인덱스  (0) 2022.07.24
[Error] ERR wrong number of arguments for 'zrangebyscore' command  (0) 2022.07.23
[ERROR] java.sql.SQLException: Field 'title' doesn't have a default value  (0) 2021.11.21