오늘은 Redis에 대해 간략하게 알아보겠습니다. 자세한 내용은 추후에 분산락에 대한 포스팅을 하면서 Kafka 와 RabitMQ와 함께 깊게 다뤄볼 예정입니다.
Redis 와 Lock 을 이용한 동시성 제어
Redis 란?
- Redis는 Key-Value 기반의 In-Memory 데이터 저장소로, 빠른 읽기/쓰기 성능과 다양한 자료구조를 지원합니다.
- 데이터를 메모리에 저장해 속도가 매우 빠르며, 간단한 캐싱, 세션 관리, 실시간 데이터 처리 등에 사용됩니다.
- 주요 특징:
- NoSQL 데이터베이스로 스키마 없이 사용 가능
- 다양한 자료구조 (String, Hash, List, Set, Sorted Set 등) 지원
- Pub/Sub, 트랜잭션, Lua 스크립트 기능 제공
Lock 이란?
- Lock은 다수의 프로세스 또는 스레드가 공유 자원을 동시에 접근할 때 경쟁 상태(Race Condition)를 방지하기 위해 사용됩니다.
- Lock을 사용하면 한 스레드가 자원을 사용하는 동안 다른 스레드가 접근하지 못하게 막을 수 있습니다.
Redis 로 Lock 구현
Redis를 사용한 Lock을 분산 락이라고도 합니다. 이를 통해 여러 서버나 프로세스 간에 동시성 문제를 해결할 수 있습니다.
1. 구현 원리:
Redis의 SET 명령어를 사용해 Lock을 설정합니다.
SET lock_key "value" NX EX 5
- NX: Key가 존재하지 않을 때만 설정
- EX 5: TTL(Time-To-Live)을 5초로 설정 (Lock이 일정 시간이 지나면 자동 해제)
2. Lock 획득 실패 시 처리:
- 재시도 로직을 구현하거나 실패 로그를 기록합니다.
- 예:
if (lockAcquired) {
// 처리 로직
} else {
// 재시도 또는 실패 처리
}
3. Redis Lock 의 장점:
- 분산 환경에서 Lock을 적용 가능
- 높은 성능과 낮은 대기 시간
- TTL 설정을 통해 데드락 방지
Lettuce 와 Redisson
- Lettuce:
- Redis 클라이언트 라이브러리로, 비동기 및 반응형 프로그래밍을 지원합니다.
- Lightweight하며, 주로 Spring Data Redis에서 기본으로 사용됩니다.
- 락 구현 시 직접 SET과 DEL 명령을 사용해 로직을 작성해야 합니다.
- Redisson:
- Redis 클라이언트 라이브러리로, 분산 객체와 분산 서비스를 쉽게 구현할 수 있는 기능을 제공합니다.
- 분산 락, 세마포어, 큐 등 고급 기능 내장
- 설정이 Lettuce보다 간단
Key 란?
Redis Lock의 Key는 서버와 작업 간의 고유값이어야 합니다.
- 예: order:123:lock
- Key를 특정 작업에 대한 고유값으로 설정해, 다른 Lock과 충돌하지 않도록 만듭니다.
728x90
반응형
'Spring' 카테고리의 다른 글
Spring - Redis 적용 실습 (0) | 2024.11.26 |
---|---|
Spring - 낙관적 락 & 비관적 락 (0) | 2024.11.24 |
Spring - AWS 로 애플리케이션 배포하기 (0) | 2024.11.18 |
Spring - AWS (0) | 2024.11.17 |
Spring - DB 와의 상호작용 (1) | 2024.11.16 |