본문 바로가기

전체 글

(11)
레디스를 활용한 동시성 문제 해결 Lettuce vs Redisson 레디스를 활용하여 동시성 문제를 해결할 때 사용하는 대표적인 두 가지- Lettuce- Redisson    Lettucesetnx 명령어를 활용하여 분산락 구현set if not exist의 줄임말로 키와 밸류를 set 할 때 기존의 값이 없을 때만 set 하는 명령어이다.spinLock방식이므로 retry 로직을 개발자가 작성해주어야 한다.♚ spin Lock이란?락을 획득하려는 스레드가 락을 사용할 수 있는지 반복적으로 확인하면서 락 획득을 시도하는 방식이다. 락이 해제될 때까지 계속해서 시도하므로, 락을 빠르게 획득할 수 있지만 시스템에 부하를 줄 수 있다. 적용 코드 ) Redissonpub/sub 기반으로 lock 구현 제공Pub/Sub 방식: 채널을 하나 만들고 락을 점유 중인 스레드가 락을..
레이스 컨디션 레이스 컨디션레이스 컨디션이란 컴퓨터 프로그램에서 동시에 실행되는 여러 프로세스나 스레드가 서로의 작업을 예상하지 못하고 경쟁하는 상황을 말한다. 이로 인해 프로그램의 동작이 예기치 않게 변할 수 있다. 표를 보고 쉽게 이해해 보자. Thread1StockThread2select *from stockwhere id = 1{id : 1, quantity : 5 } update set quantity = 4from stockwhere id = 1{id : 1, quantity : 4 }  {id : 1, quantity : 4 }select *from stockwhere id = 1 {id : 1, quantity : 3 }update set quantity = 3from stockwhere id = 1 예..
동시성 이슈 트러블 슈팅(작성중) 재고시스템 구현중, 주문서비스 로직에서 동시성 오류가 발생하였다.예를 들어, 재고가 100개인 상황에서 100개의 주문을 동시에 요청했을 때, 모든 재고가 완전히 소진되지 않는 상황이 발생했다.왜?레이스컨디션이 일어났기 때문이다. 레이스컨디션이란 둘 이상의 Thread가 공유 데이터에 액세스할 수 있고 동시에 변경을 하려고할 때 발생하는 문제이다. 그럼 내 프로젝트에선 왜 레이스 컨디션이 일어나는가?-> A와 B가 동시에 주문을 요청했을 때, 재고 수량 갱신이 누락되는 문제가 발생할 수 있다. 예상으로는 A의 주문에 맞춰 재고수량이 변경된 뒤 B의 주문 재고수량이 수정된다 생각하지만 실제로는 A의 요청을 받고 갱신하기 전에 B의 요청을 받아 같은 재고 수를 가져오게되어 A,B모두 수량이 같은 상태에서 재..