분산 환경이란?
여러 노드(서버, 인스턴스, 컨테이너 등)가 네트워크를 통해 협력하는 시스템 환경
분산 환경에서 syncronized, ReentrantLock
syncronized, ReentrantLock 은 단일 프로세스(JVM)에서만 동작
- 서로 다른 프로세스(애플리케이션)과 동기화되어 동작하지 않음
- 각 프로세스 내부에서 동시성을 제어하더라도 전체 프로세스의 동시성 제어가 불가능
실습 🧑🔬
syncronized, ReentrantLock 를 적용한 2개 이상의 프로세스를 실행하여 동시성 문제가 발생하는 지 확인
분산 환경에서 @Transactional, 낙관락, 비관락
실습 🧑🔬
- 2개 이상의 프로세스를 실행시켜도 동시성 문제를 해결할 수 있는 지 확인
@Transactional 격리 수준 설정
- 낙관락
- 비관락
분산 락
분산 환경에서 공유 자원(데이터, 파일 등)에 동시에 접근할 때 발생하는 동시성 문제를 방지하기 위해 사용하는 락(lock) 메커니즘
- 원리
- 중앙화된 락 관리 시스템(예: Redis, Zookeeper, Etcd)을 이용해 락 획득/해제
- 락 획득 시, 특정 키를 생성하여 자원을 점유
- 락 해제 시, 해당 키를 삭제
- TTL(Time To Live) 을 설정해, 장애나 예외 상황에서도 락 자동 해제
- 락 획득 실패 시 재시도(backoff) 전략 사용
- 장점
- 데이터 무결성 보장: 여러 서버 간 동시 쓰기 충돌 방지.
- 확장성 확보: 락 부하가 DB로 향하지 않고 별도 시스템으로 분리할 수 있음
- 장애 복구 용이: TTL 기반 자동 해제 및 클러스터 구성 시 안정성 높음.
- 플랫폼 독립성: Redis, Zookeeper, Etcd 등 다양한 인프라 활용 가능.
- 단점
- TTL 설정 문제: 너무 짧으면 락 조기 해제, 너무 길면 교착상태 발생.
- 운영 복잡성: 락 서버 장애나 클러스터 동기화 문제 관리 필요.
- 성능 오버헤드: 낙관적 락이나 비관적 락보다 락 획득/해제 비용이 높음.
Redisson
Redis를 이용해 분산 환경에서 락, 세션, 캐시, 큐 등을 쉽게 관리할 수 있도록 해주는 Java 기반 클라이언트 라이브러리
실습 🧑🔬