작성
·
500
·
수정됨
0
안녕하세요! 강의 너무 잘들었습니다.
강의를 들으면서 느꼈던 궁금증들이 있습니다.
동시성 문제에서 락을 하는 이유는 트랜잭션의 격리 수준으로는 해결할 수 없기때문에 하는건가요? 아니면 격리수준을 높이면 성능이 안나와서 락킹을 하는 건지 궁금합니다.
Redis가 인메모리라 빠른건 많이 들었는데 실제 개발 환경이면 Redis나 MySQL이나 클라우드 환경을 사용할텐데, 이게 클라우드 서버에서 인메모리를 사용한다는 건가요? Redis나 MySQL이나 네트워크 I/O가 발생하는 것은 같은데 차이가 많이 큰지가 궁금합니다!
너무 궁금한 내용이라 답변해주시면 감사하겠습니다!
답변 2
0
iii 님 안녕하세요.
1. 강의에서 설명한것과 여러개의 스레드에서 A 라는 row 를 가져가서 업데이트를 시도할 때 발생하는 문제이므로 격리수준과는 상관 없을 것 같습니다.
예를들어 A 스레드와 B 스레드가 10:00 에 최초 재고가 5인 Stock 을 가져가서 1개씩 차감한다고 가정해보겠습니다.
10:00 A 스레드 가 재고가 5인상태로 데이터 select
10:00 B 스레드 가 재고가 5인상태로 데이터 select
10:01 A 스레드가 재고 1개 차감하여 업데이트 (4로 갱신)
10:02 B 스레드가 재고 1개 차감하여 업데이트 (4로 갱신)
10:01 에 A 스레드가 재고 1개를 차감해서 업데이트를 실행, 10:02 에 B 스레드가 재고 1개를 차감해서 업데이 트를 실행하지만 둘다 5인상태에서 가져갔기때문에 결과값이 4가 됩니다.
레디스가 더욱 빠른이유는 인메모리 데이터베이스이기 때문입니다. 컴퓨터구조상 메모리에 올라와있는 데이터를 읽을 때와 디스크에 있는 데이터를 읽을때 속도차이가 존재합니다.
감사합니다.
0
안녕하세요, 인프런 AI 인턴이에요. 격리수준과 동시성에 대한 궁금증에 대해 답변드릴게요.
MySQL 8.0의 기본 격리 수준인 REPEATABLE READ에서는 커밋 후에야 변경된 값을 읽을 수 있습니다. 그럼에도 불구하고 동시성 문제가 발생하는 이유는 여러 트랜잭션이 동시에 같은 값을 수정하는 경우입니다. 예를 들어, 트랜잭션 A에서 커밋하기 전에 값을 변경하고 있는 동안, 트랜잭션 B에서도 해당 값을 동시에 읽을 수 있는 상황이 발생할 수 있습니다. 이런 경우 동시성 문제가 발생할 수 있습니다.
또한, 동시에 동일한 값을 수정하려는 2개 이상의 트랜잭션이 존재한다면 격리 수준과는 무관하게 동시성 문제가 발생할 수 있습니다. 따라서 격리 수준을 설정하는 것은 동시성 문제를 완전히 해결해주는 것은 아닙니다.
Redis와 MySQL은 각각 다른 특징을 가지고 있습니다. Redis는 메모리 기반의 데이터 저장소로, 데이터가 인메모리에서 처리되기 때문에 접근 속도가 빠릅니다. MySQL은 디스크 기반의 관계형 데이터베이스 시스템으로, 디스크 I/O가 발생하기 때문에 접근 속도가 더 느릴 수 있습니다.
클라우드 환경에서 Redis나 MySQL을 사용하는 경우, 인메모리를 사용할지 여부는 개발자의 선택에 따라 달라질 수 있습니다. 클라우드 제공업체는 다양한 메모리 옵션을 제공하고 있으며, 개발자는 자신의 요구사항에 따라 적절한 옵션을 선택할 수 있습니다.
요약하자면, 격리수준과 동시성 문제는 트랜잭션 간의 상호작용과 데이터 수정 여부에 따라 발생하며, Redis와 MySQL은 다른 특징과 성능을 가지고 있습니다. 클라우드 환경에서 인메모리를 사용할지는 개발자의 선택에 따라 다를 수 있습니다.
더 궁금한 내용이 있으시면 언제든지 물어보세요. 좋은 하루 되세요!