본문 바로가기
Study OR Book/실전 레디스

[실전 레디스] Chaprter 04_레디스를 활용한 애플리케이션 작성

by Baest 2025. 6. 16.

 

레디스는 다양언 언어를 지원하는 클라이언트 라이브러리를 가지고 있다.
이 장에서는 여러 클라이언트 소개 및 일부 언어를 통해 클라이언트를 사용하는 방법을 배울 수 있도록 하고 있다.

 

다양한 언어를 지원하는 레디스

 

https://redis.io/docs/latest/develop/clients/

 

Connect with Redis client API libraries

Connect your application to a Redis database and try an example

redis.io

 

 

 

레디스는 주요 언어 뿐만 아니라 많은 환경을 지원하고 있다. 레디스 공식 문서에 나열된 것만 해도 50개가 넘는다.

 

레디스 클라이언트를 선택할 때는 다음과 같은 사항이 고려되어야한다.

물론 아래 내용은 레디스 외 다른 기술 스택을 선택할 때도 고려되어야하는 부분이다.

  1. 업데이트가 이뤄지고 있는가
  2. 유지보수가 이뤄지고 있는가
  3. 어느 정도로 기능을 구현할 수 있는가

 

프로그래밍 언어와 레디스 조합

실습을 위한 언어로 풀스택 보다는 기능이 제한적인 가벼운 프레임워크가 선택되었다.

이 장에서는 우분투 22.04를 기반으로 리눅스와 각 언어 관련 라이브러리 설치 방법에 대하여 최소한으로 설명하고 있다.

 

실습에 앞서 책에서는 Redis Launchpad에 대해 소개하고 있다.

영상이나 소스코드를 제공하는 서비스라고 한다.

 

https://redis.io/blog/introducing-redis-launchpad/

 

Redis - The Real-time Data Platform

Developers love Redis. Unlock the full potential of the Redis database with Redis Enterprise and start building blazing fast apps.

redis.io

 

 

> 레디스와 TLS 기능

책에서 별도 컬럼으로 언급한게 있는데, 알아두면 좋을 것 같아 이것 저것 찾아보았다.

 

TLS: 전송 계층 보안(Transport Layer Security)

 

레디스는 기본적으로 빠른 인메모리 데이터 처리를 목적으로 개발된 소프트웨어이다.

레디스 초기 버전에서는 간단한 패스워드 인증만 제공했지만 버전 6.0 이후로 ACL(Access Control List) 같은 고급 기능을 도입하여 보안 수준을 높였다.

 

레디스 공식 문서에는 '레디스를 퍼블릭 인터넷에 직접 노출하지 말라'고 권장하고 있다. 따라서 레디스 포트를 외부에 공개하지 않는게 1차적 보안 수단이다.

 

더 많은 내용은 생략하고 다시 TLS로 돌아오면, 레디스는 6.0 이상에서의 네이티브 TLS를 지원하고 있다.

이전 버전에서는 stunnel, spiped 등 별도 터널링 소프트웨어를 통해 SSL/TLS 암호화를 구현해야 했지만, 이제는 레디스 자체적으로 TLS 활성화가 가능하다.

 

TLS를 적용하면 클라이언트-서버 간 전송 구간에서 데이터가 암호화되고, 중간자 공격 위험을 크게 줄일 수 있다.

 

PHP로 레디스 작업

PHP로 List형을 사용해 뉴스 게시 기능을 구현하는 예시가 나와있다.

 

시나리오

  • 사용자가 이름과 메시지를 입력하면 최근 열 개의 게시물이 표시
  • 새로운 메시지일수록 상단에 표시

이 경우 RDBMS만 사용해서 구현하는게 가능하지만, 레디스를 사용하면 성능적 이점을 얻을 수 있다.

타임라인의 경우 최신 데이터를 리스트 한쪽 끝에 저장, 오래된 데이터를 다른 끝에서 꺼내려는 상황이 있을 수 있다. 레디스의 List형을 사용해 구현 가능하다. 

 

아래 그림은 레디스를 앞단에 배치하여 캐시 서버로 사용하는 것을 나타내고 있는데, 이런 아키텍처를 적용하게 되면 RDBMS의 부하를 줄일 수 있다.

참고로 쓰기 작업은 레디스에서만 진행된다.

 

 

 

 

루비로 레디스 작업

이번에는 루비와 Set 자료형을 사용해 투표 관리 기능을 구현하는 방법을 소개한다.

 

시나리오

  • 사용자 이름 입력 후 투표하고 싶은 후보자 클릭
  • 후보자 선택에는 제한이 없지만, 한 사람당 한 번만 투표가 가능
  • 각 후보자의 전체 투표 수 합계를 표시하게 되어 있다.

 

앞선 예시와 같이 RDBMS만으로 구현이 가능하지만 앞단에 캐시 서버로 레디스를 사용하여 성능을 향상시킨다.

Set을 사용하면 SQL 처리 비용이 클 수 있는 작업을 효율적으로 수행할 수 있다.

 

 

파이썬으로 레디스 작업

마지막으로 파이썬과 레디스 스트림을 사용한 실시간 채팅을 구현한다.

 

List형을 활용한다면 큐에 넣고 꺼내서 사용할 수는 있겠지만 여러 클라이언트가 있는 경우 한 클라이언트의 메세지를 가져오면, 메세지가 삭제되기 때문에 다른 클라이언트는 같은 메세지를 처리할 수 없다는 문제가 있다.

Pub/Sub 기능은 여러 클라이언트에 같은 메세지로 작업 가능하지만, 데이터 유지 기능이 없기 때문에 채널을 구독하지 않은 동안 받지 못한 메세지를 다시 받을 수 없다.

따라서 채팅 같은 용도라면 레디스 스트림을 사용하는 것이 적합하다.

 

시나리오

  • 사용자 이름과 방 이름을 입력해 방에 입장하면 입장했다는 내용이 표시
  • 자신이 보낸 메세지와 상대가 보낸 메세지를 실시간으로 교환
  • 브라우저에서 탭을 닫아 채팅을 종료하면, 다른 사용자에게 그 사용자가 채팅방에서 나갔다는 내용 표시

 



 

 

 

참조

https://pinggoopark.tistory.com/entry/Redis-%EB%A0%88%EB%94%94%EC%8A%A4%EC%9D%98-%EB%B3%B4%EC%95%88

 

[Redis] 레디스의 보안

레디스의 보안Redis(레디스)는 기본적으로 빠른 인메모리 데이터 처리에 초점을 맞춘 소프트웨어이임.최근에는 엔터프라이즈급 사용 사례가 늘어나면서 보안(Security) 요구사항도 크게 중요해졌

pinggoopark.tistory.com