프로젝트 기술 정리
1. Redis Session을 통한 Session 저장
Redis는 인메모리 데이터 저장소로, 매우 빠른 읽기/쓰기 성능을 제공한다.
웹 애플리케이션에서 세션(Session)을 저장하는 방식으로 Redis를 사용하면
다음과 같은 장점이 있다:
✔ 장점
- 속도: 메모리 기반이라 Session 조회가 매우 빠름
- 확장성: 여러 서버(멀티 인스턴스) 환경에서 Session을 공유할 수
있음
- 내구성: Redis는 옵션에 따라 데이터를 디스크에 저장할 수도 있어
재시작 시 Session 복구 가능
- TTL 지원: 세션 만료 시간을 Redis에서 관리할 수 있음
✔ 작동 방식
- 사용자가 로그인하면 서버는 세션 ID를 생성함
- 세션 ID에 해당하는 사용자 정보를 Redis에 저장
- 사용자는 Cookie로 세션 ID를 가지고 있고
- 이후 요청마다 세션 ID를 Redis에서 조회하여 로그인 여부를 판단
✔ 유용한 상황
- 서버 여러 대를 띄우는 수평 확장 구조
- 세션을 DB가 아닌 빠른 저장소에 보관하고 싶은 경우
- 트래픽이 높은 웹 서비스
2. Redisson을 통한 분산락(Distributed Lock)
Redisson은 Redis 기반의 Java 클라이언트 라이브러리로, 고급 기능(분산락,
분산 RMap, 분산 이벤트 등)을 제공한다.
그중에서도 분산락(Distributed Lock)은 여러 서버나 여러 스레드에서 동시에
동일한 자원을 조작할 때 동시성 문제를 해결하는 데 매우 유용하다.
✔ 분산락이 필요한 이유
- 여러 요청이 동시에 하나의 데이터를 수정하면 데이터 무결성 문제가
발생할 수 있음
- 예: 재고 감소, 포인트 충전, 주문 처리 등
✔ Redisson 분산락 특징
- 자동 만료(leaseTime) 지원 → 락을 잡아놓고 장애가 발생해도 락이
영구적으로 걸리지 않음
- 재진입 가능(Reentrant Lock)
- 간단한 API
- Pub/Sub 기반의 효율적인 락 대기 방식
✔ 기본 사용 예제
RLock lock = redissonClient.getLock("product:123");
lock.lock();
try {
processOrder();
} finally {
lock.unlock();
}
✔ 유용한 상황
- 재고 관리
- 동시 주문 처리
- 결제 로직
- 스케줄러 간 중복 실행 방지