티스토리 뷰

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가 빠르게 데이터를 처리하기 위해 필요한 공간이기 때문에 영구적으로 저장할 필요가 없는 일시적인 데이터만 처리

- 메모리는 저장 용량이 제한적이다(디스크보다 훨씬 비싸서)

- 읽기/쓰기 속도가 매우 빠르다.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/02   »
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
글 보관함