본문 바로가기
Node js/Nest js 강의 내용

8. Redis 연동 (장바구니 리펙토링)

by Bill Lab 2025. 1. 27.
728x90

redis logo

 

1. Redis 란?

    : Key value 기반의 data 저장소(nosql) 이자, pub sub 이 지원 되는 Message Queue

 

2. 주요 특징

     - Key, Value 구조에 TTL 세팅 가능

     - 인메모리 기반 데이터저장소(속도가 빠름)

     - String, Lists, Sets, Sorted Sets, Hashes 등의 다양한 자료 구조 지원

 

3. 속도비교

출처: ByteByteGo newsletter

       : 1ns(nano seconds) 는? 10의 -9승 = 0.000000001 초 

         (redis는 100ns!!)

         1µs(microsecond) = 0.000001초.

         RDB(Postgresql기준)는 1ms(millisecond) = 0.001 초

 

4. redis 자료구조

    1) String

출처: https://redis.io/technology/data-structures/

 

     2) Sets

출처: https://redis.io/technology/data-structures/

 

     3) Sorted Sets

출처: https://redis.io/technology/data-structures/

 

     4) Hashes

출처: https://redis.io/technology/data-structures/

 

 

5. Redis 공식 자료

https://redis.io/docs/latest/develop/get-started/

 

Quick starts

Redis quick start guides

redis.io

 

6. Redis docker 로 띄우기

#docker file
FROM redis:7.2.5-alpine3.20

EXPOSE 6379

CMD ["redis-server"]

   (파일명의 확장자는 yaml 이다)

   1) 먼저 빌드를 해주자!! (docker image 로 띄우는 과정이다)

docker build -f DockerFile.yaml . -t redis

 

   2) 도커이미지를 실행하자 (컨테이너를 생성하는 단계이다.)

sudo docker run -p 6379:6379 redis


    이렇게 하면 도커 컨테이너 까지 만들어졌을것이다.

    (그냥 사용하면 된다는 소리다)

    내부 6379를 외부 6379포트로 연결해서 띄웠기 때문에, localhost:6379 로 접속하면 연결이 될 것이다!


   3) 추가로, redis 내부에 접속하고자 한다면, 아래의 명령어를 실행해서 redis cli 로 접속할 수 있다 


docker exec -it ~~~~ /bin/sh
redis-cli

 

7. Nest js 에서 redis 연동

    1) redis npm 설치

npm install ioredis or yarn add ioredis or pnpm i ioredis
npm install @nestjs-modules/ioredis

 

   2) module 세팅 및 connection 정보 저장

 

8. 장바구니 로직 리펙토링 (최대한 서비스 이후레이어는 수정하지 않도록)

     - redis의 여러 자료 구조중 Hashes 사용

     - 장바구니 생성시 TTL 구성: 매번 스케줄러로 제거할 필요가 없다.

     - 정상로직 처리 되었을 시 장바구니 삭제

     (redis로 cart 처리시에는 꼭 필요한 정보만을 저장하여 memory 사용 최소화 전략 필요)

성능적으로 빨라짐을 확인할 수 있다.

 

 9. redis Hash 주요 명령어

      - hgetall

         : ({ key: value }) 해시의 모든 필드와 그 값을 "key-value 쌍으로 반환" (객체)

      - hkeys

         : ([key1, key2, ...]) 해시의 모든 필드 "키만 배열"로 반환 (배열)

      - hset

         : 필드와 값을 설정

      - hdel

         : 특정필드 삭제

   
  10. Todo

        : cart repo 의 로직을 service 와 repo로 분리하기

728x90