Programming/Project

[Project / Collabit] 우리 프로젝트에 Redis를 적용해야 하는 이유

dev seon 2025. 1. 19. 23:17

 

작년에 토스 면접을 준비하며 Redis를 처음 접했습니다.

프로젝트에 적용해보고 싶었지만 소규모인데다 시간이 부족해 적용하지 못했던 Redis를 이번 프로젝트에 적용해보게 되었습니다.

어떤 기술을 프로젝트에 사용할 때는 그 기술을 사용하는 당위성이 필요하다고 생각합니다.

왜 많은 기술 중 Redis를 고르게 되었는지, 왜 프로젝트에 이 기술을 적용해야 하는지 정리해보려 합니다.

01 Redis란?

Redis(Remote Dictionary Server)는 고성능 키-값 저장소로, 오픈 소스 기반의 NoSQL 데이터베이스입니다.

데이터의 빠른 처리를 위해 메모리에 데이터를 저장하고, 필요에 따라 디스크에 데이터를 지속적으로 저장하여 데이터 손실을 방지합니다.

다양한 데이터 타입을 지원하며, 캐싱, 세션 관리, 메시지 브로커, 대기열 처리 등 다양한 용도로 활용됩니다.

02 Redis의 주요 특징

  1. 인메모리 데이터베이스
  2. 데이터를 메모리에 저장하여 빠른 응답 속도를 제공합니다.
  3. 다양한 데이터 타입 지원
  4. 문자열, 리스트, 해시, 집합, 정렬 집합 등 다양한 데이터 구조를 다룰 수 있습니다.
  5. 영속성
  6. 데이터를 디스크에 주기적으로 저장하여 지속성을 보장합니다.
  7. Pub-Sub 메커니즘
  8. 메시지 브로커로 사용되며 클라이언트 간 메시지 전달과 이벤트 기반 아키텍처에 적합합니다.
  9. 클러스터링
  10. 데이터 샤딩과 복제를 통해 고가용성과 확장성을 제공합니다.
  11. LRU 정책 및 만료 시간
  12. 데이터의 수명을 설정할 수 있어 효율적인 캐싱이 가능합니다.

03 Redis의 활용 사례

Redis는 높은 I/O가 요구되는 키-값 형태의 데이터 저장 및 처리에 적합합니다.

  1. 트위터
    • 15만 명 이상의 실시간 사용자와 초당 30만 건 이상의 타임라인 요청 처리
    • 약 800개의 캐싱된 트윗 정보로 요청을 최적화
  2. 일반적인 활용 사례
    • JWT 인증 토큰 저장 (Refresh Token)
    • API 캐싱 (동일 요청에 대해 캐싱된 데이터 반환)
    • 게시판 좋아요 및 조회수 관리 (댓글 번호를 키, 좋아요를 누른 사용자 ID를 값으로 저장)
    • 최근 검색 기록 관리 (Sorted Set)
    • 랭킹 시스템 구축 (조회수와 좋아요 데이터 기반)
    • 이벤트 알림 및 메시지 브로커

04 Redis와 다른 메시지 브로커 비교

일반적인 활용 사례 중 이벤트 알림 및 메시지 브로커가 있어 다른 메시지 브로커와 비교해보았습니다.

1. Redis

  • Pub/Sub 기능을 제공합니다.
  • 메시지 지속성이 없어 구독하지 않은 메시지는 유실될 수 있습니다.
  • 실시간 데이터 처리에 적합합니다.
  • Redis Streams로 추가적인 신뢰성을 확보할 수 있습니다.

2. RabbitMQ

  • 복잡한 라우팅이 필요한 경우에 적합합니다.
  • AMQP 프로토콜 사용으로 신뢰성 있는 메시지 전송이 가능합니다.
  • 정확한 요청-응답이 중요한 서비스에 적합합니다.

3. Kafka

  • 대량의 데이터를 처리하고 로그 기반의 메시지 큐를 제공합니다.
  • 채팅 기록처럼 메시지의 지속성이 중요한 경우에 적합합니다.
  • Pub/Sub 모델과 분산 환경에서 강력한 성능을 보입니다.

05 우리 프로젝트에 적용할 Redis 활용 방안

  1. JWT 인증 토큰 저장
    • Refresh Token을 Redis에서 관리할 수 있습니다.
  2. API 캐싱
    • 동일 요청에 대해 캐싱된 데이터를 반환할 수 있습니다.
  3. 게시판 좋아요 및 조회수 관리
    • 게시글 번호를 키로 사용해 사용자 행동을 추적할 수 있습니다.
  4. 이벤트 알림
    • 리뷰, 채팅 알림 기능 추가 시 활용이 가능합니다.
  5. 채팅 시스템
    • Redis는 실시간 처리가 필요한 짧은 메시지에 적합합니다.
    • 우리 프로젝트에서는 1:1 채팅 기능만 존재하고 텍스트만 전송이 가능하므로 Redis가 적합합니다

 

결론

이와 같은 이유로 우리 프로젝트에서는 Redis를 도입하기로 결정했습니다.

Redis는 실시간 데이터 처리와 캐싱을 통해 시스템의 성능을 크게 향상시킬 수 있습니다.

만약 Redis를 사용하지 않는다면, DB와 바로 연결되어 결과를 기다리는 시간이 길어져

성능 저하와 함께 사용자 경험에 불편함을 초래할 가능성이 있습니다.

이번 프로젝트를 통해 Redis를 어떻게 활용하면 효율적인 아키텍처를 구현할 수 있을지 깊이 고민하는 기회가 되기를 기대합니다.

Redis의 강점을 최대한 활용하여 높은 성능과 안정성을 갖춘 시스템을 구축해 나가겠습니다.