실시간 처리 시스템을 설계할 때 빠지지 않고 등장하는 기술 중 하나가 바로 Redis(레디스)이다. 나 역시 AI 면접 시스템에서 실시간 STT 처리와 병렬 분석을 구현하면서 Redis의 유용함을 깊이 체감했다.(SK AXIS 프로젝트) 이 글에서는 Redis의 개념부터 실전에서 어떻게 쓰이는지까지 정리해보려 한다!
ㅁRedis(Remote Dictionary Server): 메모리 기반의 키-값 데이터 저장소
Redis는 일반적인 RDBMS(MySQL, PostgreSQL 등)와는 달리, 디스크가 아니라 메모리(RAM)에 데이터를 저장하기 때문에 압도적으로 빠른 속도를 자랑한다! 또한 단순한 캐시 서버를 넘어서, 아래와 같은 다양한 구조를 지원한다.
- 문자열(String)
- 리스트(List)
- 해시(Hash)
- 셋(Set), 정렬된 셋(Sorted Set)
- Pub/Sub (발행-구독)
- Stream (로그/이벤트 기반 데이터 처리)
- TTL (만료 시간 지정 기능)
왜 Redis가 필요했는가?
일단 내가 Redis를 도입하게 된 이유는 다음과 같다.
1) 실시간성(Real-Time)
면접자의 음성 데이터를 STT로 변환하고, 이를 실시간으로 분석하여 피드백을 제공해야 했다. 이때 MySQL 같은 디스크 기반 저장소는 속도가 너무 느렸다. 반면, Redis는 메모리 기반이므로 거의 밀리초(ms) 단위로 데이터를 읽고 쓸 수 있다.
2) chunk 처리 + 병렬성
영상이나 음성 데이터를 5초 단위 청크로 나누어 저장하고, 이를 분석 모델이 병렬로 처리하게 만들기 위해 Redis의 Stream 구조와 List 구조를 활용했다.
Redis의 주요 데이터 구조 예시
📌 String (가장 간단)
SET username "hong"
GET username
📌 List (순서 보장)
Key: stt:{user_id}:{session_id}
Value: Redis List (LPUSH/RPUSH)
[
"안녕하세요",
"저는 김도현입니다",
"이 프로젝트는 ..."
]
📌 Hash (청크 ID로 직접 접근 가능)
Key: stt:{user_id}:{session_id}
Value: Redis Hash
{
"chunk_001": "안녕하세요",
"chunk_002": "저는 김도현입니다",
"chunk_003": "이 프로젝트는 ..."
}
- HSET으로 chunk ID 기준 저장
- 필요시 특정 청크만 업데이트(Re-Write) 가능
- 장점: Re-Write 및 부분 수정이 쉬움
📌 Pub/Sub (실시간 분석 모듈에 활용)
PUBLISH stt_channel "chunk_01 data"
SUBSCRIBE stt_channel
📌 Stream (로그/이벤트 전송용)
XADD stt_stream * chunk="chunk_01_data"
XREAD STREAMS stt_stream 0
그렇다면 Redis의 단점은?
따라서 Redis는 “빠르게 읽고 쓰는 임시 데이터 처리”에 최적화된 용도로 쓰는 것이 바람직하다.
따라서 Redis는 이런 시스템에 어울린다..!
1. 로그인 세션 관리
로그인 상태를 TTL과 함께 캐싱
2. 실시간 메시지 중계
채팅, 알림, 이벤트 등
3. 스트리밍 분석
음성 청크, 로그, 센서 데이터 등
4. 캐시 시스템
DB 접근 없이 빠르게 데이터 제공
나는 Redis를 처음엔 “그냥 빠른 DB” 정도로만 생각했다. 하지만 직접 AI 면접 시스템을 설계하면서, 실시간 처리, 청크 저장, 병렬 분석과 같은 시나리오에서 Redis만큼 유연하고 빠르게 동작하는 저장소는 없다는 걸 체감했다. 특히 기록할 필요는 없지만 당장 필요한 임시 데이터, 그리고 동시다발적인 처리 흐름을 다뤄야 하는 경우라면 Redis는 매우 강력한 무기이다 크±
'DBMS > Redis' 카테고리의 다른 글
[Redis] 초간단 설치 + 실행법 (macOS 기준) (3) | 2025.05.23 |
---|