웹, 인공지능, 빅데이터 등이 등장하면서 데이터의 양과 정보의 크기가 급격히 증가하고 있다. 이로 인해 기존 데이터베이스(DB) 시스템의 한계가 드러나고 있다. SSD가 등장하면서 이러한 문제를 많이 개선했지만, 여전히 데이터를 디스크에 저장해야 하는 근본적인 문제는 해결되지 않았다. 디스크 I/O 속도의 한계로 인해 대량의 데이터를 신속하게 처리하는 데 어려움이 발생한다.
데이터를 하드디스크나 SSD에 저장하지 않고 메모리에 저장하여 높은 성능을 제공하는 In-Memory DB인 Redis에 대해 알아보려고 한다.

Redis는 Dictionary 구조 한마디로 key-value형태로 데이터를 저장하고 관리하는 서버를 말한다.
Redis는 하드디스크나 SSD에 데이터를 저장하지 않고 메모리에 저장했다가 같은 페이지의 요청이 있을때 메모리에 저장된 데이터를 빠르게 돌려 주게 된다.
즉, 메모리는 하디디스크나 SSD같은 저장장치보다 훨씬 더 빠르기 때문에 고속으로 컨텐츠를 제공할 수 있는 장점이 있고 웹서버의 부담을 획기적으로 줄이면서도 사용자들에게는 빠르게 데이터를 공급해줄 수 있다.
데이터의 빠른 읽기 및 쓰기를 지원하여 고성능을 자랑한다.
키(Key)-값(Value) 구조이기 때문에 별도 쿼리 없이도 데이터를 간단히 가져올 수 있다

데이터를 메모리에 저장하여 디스크 기반 DBMS에 비해 매우 빠른 속도를 제공한다.
데이터베이스(DB), 캐시(Cache), 메시지 큐(Message Queue), 공유 메모리(Shared Memory) 용도로 사용된다.
✔️ 인메모리 ( In-Memory )
- 컴퓨터의 주기억장치인 RAM에 데이터를 올려서 사용하는 방법이다.
- RAM에 데이터를 저장하게 되면 메모리 내부에서 처리가 되므로 데이터를 저장/조회할 때 하드디스크를 오고가는 과정을 거치지 않아도 되어 속도가 빠르다.
📌하지만 서버의 메모리 용량을 초과하는 데이터를 처리할 경우, RAM의 특성인 휘발성에 따라 데이터가 유실될 수 있어서 메인 데이터베이스로 사용하기엔 무리가 있다.

Redis는 위 그림과 같이 다양한 Data Type을 지원한다. 이렇게 다양한 Data Type을 있으면 개발의 편의성과 생산성이 높아지고 난이도 또한 낮아지게 된다.
DB는 데이터를 디스크에 직접 저장(write)하기 때문에 서버에 문제가 발생하여 다운되더라도 데이터가 손실되지 않지만 매번 디스크에 접근해야 하기 때문에 사용자가 많아질수록 부하가 많아져서 느려질 수 있어서 캐시 서버를 도입하여 사용해야 한다.
이 캐시 서버로 이용할 수 있는 것이 바로 Redis이다.
⠀
✅ 즉 같은 요청이 여러 번 들어올 때 Redis를 사용함으로써 매번 DB를 거치지 않고 캐시 서버에서 저장해놨던 값을 바로 가져와서 DB의 부하를 줄이고 서비스의 속도도 느려지지 않게 할 수 있다.
1. 웹 서버 부하 감소:
2. 고속 데이터 제공:
3. 세션 관리:
4. 실시간 데이터 분석:
5. 지리공간 데이터 처리:
💥수강신청 시스템에서 Redis의 활용 사례
1. 세션 관리
수강신청 시스템에서 사용자의 세션 데이터를 Redis에 저장하여, 빠르게 사용자 인증 및 세션 관리를 할 수 있다.
2. 캐싱
과목 정보, 교수 정보 등 자주 조회되는 데이터를 Redis에 캐싱하여, 데이터베이스 부하를 줄이고 응답 속도를 향상시킬 수 있다.
3. 실시간 신청 상태 관리
수강신청의 경우 실시간으로 신청 가능한 좌석 수를 관리해야 한다. Redis의 INCR, DECR 명령어를 사용하여, 실시간으로 좌석 수를 업데이트하고 관리할 수 있다.
4. 메시지 큐를 이용한 작업 처리
수강신청 시 대량의 작업을 순차적으로 처리해야 할 때, Redis의 리스트를 이용한 작업 큐를 사용할 수 있다.