redis 2

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

오늘은 동시성 이슈를 해결하는 과정에 대해서 포스팅하려고 합니다. 재고 시스템을 통해 Application Level에서 문제를 해결하는 방안, Database가 제공하는 Lock을 이용해서 문제를 해결하는 방안, Redis의 Lettuce, Redisson을 활용하는 방안에 대해서 설명드리겠습니다. domain은 간단하게 재고 갯수, version 정보(Optimistic Lock을 적용하기 위함)가 담겨있고, 재고 개수를 감소시키는 decrease 메서드 Stock 클래스로 구성되어 있습니다. service는 domain에서 재고 개수를 감소시키는 decrease 메서드를 호출하는 비즈니스 로직으로 구성되어 있습니다. 이제 multi-thread 환경에서 동시에 100개의 요청을 보냈을 때의 발생하는..

Java/Spring 2023.09.19

[DB] Redis란 무엇인가?

Redis(Remote Dictionary System) "key-value" 구조의 비정형 데이터를 저장하고 관리하기 위한 오픈 소스기반의 비관계형 데이터베이스 관리 시스템 in-memory 데이터 저장소(RAM)로서 모든 데이터를 메모리에 올려둡니다. (caching) 평균 작업 속도가 1ms로 굉장히 빠른 편이며, 초당 수백만 건의 작업이 가능합니다.(지연시간 감소, 처리량 증가) (caching) Scale-up, Scale-out, Replication, Sharding 기능 지원 Scale-up: 동일 서버 하드웨어에 컴퓨팅 자원(CPU, Memory)을 추가(서버 성능 향상) Scale-out: 서버를 여러 대 추가하여 시스템 확장(서버 성능 향상) Replication: 동일 데이터를 다수..

Database 2023.09.08