작업환경 세팅
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
동시성이슈 해결방법 3가지
- Synchronized 이용하기
- 서버가 여러 대라면 데이터 접근을 여러군데서 하게 되는 문제점 발생
- ex) 서버1이 데이터를 갱신했는데 서버2가 갱신 전 데이터를 갱신할 때
- 서버가 여러 대라면 데이터 접근을 여러군데서 하게 되는 문제점 발생
- 데이터베이스 이용하기
- Pessimistic Lock 활용
- Optimistic Lock 활용
- Named Lock 활용
- Redis 이용하기
- Lettuce를 작성하여 재고감소 로직 작성
- 간단한 구현
- 재시도가 필요하지 않은 lock은 lettuce를 활용
- Redisson을 활용하여 재고로직 작성
- pub-sub 방식으로 구현됨
- Lettuce와 비교했을 때 redis에 부하가 덜 간다.
- 재시도가 필요한 경우에는 redisson를 활용
- Lettuce를 작성하여 재고감소 로직 작성
참고 👇
반응형
'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 |