티스토리 뷰
1. Redis란?
- Remote Dictionary Server, 오픈 소스 인메모리 데이터 저장소
- 주로 캐싱, 세션 관리, 실시간 데이터 처리 등에 사용된다
- 키-값(key-Value) 구조를 기반으로 하며, 빠른 성능과 다양한 데이터 구조를 지원
2. 왜 Redis를 사용 할까?
1) 빠른 성능
- 데이터를 메모리(RAM)에 저장하기 때문에 디스크 기반 데이터베이스(MySQL, PostgreSQL 등)보다 훨씬 빠르게 읽고 쓸 수 있다.
- 평균 마이크로초(㎲) 단위 응답 속도로, 초당 수십만 건 이상의 요청을 처리할 수 있다.
2) 다양한 데이터 구조 지원
- 단순한 key-value 뿐만 아니라 list, Set, Sorted Set, Hash, Bitmap, hyperLogLog 같은 자료 구조를 제공한다.
- 예: 랭킹 시스템(점수 기반 정렬)에는 Sorted Set, 사용자 세션 관리에는 Hash, 실시간 대기열에는 List 활용
3) 확장성 및 분산 처리 가능
- 여러 개의 Redis 서버를 연결해 클러스터링(Redis Cluster)를 구성할 수 있어 대규모 트래픽 처리 가능
- 레플리케이션(Replication) 기능을 활용하면 데이터 백업과 부하 분산이 가능
4) Pub/Sub 기능
- 채팅, 실시간 알림, 이벤트 브로커 같은 시스템에서 Redis의 Publish/Subscribe(Pub/Sub) 기능을 활용해 빠르게 메시지 전달 가능
3. 언제 필요할까?
1) 캐싱 : 자주 사용하는 데이터를 Redis에 저장해 데이터베이스 부하를 줄이고 성능을 높일 때
- 유투브, 인스타그램 좋아요, 조회수 등
2) 세션 관리: 로그인 정보나 사용자 상태를 관리할 때
- 사용자 로그인 상태(세션 정보), 쇼핑몰 장바구니 정보 저장
3) 실시간 데이터 처리
- 실시간 채팅, 실시간 랭킹 시스템, 스트리밍 데이터 처리
4) 메시지 큐
- 백그라운드 작업 처리(이메일 전송 - List/Stream 활용 큐 시스템, Celery, BullMQ 같은 작업 큐)
5) Pub/Sub 시스템: 채팅, 알림 시스템에서 메세지를 빠르게 전송할 때
4. 왜 MySQL, MongoDB 같은 다른 DB 대신 Redis를 쓸까?
: 목적이 다르다!
- MysQL, PostgreSQL → 디스크 기반 데이터베이스(데이터 영구 저장이 중요)
- MongoDB → 문서형(NoSQL) 데이터 저장소(JSON 기반 데이터 관리)
- Redis → 메모리 기반 데이터 저장소(속도와 실시간성이 중요)
즉, 빠르고, 실시간 처리가 필요하고, 일시적인 데이터를 다룰 때 Redis를 쓴다.
기본적인 데이터 저장용 DB로 쓰기에는 휘발성(데이터가 날아갈 위험)이 있어서 주로 보조 역할로 사용된다.
5. 상황 별 비교
- MySQL을 캐시로 쓰면 쿼리 부하가 증가하고 속도가 느려질 수 있어 Redis가 적합, Join 연산 많아지면 성능 저하
상황 | MySQL | Redis | MongoDB |
캐싱 | 디스크 기반 → I/O 비용이 발생해 읽기/쓰기 속도가 느림 | 메모리 기반 → 빠르다 | 디스크 기반이지만 메모리 캐싱 기능이 있음. 하지만 Redis가 더 빠름 |
세션관리 | 읽기/쓰기 속도가 느려지고 부하가 커짐 | 만료시간 설정이 가능해 자동으로 오래된 데이터 정리 가능 | 가능하지만 TTL 관리가 어려움 |
메시지 큐 | 트랜잭션 처리가 필요하고, 데이터 읽고 삭제하는 과정에서 락(Lock) 발생 가능해 속도가 느림 |
List 자료구조와 Pub/Sub 기능 활용 빠르게 메시지 주고 받기 가능 이벤트 기반 비동기 처리 가능 |
비동기 이벤트 처리 가능하고, Change Streams가 있어 데이터 변경을 감지하는 용도로는 좋지만, 실시간 성능은 Redis가 좋음 |
6. 디스크기반 vs 메모리 기반 차이점
구분 | 디스크 기반 | 메모리 기반 |
저장 위치 | 하드디스크(HDD, SSD) | RAM(메모리) |
속도 | 느림(디스크 I/O발생) | 빠름(CPU와 직접 데이터 처리) |
데이터 영구 저장 | 가능 | 기본적으로 휘발성 |
I/O 비용 | 높음 (디스크 접근 필요) | 낮음 (메모리에서 바로 처리) |
1) 디스크 기반 : MySQL, MongoDB
- 데이터를 하드디스크(HDD, SSD)에 저장하기 때문에, 데이터를 읽고 쓸 때 디스크에서 가져와야함
- 하드디스크(HDD)는 물리적인 회전판(플래터)이 돌아가면서 데이터를 읽고 써야해서 시간이 많이 걸린다.
- SSD는 훨씬 빠르지만, 여전히 RAM보다는 느리다
- 디스크는 랜덤 접근이 느리고 순차 접근이 더 빨라 최적화가 필요하다
- 장점: 데이터를 영구 저장할 수 있어서 정형 데이터, 로그 저장 등에 적합하다
- 대량 데이터를 저장 가능하다
* I/O 비용이란?
- I/O(Input/Output) 비용이란, 컴퓨터가 데이터를 읽거나 쓸 때 드는 시간과 자원을 의미한다.
- 즉 디스크 I/O 비용이란, 데이터를 디스크에서 읽고 쓰는데 걸리는 시간을 말한다.
구분 | 디스크기반 | 메모리 기반 | |
HDD 하드디스크 | SSD 솔리드 스테이트 드라이브 | RAM | |
동작 | 플래터(회전판)이 돌아감 → 읽기/ 쓰기 헤드가 해당 위치로 이동 이동 거리와 회전 대기 시간 |
읽기/쓰기 작업이 반도체(플래시 메모리) 칩 내에서 발생 전기 신호로 바로 데이터 읽고 씀 (데이터가 블록 단위로 묶여, 블록 이동 시간 필요, 내부 회로 처리 시간) |
CPU가 바로 가져옴 전자적 방식 데이터를 전하 형태로 저장 데이터가 전자적을 빠르게 읽고 쓸 수 있음 (하나 하나 직접적으로 읽 고쓰기가능, 데이터 바로 접근 가능) |
처리속도 | 오래걸림 | 이동대기시간 없어 빠름 | 매우빠름 |
접근방식/성능 | 순차접근이 빠름 DB에서 데이터를 순차적으로 저장하고 읽도록 최적화 필요 디스크 I/O 비용이 크면, 프로그램이 느려지고 성능 저하가 발생 |
랜덤 접근이 빨라, 어디서든 데이터를 즉시 가져올 수 있음 메모리 주소가 일관적이고, 데이터가 랜덤하게 분포되지 않음 |
- 디스크가 데이터를 읽는 방식
순차 접근 | 랜덤 접근 |
데이터가 연속된 위치에 저장되어 있어서 한 번에 읽는 것 | 파일이나 데이터를 디스크에서 여기저기 흩어져 있는 상태에서 읽는 것 |
헤드가 한 번만 움직여서 데이터를 연속적으로 읽어 빠르다. 예: 동영상 파일을 한 번에 읽는 경우 |
데이터가 디스크 여러 군데에 조각나서 저장된 경우, 조각난 파일 조각을 모아야하는데, HDD에서는 헤드가 계속 이동하면서 데이터를 찾아야 해서 오래 걸린다. |
2) 메모리 기반 : Redis
- 데이터를 메모리(RAM)에 저장하기 때문에 CPU가 직접 데이터를 가져와서 디스크 I/O 없이 즉시 처리 가능
- RAM은 랜덤 접근이 빨라서 어디서든 데이터를 즉시 가져올 수 있다
- 기본적으로 휘발성으로, 서버가 재부팅되면 데이터가 사라진다(전기가 끊기면 전하가 지속되지 않아 데이터가 사라짐)
* SSD는 플래시 메로리를 사용해 데이터를 전하로 저장하지만, 전하는 저장하는 메모리 셀(플로팅 게이트, 절연된 상태로 전하를 보관해 전원 공급이 끊겨도 전하가 지속되어 영구저장 가능)
* CPU가 빠르게 데이터를 처리하기 위해 필요한 공간이기 때문에 영구적으로 저장할 필요가 없는 일시적인 데이터만 처리
- 메모리는 저장 용량이 제한적이다(디스크보다 훨씬 비싸서)
- 읽기/쓰기 속도가 매우 빠르다.
'AI > AI 서비스 개발' 카테고리의 다른 글
[AI 서비스 개발] Crewai input type 에러 (0) | 2025.02.13 |
---|---|
[AI 서비스 개발] 서비스 배포 전 docker로 배포 환경 테스트해보기, 서비스 배포 후 AWS EC2에서 print문 확인하기 (0) | 2025.02.12 |
[AI 서비스 개발] 싱글톤 패턴, 클래스, 인스턴스, __new__, __init__, cls, self (0) | 2025.02.10 |
[AI 서비스 개발] Cookie (1) | 2025.02.06 |
[AI 서비스 개발] 비동기, 멀티스레딩, 멀티프로세싱, MSA (0) | 2025.02.05 |
- Total
- Today
- Yesterday
- 줄넘기
- 갓생
- 실기
- 오블완
- Ai
- opic
- 오픽
- C언어
- llm
- 30분
- 미라클모닝
- 빅데이터 분석기사
- IH
- 습관
- 운동
- Python
- 영어회화
- 뉴스
- 프로그래머스
- 경제
- 기초
- 다이어트
- 아침
- 고득점 Kit
- 아침운동
- 스크랩
- 루틴
- ChatGPT
- SQL
- 티스토리챌린지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |