[Redis] Redis란 무엇인가 ?

2025. 9. 9. 21:09·Redis

Redis (Remote Dictionary Server) 

Redis는 원격(Remote)에 위치하고 프로세스로 존재하는 인메모리 (In-Memory) 기반의 Dictionary(key-value) 구조 데이터 관리 서버 시스템이다. 

 

여기서 key-value 구조는 mysql 과 같은 관계형 데이터가 아닌 비 관계형 구조로서 데이터를 그저 '키-값' 형태로 단순하게 저장하는 구조를 말한다. 그래서 관계형 데이터베이스와 같이 쿼리 연산을 지원하지 않지만, 대신 데이터의 고속 읽기, 쓰기에 최적화되어 있다. Redis는 그래서 일종의 NoSQL로 분류되기도 한다. 

 

Redis는 데이터 처리 속도가 엄청 빠른 NoSQL 데이터베이스이다. 
- NoSQL 데이터베이스는 key-value의 형태로 저장하는 데이터베이스 

Redis 활용하기 

1) 캐시 (Cache) 

캐시란, 한 번에 조회된 데이터를 미리 특정 공간에 저장해놓고, 똑같은 요청이 발생하게 되면 서버에게 다시 요청하지 말고 저장해놓은 데이터를 제공해서 빠르게 서비스를 제공해주는 것을 의미한다. 

 

패턴 

  1. Look-aside Cache (Lazy Loading) : 클라이언트 요청 → Redis 조회 → 없으면 db에서 조회 후 Redis에 넣음 → 이후 요청은 Redis에서 바로 조회
  2. Write-back Cache : 쓰기 요청은 db에 바로 저장하지 않고, 일단 캐시에 저장 → 일정 주기마다 캐시 내용을 모아서 db에 일괄 저장 → db에 저장된 뒤 캐시 데이터는 제거된다. 

왼쪽 : Look-aside Cache, 오른쪽 : Write-back Cache

2) 세션 (Session) 관리 

웹 서비스에서 사용자의 로그인 정보나 상태를 저장하는 공간을 '세션(Session)'이라고 한다. 보통 단일 서버에서는 서버 메모리에 세션을 저장하지만, 서버가 여러 대라면 문제가 생긴다. (A서버에서 로그인을 했는데, 다음 요청이 B서버로 가면 세션을 못 찾는 상황 발생) 이를 해결하기 위해 Redis를 공유 세션 저장소로 활용한다. 

 

3) 실시간 처리 

Redis는 인메모리 기반이라 초고속 연산이 가능하기 때문에, 실시간 데이터가 필요한 곳에 자주 사용된다. 예를 들면, 실시간 랭킹이나 점수 집계, 조회수나 좋아유 수 카운팅에 유용하다. 

 

4) 메시지 브로커 Pub-Sub 

Redis는 Publisher/Subscribe 기능을 제공해 간단한 메시지 큐처럼 사용할 수 있다. 

  • Publisher (발행자) : 특정 채널에 메시지를 발행 
  • Subscriber (구독자) : 채널을 구독하고 있다가 메시지를 실시간으로 수신

채팅 서비스나 알림 시스템에서 활용할 수 있다. 

 

5) 분산 환경 제어 (Distributed Lock)

왜 분산 락이 필요한가 ? 

서버가 여러 대 일 경우, 동시에 동일 자원을 수정하려는 요청이 들어올 수 있다. 예를 들어, 쇼핑몰에서 인기 상품 1개 남았는데 동시에 2명이 결제 버튼을 누르면 제고가 -1이 되는 문제가 발생한다. 이런 경우 '분산 락, 여러 서버/프로세스가 동시에 접근하지 못하도록 자원을 잠그는 기술'을 통해 특정 지원을 하나의 요청만 수정할 수 있게 보장한다. 


Redis의 장점

명확하다. 
Redis는 인메모리에 모든 데이터를 저장한다. 그래서 데이터의 처리 성능이 굉장히 빠르다. 
- MySQL과 같은 RDBMS의 데이터베이스는 대부분 디스크에 데이터를 저장한다. 하지만 Redis는 메모리(RAM)에 데이터를 저장을 한다. 디스크보다 메모리에서의 데이터 처리 속도가 월등하게 빠르다. 이 때문에 Redis의 데이터 처리 속도가 RDBMS에 비해 훨씬 빠르다. 

Redis의 문제점 

Redis에도 설계 구조 상 단점이 존재한다. 

 

Redis는 자바스크립트와 같이 싱글 스레드 기반으로 돌아간다. 그래서 한 번에 딱 하나의 명령만 실행하기 때문에, 긴 처리시간이 필요한 명령어를 쓰면 불리하고 요청 건을 처리하기 전까지 다른 서비스 요청을 받아들일 수 없고 서버가 다운되는 현상이 일어날 수 있다. 따라서 전체 데이터를 다루는 시간복잡도를 가진 O(N) 명령어는 주의해서 사용할 필요가 있다. 

 

또한, Redis는 데이터를 메모리에 올려 놓고 관리하는데, 객체가 삽입과 삭제를 반복하다 보면 빈 공간이 중간중간 생기는 현상이 발생한다. 새 데이터를 넣으려 할 때, 필요한 크기만큼 연속된 공간이 없으면 뒤쪽으로 밀려서 배치된다.

'Redis' 카테고리의 다른 글

[Redis] 스프링이 제공하는 Redis 직렬화/역직렬화 (Serializer/Deserializer)  (0) 2025.09.16
[Redis] Redis Pub/Sub  (0) 2025.09.11
'Redis' 카테고리의 다른 글
  • [Redis] 스프링이 제공하는 Redis 직렬화/역직렬화 (Serializer/Deserializer)
  • [Redis] Redis Pub/Sub
erika0915
erika0915
백엔드 개발자가 되고 싶어요 .
  • erika0915
    erikoding
    erika0915
  • 전체
    오늘
    어제
    • 분류 전체보기 (78)
      • 프로젝트 (13)
        • 끼니콩 (3)
        • 덕메랑 (3)
        • handDoc (7)
        • Haeil (0)
      • Java (9)
        • 클린코더스 (0)
      • Spring (30)
      • Redis (3)
      • CS (7)
        • 운영체제 (3)
        • 컴퓨터구조 (0)
        • 네트워크 (4)
      • DevOps (2)
      • 코딩테스트 (0)
      • Tech (14)
        • TDD (1)
        • 정리 (5)
        • 우테코 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    github
    OS
    coderabbit
    promtail
    springboot
    java
    CoolSMS
    AI
    깃허브
    TDD
    Spring
    스프링부트
    jira
    MongoDB
    자바
    레디스
    redis
    파인튜닝
    스프링
    Network
    몽고디비
    운영체제
    도커
    지라
    git
    코드레빗
    STT
    docker
    네트워크
    깃
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
erika0915
[Redis] Redis란 무엇인가 ?

티스토리툴바