[Java & Spring] 낙관적 락, 비관적 락 (with. JPA와 AOP)
·
Java & Spring
1️⃣ 들어가며 – ReentrantLock의 한계기존에 ReentrantLock과 ConcurrentHashMap을 활용해 인메모리 환경에서 동시성 제어를 시도해봤습니다.아래 글들을 참고해주세요. 👉 ReentrantLock, 쿠폰 발급으로 실습하고 테스트 코드로 증명해보기 | ReentrantLock 정리 [Java] ReentrantLock 정리 (with. synchronized)1️⃣ ReentrantLock 개요🔧 등장 배경멀티스레드 환경에서 공유 자원을 안전하게 다루기 위해 자바는 오래전부터 synchronized 키워드를 제공해왔다. 하지만 단순하고 자동화된 방식 뒤에는 유연성20s-hoon.tistory.com 하지만 단일 애플리케이션 서버에서의 락 제어는 수평 확장 환경에서는 무의미..
[Java] ReentrantLock 정리 (with. synchronized)
·
Java & Spring
1️⃣ ReentrantLock 개요🔧 등장 배경멀티스레드 환경에서 공유 자원을 안전하게 다루기 위해 자바는 오래전부터 synchronized 키워드를 제공해왔다. 하지만 단순하고 자동화된 방식 뒤에는 유연성 부족, 디버깅 어려움, 조건 분기 처리 미지원 등의 문제가 있었다.❓ 왜 필요했을까? (synchronized의 한계)락 획득 시 타임아웃을 설정할 수 없음대기 중인 스레드를 interrupt할 수 없음조건을 나눠서 기다리기 어려움 (단일 wait/notify만 존재)락 제어가 블록 단위로만 가능하고 가시성이 낮음🧩 Synchronized vs ReentrantLock 비교구분SynchronizedReentrantLock🔐 락 획득/해제 방식암시적 (자동)명시적 (lock() / unlock..
[Java] Map의 computeIfAbsent()과 computeIfPresent() 메서드
·
Java & Spring
1️⃣ 들어가며ConcurrentHashMap을 사용할 때 get과 put만 쓰고 있다면?실제로는 더 안전하고 효율적인 방법이 있다: 바로 computeIfAbsent, computeIfPresent이 글에서는 이 메서드들이 왜 동시성 환경에서 필수적인지 설명한다📌 미리 읽으면 이해가 편해요!아래 블로그 글에서 ConcurrentHashMap의 기본 개념과 동작 원리를 먼저 살펴보는 것을 추천합니다:https://20s-hoon.tistory.com/166 [Java] Java의 ConcurrentHashMap 정리1️⃣ ConcurrentHashMap이란?Java에서 멀티스레드 환경을 다루다 보면, 여러 스레드가 동시에 하나의 Map에 접근하는 상황이 자주 발생한다. 이때 단순히 HashMap을 사용..
[Java & Spring] HashMap vs ConcurrentHashMap, 실습으로 알아보는 차이
·
Java & Spring
1️⃣ 들어가며멀티스레드 환경에서 데이터를 안전하게 공유하기 위해 어떤 Map을 사용해야 할까?이전에 작성한 글 🔗ConcurrentHashMap 정리을 먼저 읽어보면,ConcurrentHashMap이 어떤 자료구조이고 왜 필요한지를 이론적으로 이해하는 데 도움이 된다. 이번 글에서는 그 내용을 실습을 통해 직접 확인해보려 한다.같은 코드, 같은 로직에서 Map만 HashMap으로 바꿨을 때 무슨 일이 벌어지는지 테스트를 통해 명확하게 보여줄 것이다.🧩 실습 목표ConcurrentHashMap을 사용한 경우와HashMap을 사용한 경우를 비교하여멀티스레드 환경에서 어떤 문제가 발생하는지를 실질적으로 검증한다단순히 "thread-safe하지 않다"는 말로는 와닿지 않는 부분을, 100개의 쓰레드가 동시..