분류 전체보기34 동시성의 이름으로 날 용서하지 않겠다 - Distributed Lock 편 📌 분산락도 락이다분산락은 다중 서버 환경에서 공유 자원에 대한 동시 접근을 제어하는 메커니즘이다. 데이터베이스 락은 단일 데이터베이스 내에서만 동작하지만, 분산락은 시스템 전체에서 동작한다. 트랜잭션과 연계되는 데이터베이스 락과 달리 별도의 시스템으로 관리가 가능해 보다 유연하다. 분산락은 다음과 같은 특징이 있다:시스템 전체에서 글로벌 락을 보장한다.네트워크 장애나 서버 다운으로 인한 영구 점유 방지를 위해 일반적으로 TTL을 지원한다.데이터베이스 락보다 가볍게 동작한다.📌 Redisson과 LettuceRedisson과 Lettuce는 둘 다 Redis 클라이언트 라이브러리로, Redis와 애플리케이션 간의 통신을 돕는 역할을 한다. Redisson은 Redis를 기반으로 분산 객체와 분산 .. 2024. 12. 3. 동시성의 이름으로 날 용서하지 않겠다 - Optimistic Lock 편 이 시리즈는 글을 쓸 때마다 큰 용기가 필요하네요 👽📌 긍정적인 아이 부정적인 아이 비관락과 낙관락은 데이터베이스에서 동시성 제어를 관리하는 두 가지 접근 방식으로 서로 다른 장단점을 가진다.비관락(Pessimistic Lock)이름 그대로 트랜잭션 시작 시 충돌이 일어날 것이라고 비관적으로 가정하고, 이를 피하기 위해 미리 잠금을 거는 방식이다. 장점데이터 충돌이 아예 발생하지 않으므로, 동시성 문제가 완전히 제거된다.충돌이 자주 발생하거나 트랜잭션이 길어도 안정적으로 작동한다.단점잠금이 걸린 동안 다른 트랜잭션은 대기해야 하므로 성능이 저하된다.교착 상태가 발생할 수 있다.데이터 잠금에 따른 오버헤드가 발생한다.낙관락(Optimistic Lock)비관락과 반대로 데이터 충돌 가능성을 허용하고, .. 2024. 12. 2. 동시성의 이름으로 날 용서하지 않겠다 - Pessimistic Lock 편 📌 데이터베이스 락이 필요한 이유1. 분산 환경에서의 동시성 제어synchronized 편에서 언급했 듯, synchronized는 단일 JVM 내에서만 작동한다.여러 서버에서 동일한 데이터에 접근하는 분산 환경에서는 동작하지 않으므로, 데이터를 공유하는 모든 서버에서 동기화가 이루어지지 않는다.데이터베이스 락은 데이터베이스 자체에서 적용되므로, 분산 시스템에서도 동시성 문제를 해결할 수 있다.2. 데이터 무결성 보장synchronized는 메모리 수준에서 동기화를 제공하기 때문에, 트랜잭션 제어가 별도로 필요하다.데이터베이스 락은 트랜잭션 수준에서 동시성을 제어하여 데이터의 정확성과 일관성을 보장한다.3. 스케일링과 성능 문제분산 환경에서 데이터를 보호하기 위해 synchronized를 사용할 경우.. 2024. 11. 19. 동시성의 이름으로 날 용서하지 않겠다 - synchronized 편 글 너무 오랜만에 써서 어떻게 시작해야 될지 모르겠네요... 제목 이렇게 짓는 거 맞나 Q. 감자에게 동시성 문제란?A. 에...가위바위보 같은 존재죠. 저 가위만 내서 맨날 지니까 누가 가위바위보 하자고 하면 냅다 도망부터 갑니다. 피할 수 없다면 더 열심히 피해라? 뭐 그런 말 있잖아요 📌 도망은 재능의 영역입니다TMI - 감자는 달리기가 매우매우 느리다. 아무튼 도망 실패로 얼결에 동시성 문제를 해결하게 되었다. 에혀@Service@Transactional(readOnly = true)@RequiredArgsConstructorpublic class MemberTicketService { private final MemberRepository memberRepository; priv.. 2024. 11. 18. 이전 1 2 3 4 ··· 9 다음