인프런 커뮤니티 질문&답변

김찬님의 프로필 이미지
김찬

작성한 질문수

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

Named Lock 활용해보기

동시성 제어 방법 채택 순서

작성

·

845

0

안녕하세요

강의를 듣던 중 궁금함이 생겨서 질문드립니다.

msa 환경에서, 레디스를 사용할 수 있는 상황이라면 레디스를 사용하는 것이 제일 좋은 방법인가요? 아니면 db락을 사용하는 것이 더 좋을 수도 있나요? 만약 db락을 사용하는 것이 더 좋을 수도 있다면, 그 상황은 어떤 상황이 있을까요?

답변 2

0

최상용님의 프로필 이미지
최상용
지식공유자

김찬님 안녕하세요.
레이스컨디션이 많이 일어나지 않는 상황이라면 optimistic lock 이 더 효과적일 수 있습니다.
optimistic lock 으로는 해결이 안되는 상황일때 (예를들어 새로운 데이터를 삽입할 때) 는 분산락을 사용할 수 있습니다.
이 경우에는 이미 운영중인 레디스가 있고 레디스를 운영할 수 있는 인원이 있다면 레디스를 사용하는 것이 좋은 방법이 될 수 있습니다.
하지만 운영중인 레디스가 없으며 레디스를 운영할 수 있는 인원이 없다면 db 를 사용하는것이 더 좋은선택이 될 수 있을 것 같습니다.

감사합니다.

김찬님의 프로필 이미지
김찬
질문자

답변 감사드립니다

새로운 데이터를 삽입할때 낙관락으로 해결이 왜 안되는지 설명해주실 수 있으실까요?

최상용님의 프로필 이미지
최상용
지식공유자

jhj13062004 님 낙관적락은 기존에 존재하던 데이터의 버전을 활용하여 동시성을 제어하는 방법입니다. 새로운 데이터를 삽입할 때는 기준을 삼을 데이터가 존재하지 않기때문에 해결이 안된다고 하였습니다.

0

안녕하세요, 인프런 AI 인턴이에요. 동시성 제어 방법에 대한 궁금증에 대해 답변해드릴게요.

레디스와 DB 락 모두 동시성 제어에 사용될 수 있는 방법 중 하나입니다. 하지만 어떤 방법을 채택해야 할지는 상황에 따라 다를 수 있습니다.

일반적으로 레디스는 인메모리 데이터베이스이기 때문에 높은 처리량과 낮은 지연 시간을 제공합니다. 따라서 많은 동시 요청을 처리해야 하는 시스템이라면, 레디스를 사용하여 동시성 제어를 하는 것이 더 효율적일 수 있습니다.

반면에 DB 락은 데이터의 consistency를 보장하면서 동시에 데이터 접근을 제어할 수 있는 방법입니다. DB 락은 일반적으로 트랜잭션이나 레코드 레벨에서 사용되며, 데이터베이스에서 처리해야 할 복잡한 로직이 있는 경우에 적합합니다.

따라서, 동시성 제어 방법은 시스템의 특성과 요구사항에 따라 다르게 결정되어야 하며, 단순한 상황에 따라 “레디스를 사용하는 것이 제일 좋은 방법”이거나 “DB 락을 사용하는 것이 더 좋은 경우”로 일반화할 수는 없습니다.

동시성 제어 방법을 결정할 때는 시스템의 특성, 처리량, 지연 시간 요구사항, 데이터 일관성 등을 고려하여 적절한 방법을 선택하시면 될 것 같아요. 추가적인 질문이 있다면 언제든지 물어보세요. 좋은 하루 되세요~!

김찬님의 프로필 이미지
김찬

작성한 질문수

질문하기