ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Redis사용을 위한 AWS ElastiCache 사용과 개발환경에서 docker 사용
    Redis 2024. 8. 16. 17:26
    728x90

    docker-compose-dev.yml

    backend:
        build:
          dockerfile: Dockerfile.dev
          context: ./backend
        container_name: social_backend
        volumes:
          - /app/node_modules
          - ./backend:/app
        env_file:
          - ./.env
        environment:
          POSTGRESQL_ROOT_PASSWORD: ${POSTGRESQL_ROOT_PASSWORD}
          POSTGRESQL_DATABASE: ${POSTGRESQL_DATABASE}
          POSTGRESQL_HOST: ${POSTGRESQL_HOST}
          POSTGRESQL_USER: ${POSTGRESQL_USER}
          POSTGRESQL_PORT: ${POSTGRESQL_PORT}
          REDIS_HOST: ${REDIS_HOST}
        networks:
          - social_network
    
      # 로컬 개발 환경을 위한 Redis 서비스 추가
      redis:
        image: "redis:alpine"
        container_name: redis_local
        ports:
          - "6379:6379"
        networks:
          - social_network

     

    라이브러리 선택

    @liaoliaots/nestjs-redis

    해당 패키지가 검색 했을때 추천이 가장 많았고 사람들이 가장 많이 사용 했다.
    하지만 해당 패키지는 유지보수를 안하고 있어서 NestJS 10을 사용 할 때 동작하지 않는 문제가 발생했다.
    해당 패키지가 굉장히 좋아 보였지만 어쩔수 없이 다른 선택지를 선택 해야 했다.

     

    @nestjs-modules/ioredis

    @nestjs-modules에서 만든 @nestjs-modules/mailer 를 개인적으로 잘 사용하고 있기 떄문에 신뢰가 간다.
    그리고 현재 기준으로 6개월전까지 관리가 되어 있는거 보니 당연히 Nestjs10버전을 지원할것 같았다.

     

    $ npm install --save @nestjs-modules/ioredis ioredis

     

    local 개발 환경에서는 Redis를 도커를 이용하여 띄울테니까 docker-compose에 Redis를 추가

     

     

    redis가 docker에 잘 떠있는게 확인된다.

     

    @Module({
      imports: [
            RedisModule.forRoot({
                type: 'single',
                url: 'redis://host.docker.internal:6379',
            }),
      ]
    })
    export class AppModule {}

     

    로컬 환경에서 아주 잘 연결 되었다.! 본격적으로 redis를 이용한 개발을 하기 전에 먼저 production 환경에서 AWS Cache를 연결해서 잘 동작하고 있는지 확인 해보자

     

    free tier에서 AWS Elastic Cache 사용시 주의할점

    - ( https://aws.amazon.com/ko/elasticache/pricing/ )

    해당 공식문서를 확인 해보면 elastic cache가 t2 micro를 사용해야하고 serverless로 free tier는 이용 못한다고 나와있다.

    1. serverless 로 생성 하지 말것

    2. 노드 유형은 cache.t2.micro 버전을 사용해야하며 복제본 개수는 0개로 지정

     

    3. 조심해서 아래 나와 있는대로 설정해야 free tier에서 과금 안된다. 

     

     

    이름과 설명은 알아서 작성한다. 나는 이름만 작성 했다.

     

     

     

    꼭 다중 AZ 사용 해지해주고 자동 장애 조치도 해지 해준다

     

     

     

    서브넷 그룹 이름을 지정해준다.

     

    그리고 나머지는 그대로 둔 상태로 다음을 클릭!

     

     

    보안 그룹을 추가 해주고 해당 보안 그룹에 인바운드 규칙 redis 포트를 추가 해준다.
    나 같은 경우에 Elastic Beanstalk을 사용 하고 있는데 RDS에 보안 그룹이 추가 되어 있기 때문에 RDS와 Elastic Beanstalk을 연결하는 보안그룹을 추가 한 후에 
    해당 보안 그룹에 인바운드 규칙에 Redis 포트를 추가 해주었다.

     

    로그나, 백업 다른 옵션들은 이제 기본으로 두고 다음을 누른 다음에 두근두근 생성을 클릭하자!

     

    연결 해줬던 보안그룹에 인바운드 규칙에 redis 포트를 추가하는것을 잊지 말기를...
    redis가 생성 되는데 조금 걸린다. 환경 변수를 추가하자

     

    redis-config.ts

     

    @Module({
      imports: [
            RedisModule.forRootAsync(RedisOptions),
      ]
    })
    export class AppModule {}

    다시 AWS Elastic Cache로 가보자

     

    엔드 포인트를 잘 기억 해두었다가 엔드 포인트를 REDIS Host에 넣어주면 된다.

     

    결과

    이제 pr을 통해서 배포를 해보았다. 
    결과는 두구두구 성공이다!!!! 이제 Redis를 연결 해두었기 때문에 개발 환경에서 활용 해보자
    728x90
Designed by Tistory.