1. 인메모리 저장소는 왜 필요할까
Spring Boot 프로젝트에서 주로 사용하는 RDBMS(MySQL, PostgreSQL 등)는 영속성(Persistence)을 위해 데이터를 파일 시스템(HDD, SSD)에 저장합니다.
서비스 종료 시에도 데이터가 유지되어야 하는 핵심 정보에는 필수적이지만, 물리적인 디스크 I/O가 발생하기 때문에 속도가 상대적으로 느릴 수밖에 없습니다.
반면, 로그인 정보, 장바구니, 게시글 조회수와 같이 변경이 잦고 일시적인 데이터는 메모리(RAM)를 사용하는 데이터베이스가 훨씬 유리합니다. 메모리는 디스크보다 압도적으로 빠른 읽기/쓰기 성능을 제공하기 때문입니다.
2. Redis의 정의와 핵심 특징
Redis(Remote Dictionary Server)는 Java의 Map<Key, Value> 구조와 유사하게 데이터를 저장하는 대표적인 인메모리 NoSQL 데이터베이스입니다.
- 초고속 성능: RAM 기반 저장 방식으로 복잡한 입출력 과정이 생략되어 지연 시간이 극도로 낮습니다.
- 다양한 자료구조: 단순 String 외에도 List, Set, Hash, Sorted Set 등을 지원하여 복잡한 로직을 DB 레벨에서 처리할 수 있습니다.
- NoSQL 접근법: 스키마가 엄격하지 않아 확장성과 유연성이 뛰어나며 비정형 데이터를 처리하기에 최적입니다.
2024년 3월 20일 이후, Redis는 라이선스를 기존 BSD에서 SSPLv1 및 RSALv2로 변경했다.
일반적인 상용 서비스 사용에는 여전히 무료이지만, Redis를 직접 재판매하는 클라우드 서비스 제공 업체 등은 제약이 생겼으니 프로젝트 도입 시 참고가 필요하다.
3. 실무자가 알아야 할 Redis 최신 트렌드 (GitHub Insight)
최신 Redis(7.x 버전 이상)와 실무 개발 환경에서 반드시 챙겨야 할 핵심 내용입니다.
3.1 데이터 지속성 (Persistence: RDB vs AOF)
Redis는 기본적으로 휘발성이지만, 데이터를 디스크에 백업하는 두 가지 메커니즘을 제공합니다.
- RDB (Redis Database): 특정 시점의 메모리 스냅샷을 생성합니다. 파일 크기가 작고 복구가 빠르지만, 스냅샷 사이의 데이터 손실 위험이 있습니다.
- AOF (Append Only File): 모든 쓰기 명령을 로그로 기록합니다. 데이터 유실이 거의 없지만 파일이 커지고 복구 속도가 느릴 수 있습니다.
3.2 Java 클라이언트 선택: Lettuce vs Jedis
Spring Boot 환경에서 Redis를 사용할 때 클라이언트 선택이 중요하다.
최근 GitHub 동향과 Spring Data Redis의 기본값은 Lettuce입니다.
Jedis는 동기 방식인 반면, Lettuce는 Netty 기반의 비동기/논블로킹(Non-blocking) 구조를 가져 성능과 확장성 면에서 훨씬 우수합니다.
3.3 Redis Streams & Probabilistic Data Structures
단순 캐싱을 넘어 최근에는 로그 수집이나 메시징을 위한 Redis Streams가 많이 쓰입니다. 또한 대규모 데이터에서 중복 체크를 위한 Bloom Filter와 같은 확률적 자료구조 기능을 통해 메모리 사용량을 획기적으로 줄이는 설계가 유행하고 있습니다.
4. 실전 활용 사례
| 활용 분야 | 상세 내용 |
|---|---|
| Session Clustering | 다중 서버 환경에서 동일한 사용자 세션 정보를 공유할 수 있도록 지원 |
| Caching | 자주 조회되는 DB 쿼리 결과를 저장하여 전반적인 응답 속도 개선 |
| Leaderboard | Sorted Set 자료구조를 활용하여 실시간 순위 시스템 구현 |
| Rate Limiting | 특정 API에 대한 요청 횟수를 제한하는 보안 기능 구현 |
'데이터의 수명(TTL)'을 명확히 설정하고, 'Eviction Policy(메모리 부족 시 삭제 정책)'를 서비스 성격에 맞게 튜닝하는 것이 시역량인거 같다 .
5. 참고 사이트
'인메모리 저장소 ,Redis 기초' 카테고리의 다른 글
| [Backend] Redis 코어 아키텍처와 기초 특강 (0) | 2026.05.12 |
|---|
